![]() |
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:
Der neue Datensatz ist nun drin, alles wunderbar.
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('INSERT INTO test (ED_Nr,ED_DATUM) VALUES ("AB31","12.03.2019")'); ADOQuery1.ExecSQL; 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 |
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 |
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!? |
AW: Umstellung auf ADO -Probleme und Fragen
Zitat:
|
AW: Umstellung auf ADO -Probleme und Fragen
Zitat:
Zitat:
Delphi-Quellcode:
oder
for i:=0 to .query.fields.count-1 do
..:=query.fields[i].value
Delphi-Quellcode:
asstring wird natürlich durch asfloat etc. ersetzt falls notwendig/sinnvoll.
wert1:=query.fieldbyname('Feld1').asstring;
Die Abfrage sieht dann im Prinzip so aus: (ich mag repeat lieber als while!)
Delphi-Quellcode:
Die genaue Syntax ist allerdings von der verwendeten Komponente abhängig!
Query.sql.text:='blabla';
Query.parameters... // falls notwendig Query.open; repeat wert1:=query.fieldbyname('Feld1').asstring; ..... query.next; until query.eof; query.close; (und Fehlerbehandlung hab ich mir auch geschenkt!) Gruß K-H |
AW: Umstellung auf ADO -Probleme und Fragen
Zitat:
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. |
AW: Umstellung auf ADO -Probleme und Fragen
Zitat:
|
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 |
AW: Umstellung auf ADO -Probleme und Fragen
Zitat:
Delphi-Quellcode:
Gruß
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!) K-H |
AW: Umstellung auf ADO -Probleme und Fragen
Zitat:
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 |
AW: Umstellung auf ADO -Probleme und Fragen
Erstmal Danke für die vielen Antworten ...
Ich werde mir in Ruhe mal den Weg durchs ADO-Labyrint bahnen. Nach einem kurzen Test ist mir aufgefallen das die Cursorstellung wichtiger ist wie der Cache :? Soweit funktioniert jetzt auch die Anzeige zur Laufzeit. Er wird jetzt zumindest nach dem Refresh im DBNavigator angezeigt... Wie kann ich aber jetzt den Datensatz einfügen und dann auch gleich im Grid anzeigen lassen? ich habe schon vom Refresh über Resync alles probiert - es erscheint nur folgende Meldung
Code:
ADOQuery1: Operation bei geschlossener Datenmenge nicht ausführbar
|
AW: Umstellung auf ADO -Probleme und Fragen
Wenn du dein SQL-Statement mit ADOQuery1 machst, dann bewirkt ein ADOQuery1.Refresh tatsächlich diesen Fehler.
Denn da ist ja nur ein Befehl zum Einfügen von Daten. wieso willst du den refreshen? Die Daten holst du doch mit einer anderen Verbindung (andere Query?) Diese musst du refreshen (bzw. Versuch es mal mit Requery) |
AW: Umstellung auf ADO -Probleme und Fragen
Zitat:
|
AW: Umstellung auf ADO -Probleme und Fragen
Also irgendwie versteh ich die Umständlichkeit von ADO gerate nicht ...
Wie weis ich denn dem Grid eine eigene Query zu!? Muss ich dies jetzt mit einem zusätzlichen Dataset machen!? Also eine Connection, zwei DS, zusätzlich noch Tables :?:? Ich verstehs grad nicht ... Falls jemand ein Erbarmen mit mir hat, ein kurzer Aufbauanleitungskurs wäre wahrscheinlich das Beste. :thumb: |
AW: Umstellung auf ADO -Probleme und Fragen
So sollten die Verbindungen der Objekte bei dir aussehen
Code:
In ADOQuery1 schreibst du den SELECT für die Daten, die du im Grid angezeigt haben möchtest.
ADOConnection1 -+-> ADOQuery1 ---> DataSource ---> DBGrid
+-> ADOQuery2 Mit dem ADOQuery2 führst du die SQL-Befehle aus. Und jetzt kannst du mit ADOQurey1.Requery die Daten wieder aktualisiert im Grid anzeigen lassen. BTW: Um einen SQL-Befehl auszuführen könntest du aber auch
Delphi-Quellcode:
nehmen
ADOConnection1.Execute( <Parameter> )
|
AW: Umstellung auf ADO -Probleme und Fragen
Aahh jetzt Ja ... Jetzt funktionierts - und ist mir (fast) verständlich.
Jetzt werd ich die Geschichte mal durchtesten und mich bei weiteren Fragen rückmelden. Nochmals Danke und einen schönen sonnigen Sonntag!! |
AW: Umstellung auf ADO -Probleme und Fragen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz