Datenbank: Bei Abfrage des Schlüsselfeldes ==> Absturz
-
hiho
naja war ja nur ne idee
musst du das mit ado mach oder geht das auch mit InterBase???
Mit IB kann man das so machen:Form1->IBQuery->SQL->Clear(); Form1->IBQuery->SQL->Add(befehl); Form1->IBQuery->Open();[edit] der code ist meist ungetestet und einfach und entsprigt meist einer spontanen idee
mfg allison
-
@allison: Es geht um eine MySQL-Datenbank...
akari schrieb:
Das eigentliche Prinzip von T..Query erlaubt schon eine mehrfache sequentielle Verwendung.
Ja, mach ich auch regelmäßig, allerdings verwende ich keine TADO-Komponenten.
Was für einen Cursor verwendest Du? Client- oder Serverseitig? Falls Clientseitig, stell mal testweise um auf Serveseitig.
Wenn das nicht hilft, würde ich mal ein natives Delphi-Recordset probieren. In der Wrapperklasse sind Fehler. Beim Zugriff auf eine informix-Datenbank unterschlägt einen TADODataSet z.B. grundsätzlich den letzten Datensatz. Da es über das native Delphi-Recordset funktioniert, liegt der Fehler im Wrapper und nicht im OLE-DB-Treiber.
Beispiel für das native Delphi-Recordset:
_di__Recordset rs; TADOCommand* adocom = new TADOCommand(NULL); adocom->Connection = ADOConnection1; adocom->CommandText = "SELECT * FROM artikel WHERE (fnr = " + QuotedStr("01") + ") ORDER BY artnr ASC"; rs = adocom->Execute(); int count = 0; unsigned short int rseof; rs->MoveFirst(); do { rs->MoveNext(); rs->Get_EOF(rseof); } while (!rseof); delete adocom;
-
hiho
@allison: Es geht um eine MySQL-Datenbank...
das ist klar, aber was ist mit zb FireBird?
mfg allison
-
Was soll damit sein? Er verwendet nun mal MySQL und wird wohl seine Gründe dafür haben.
Für Firebird braucht man dann auch wieder zusätzliche Komponenten, um darauf zugreifen zu können. Die Interbase-Komponenten sind für Firebird nicht wirklich geeingnet. Im Gegensatz zu zB den IBObjects detulich langsamer und es sind keine DDL-Statements möglich, respektive nur sehr eingeschränkt. Und bei komplexen DML-Statements würde ich mich auch nicht darauf verlassen, dass sie funktionieren.
-
hiho
Er verwendet nun mal MySQL und wird wohl seine Gründe dafür haben
hab ich ja nix dagegen, Firebird war ja nur ein vorschlag
Für Firebird braucht man dann auch wieder zusätzliche Komponenten, um darauf zugreifen zu können.
Nein, Die IB-Sachen reichen aus
Die Interbase-Komponenten sind für Firebird nicht wirklich geeingnet.
Doch ich arbeite seit 4 Wochen damit, und es funktionniert einwandfrei
http://de.wikipedia.org/wiki/Firebird_%28Datenbank%29
da steht:Firebird ist der Open-Source-Ableger des weiterhin kommerziell von Borland vertriebenen relationalen Datenbankmanagementsystems InterBase .... Aus Interbase 6.0 wurde Firebird 1.0, wobei dies als eine Bugfix-Version mit nur wenigen Erweiterungen angesehen werden kann.
also hat sich das ganze kaum verändert
Im Gegensatz zu zB den IBObjects detulich langsamer und es sind keine DDL-Statements möglich, respektive nur sehr eingeschränkt
Ich nehm ja die IBObjects
Und bei komplexen DML-Statements würde ich mich auch nicht darauf verlassen, dass sie funktionieren.
wieso nicht???
mfg allison
-
hiho
was machen die funktionen? MachWas1() und 2???mfg allison
-
Wenn DDL nur fehlerhaft funktioniert, wieso sollte dann DML einwandfrei funktionieren? Wie gesagt, ich würde mich nicht darauf verlassen, sondern sehr intensiv testen. Für mich war beim nicht funktionierenden DDL schon Schluß. Ich erstelle meine Datenbanken immer per Skript - und das geht mit den Interbase-Komponenten nicht.
Aktuell ist Firebird 2, aber schon ab Version 1.5 hat es da massive Änderungen gegeben. Was glaubst Du, warum DDL nicht funktioniert?!?
Ach so, vier Wochen finde ich nicht besonders lang. Zumindest nicht lange genug um konkrete Aussagen über eine Datenbank zu machen.
-
hiho
Ach so, vier Wochen finde ich nicht besonders lang. Zumindest nicht lange genug um konkrete Aussagen über eine Datenbank zu machen.
ich auch nicht, ich will ja bloss sagen, dass ich in den 4 Wochen noch keine Probleme damit hatte
Wenn DDL nur fehlerhaft funktioniert, wieso sollte dann DML einwandfrei funktionieren? Wie gesagt, ich würde mich nicht darauf verlassen, sondern sehr intensiv testen. Für mich war beim nicht funktionierenden DDL schon Schluß.
DDL und DML funktionieren, wenn du willst kannst du sie aber nochmal testen

und das[mit Scripten arbeiten] geht mit den Interbase-Komponenten nicht.
sicher?, ich kann das nicht beurteilen
mfg allison
-
Okay, vielen Dank Euch allen für die Hinweise
@akari schrieb:
Das eigentliche Prinzip von T..Query erlaubt schon eine mehrfache sequentielle Verwendung.
habe verstanden. Theoretisch müßte es also möglich sein mit einem DataSet mehrere unterschiedliche Abfragen über CommandText durchzuführen.
Da aber der Wurm bei TADODataSet (@Jo_M) drin ist, funktioniert das hier nicht richtig@Joe_M:
Was für einen Cursor verwendest Du? Client- oder Serverseitig?
Habe ich ausprobiert:
clUserClient: In der Standardeinstellung stürzt er, wie bereits berichtet ab.
clUseServer: kein Absturz, aber zeigt nur die Feldnamen der jeweiligen Tabellen an, findet scheinbar keine "Datensatz-Menge", also auch schwer fehlerhaft.Beim Zugriff auf eine informix-Datenbank unterschlägt einen TADODataSet z.B. grundsätzlich den letzten Datensatz
Kann ich für MySQL-DB nicht bestätigen. Ich kann über den MySQL-Browser die Originaldaten parallel zur BCB6-Ausgabe überwachen und habe hier noch nichts derartiges festgestellt.
Meine Lösung sieht jetzt so ähnlich wie Dein Beispiel für das native Delphi-Recordset aus: Ich generiere für jede Abfrage ein neues TADODataSet u lösche es nach Gebrauch. Das scheint problemlos zu funktionieren.

@allison:
ich muß @Joe_M zustimmen, irgendwann muß man sich einfach auf ein bestimmtes System festlegen u dann mit all seinen Stärken u leider auch Schwächen leben u kämpfen.
-
gelöscht, da mittlerweile überflüssig...