Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Umstellung auf ADO -Probleme und Fragen (https://www.delphipraxis.net/154262-umstellung-auf-ado-probleme-und-fragen.html)

dj-pitti 3. Sep 2010 11:38

Datenbank: Access • Version: MDAC 2.8 • Zugriff über: ADO

Umstellung auf ADO -Probleme und Fragen
 
Hallo miteinander,

nach langjähriger Nutzung der freien Datenbankkomponente EDB und einem Umstieg auf Delphi 2010 bin ich nun gezwungen meine Datenanbindung auf ADO umzustellen.

Soweit habe ich die Anbindung im Griff, nur bei der Umsetzung einiger Dinge benötige ich noch Hilfe:

Ich möchte einen neuen Datensatz einfügen (ohne DB-Navigator und Datenfelder). Ich nehme angenommen zwei Edits und füge den Inhalt mittels des Codes ein:

Delphi-Quellcode:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('INSERT INTO test (ED_Nr,ED_DATUM) VALUES ("AB31","12.03.2019")');
ADOQuery1.ExecSQL;
Der neue Datensatz ist nun drin, alles wunderbar.

Jetzt meine Frage 1:

- Ein auf der Form befindliches DBGRid registriert die Änderung nicht. Auch ein Refresh auf dem Navigator bringt nichts. Nur ein Neustart zeigt die neu angelegten Datensätze!?

Wie kann ich den aktuellen Datensatz im Grid sofort anzeigen lassen!?

Frage 2:

Welche Komponenten sind grundsätzlich wichtig - wäre es auch möglich die SQL-Befehle per ADOCommand zu machen!?

Wozu ist die ADODataSet gut!?

So, ich hoffe die Fragen waren jetzt nicht so :stupid:

Viele Grüße, Silvio

p80286 3. Sep 2010 12:12

AW: Umstellung auf ADO -Probleme und Fragen
 
Hallo Silvio,

zu Deiner ersten Frage,
hol Dir die Daten, die Du brachst und wann Du sie brauchtst immer per Query!

Ich mißtraue diesen Komponenten auf das heftigste.

Gruß
K-H

dj-pitti 3. Sep 2010 12:25

AW: Umstellung auf ADO -Probleme und Fragen
 
Hallo K-H

auch wenn das garantiert nicht für die erste Frage ist nehme ich mir dies an ...

Also immer TADOQuery nehmen?

Wie ist denn bei ADO überhaupt die Behandlung von Recordssets geregelt? Sprich ich lasse mir per WHERE bestimmte Datensätze auslesen, wie komm ich dann an diese ran!?

Bernhard Geyer 3. Sep 2010 12:46

AW: Umstellung auf ADO -Probleme und Fragen
 
Zitat:

Zitat von dj-pitti (Beitrag 1047227)
- Ein auf der Form befindliches DBGRid registriert die Änderung nicht. Auch ein Refresh auf dem Navigator bringt nichts. Nur ein Neustart zeigt die neu angelegten Datensätze!?

Wie kann ich den aktuellen Datensatz im Grid sofort anzeigen lassen!?

Hier dürfte das bescheuerte Caching-Verhalten der JET-Engine mitspielen. Wurde schon mal öfters gefragt und dürfte hier über die Suche zu finden sein.

p80286 3. Sep 2010 14:01

AW: Umstellung auf ADO -Probleme und Fragen
 
Zitat:

Zitat von dj-pitti (Beitrag 1047242)

Also immer TADOQuery nehmen?

Ich meine Ja
Zitat:

Zitat von dj-pitti (Beitrag 1047242)
Wie ist denn bei ADO überhaupt die Behandlung von Recordssets geregelt? Sprich ich lasse mir per WHERE bestimmte Datensätze auslesen, wie komm ich dann an diese ran!?

Da kann ich nur sagen wie ich es mache:
Delphi-Quellcode:
for i:=0 to .query.fields.count-1 do
          ..:=query.fields[i].value
oder
Delphi-Quellcode:
wert1:=query.fieldbyname('Feld1').asstring;
asstring wird natürlich durch asfloat etc. ersetzt falls notwendig/sinnvoll.

Die Abfrage sieht dann im Prinzip so aus:
(ich mag repeat lieber als while!)
Delphi-Quellcode:
Query.sql.text:='blabla';
Query.parameters...     // falls notwendig
Query.open;
repeat
  wert1:=query.fieldbyname('Feld1').asstring;
  .....
  query.next;
until query.eof;
query.close;
Die genaue Syntax ist allerdings von der verwendeten Komponente abhängig!
(und Fehlerbehandlung hab ich mir auch geschenkt!)

Gruß
K-H

shmia 3. Sep 2010 15:09

AW: Umstellung auf ADO -Probleme und Fragen
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1047244)
Hier dürfte das bescheuerte Caching-Verhalten der JET-Engine mitspielen.

Ganau das ist die Ursache.
Wenn man sich an folgende Regeln hält, dann funktioniert es auch mit MS Access.
1.) es gibt genau eine einzige ADOConnection pro Datenbank
Also niemals ohne ADOConnection arbeiten (obwohl das möglich wäre)

2.) Alle anderen ADO Komponenten (TADOQuery, TADODataset, TADOCommand, TADOTable) werden mit dieser ADO Connection verknüpft

3.) Property CursorLocation auf clUseServer setzen.
Das gilt nur für MS Access (Jet Engine).
Bei allen anderen Datenbanken (MS SQL Server) ist clUseClient die bessere Einstellung.

sirius 3. Sep 2010 15:31

AW: Umstellung auf ADO -Probleme und Fragen
 
Zitat:

Zitat von p80286 (Beitrag 1047268)
(ich mag repeat lieber als while!)

Und wenn kein Datensatz zurückgeleifert wird (also keiner existiert) ?

Bummi 3. Sep 2010 16:04

AW: Umstellung auf ADO -Probleme und Fragen
 
Wir Arbeiet seit Jahren nur nocht mit Adodataset, TAdoQuery hat bei Bestimmten Anforderungen Probleme gemacht (ich weiß leider nicht mehr welche).
Bei den AdoDatasets ist Requery das Kommando für die Aktualisierung, besser Du kapselst es mit eine Requery4Bookmark.
"Befehle" setzt Du am einfachsten per Connection.Execute ab.

Sehr schö lassen sich hier auch Master/Detail Beziehungen abarbeiten.

z.B.
Master:
ADSMaster.Commandtext := 'Select * from Adressen where was auch immer order by ...


Detail:
ADSDetail.CommandText := 'Select * from Rechnungen where Adressen_ID=:ID oder by Datum'


Datail.Datasource := Master_SRC
Datail.Masterfields := ID

p80286 3. Sep 2010 16:05

AW: Umstellung auf ADO -Probleme und Fragen
 
Zitat:

Zitat von sirius (Beitrag 1047299)
Zitat:

Zitat von p80286 (Beitrag 1047268)
(ich mag repeat lieber als while!)

Und wenn kein Datensatz zurückgeleifert wird (also keiner existiert) ?

Das gehört für mich zur Fehlerbehandlung
Delphi-Quellcode:
if not query.eof then begin
  // Aufnahme der Daten vorbereiten
  repeat
    //Daten holen
  until Query.eof; // ggf. eine andere Abbruchbedingung z.B. 5 Datensätze gelesen (solls geben!)
Gruß
K-H

p80286 3. Sep 2010 16:11

AW: Umstellung auf ADO -Probleme und Fragen
 
Zitat:

Zitat von shmia (Beitrag 1047283)
Zitat:

Zitat von Bernhard Geyer (Beitrag 1047244)
Hier dürfte das bescheuerte Caching-Verhalten der JET-Engine mitspielen.

Ganau das ist die Ursache.
Wenn man sich an folgende Regeln hält, dann funktioniert es auch mit MS Access.
1.) es gibt genau eine einzige ADOConnection pro Datenbank
Also niemals ohne ADOConnection arbeiten (obwohl das möglich wäre)

Es ist möglich!
Wo liegt das Problem? werden die Daten jeweils parallel durch die Connection geschoben wobei die eine nichts von der anderen weiß? (commit)

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz