Announcement

Collapse
No announcement yet.

TQuery.ExecSQL aus einer DLL aufrufen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TQuery.ExecSQL aus einer DLL aufrufen

    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

  • #2
    Hallo,

    Borland dokumentiert in der Hilfedatei der BDE (<i>BDE32.HLP</i>) für den Einsatz der BDE aus einer DLL heraus besondere Regeln (siehe Hilfeseiten zu <i>DbiInit</i>, <i>DbiDllExit</i>, usw.). Wurden diese in diesem Projekt eingehalten?

    P.S: Die Regeln und ein Beispielprojekt dazu sind auch in meinem Buch <i>Client/Server-Datenbankentwicklung mit Delphi</i> auf den Seiten 154 bis 159 zu finden

    Comment


    • #3
      Hallo Andreas,

      merci Dir für die super Info. Die genannten Regeln habe ich natürlich prompt nicht eingehalten; aber nachdem ich die oben genannten Funktionen nachträglich eingebaut habe funktioniert alles bestens. Da wäre ich wohl nie drauf gekommen. In einem anderen Forum konnte mir auch keiner weiter helfen.

      Klasse das es so Leute wie Dich gibt. Werd gleich nachher mal versuchen ob sie im Hugendubel Dein Buch liegen haben... da muss ich unbedingt mal drin stöbern und es auch kaufen, wenn es weitere Themen enthält die ich benötige oder die mich interessieren! Merci und tausend Dank nochmal,

      Grüsse aus München,
      Chri

      Comment

      Working...
      X