Hallo beisammen,
ich habe ein Problem, für das ich selber keine Antwort finde. Ich habe eine Anwendung programmiert, die eine Verbindung zu einer Datenbank herstellt und anschließend verschiedene Formulare über DLLs läd. Die Datenbank-Verbindung wird an diese DLL-Formulare weitergegeben, so dass diese alle auf die eine DB-Verbindung zugreifen können. Funktioniert eigentlich auch recht gut. Ich verwende hierbei FastShareMem, welches die gleich Funktion wie ShareMem von Borland hat, aber keine extra DLL benötigt.
Der Code:
...Query.SQL.Clear;
...Query.SQL.Add({irgendwas});
...Query.Open;
funktioniert ohne Probleme... auch die Daten bekomme ich ohne Probleme zurück.
Sobald ich aber ExecSQL ausführe um eine Operation, die keine Ergebnismenge liefert, aufzurufen, gibt es eine Access Violation beim Beenden des Hauptprogramms. Beim Freigeben des DLL-Formulars tritt kein Fehler auf.
Wenn ich statt ExecSQL ebenso Open verwende, erhalte ich gleich eine Exception. Allerdings nicht wie zu erwarten ENoResultSet sondern irgend eine andere; auch kein EDatabaseError. Dabei wird der SQL Befehl trotz Fehlermeldung erfolgreich in der Datenbank ausgeführt.
Das ganze liegt auch nicht an der Datenbank. Egal, ob ich eine Paradox Tabelle oder einen MSSQL-Server via ODBC verwende... jedesmal das Gleiche.
Evtl. kennt ja jemand von euch den "großen" Unterschied zwischen Open und ExecSQL von TQuery. Oder vielleicht hat auch irgend jemand einen weiteren Vorschlag der mir weiter helfen könnte.
Ach ja... wenn ich im Hauptprogramm eine procedure schreibe, die einen übergebenen String mit ExecSQL ausführt, diese procedure an die DLL übergebe und von dort aus aufrufe, bekomme ich keinen Fehler. Nur wenn ich ExecSQL von meiner übergebenen TQuery Komponente im DLL-Formular aufrufe, tritt der Fehler auf.
Wäre echt super, wenn mir jemand weiter helfen könnte. Merci schon mal,
Chris
ich habe ein Problem, für das ich selber keine Antwort finde. Ich habe eine Anwendung programmiert, die eine Verbindung zu einer Datenbank herstellt und anschließend verschiedene Formulare über DLLs läd. Die Datenbank-Verbindung wird an diese DLL-Formulare weitergegeben, so dass diese alle auf die eine DB-Verbindung zugreifen können. Funktioniert eigentlich auch recht gut. Ich verwende hierbei FastShareMem, welches die gleich Funktion wie ShareMem von Borland hat, aber keine extra DLL benötigt.
Der Code:
...Query.SQL.Clear;
...Query.SQL.Add({irgendwas});
...Query.Open;
funktioniert ohne Probleme... auch die Daten bekomme ich ohne Probleme zurück.
Sobald ich aber ExecSQL ausführe um eine Operation, die keine Ergebnismenge liefert, aufzurufen, gibt es eine Access Violation beim Beenden des Hauptprogramms. Beim Freigeben des DLL-Formulars tritt kein Fehler auf.
Wenn ich statt ExecSQL ebenso Open verwende, erhalte ich gleich eine Exception. Allerdings nicht wie zu erwarten ENoResultSet sondern irgend eine andere; auch kein EDatabaseError. Dabei wird der SQL Befehl trotz Fehlermeldung erfolgreich in der Datenbank ausgeführt.
Das ganze liegt auch nicht an der Datenbank. Egal, ob ich eine Paradox Tabelle oder einen MSSQL-Server via ODBC verwende... jedesmal das Gleiche.
Evtl. kennt ja jemand von euch den "großen" Unterschied zwischen Open und ExecSQL von TQuery. Oder vielleicht hat auch irgend jemand einen weiteren Vorschlag der mir weiter helfen könnte.
Ach ja... wenn ich im Hauptprogramm eine procedure schreibe, die einen übergebenen String mit ExecSQL ausführt, diese procedure an die DLL übergebe und von dort aus aufrufe, bekomme ich keinen Fehler. Nur wenn ich ExecSQL von meiner übergebenen TQuery Komponente im DLL-Formular aufrufe, tritt der Fehler auf.
Wäre echt super, wenn mir jemand weiter helfen könnte. Merci schon mal,
Chris
Comment