TADOConnection Verbindungsaufbau-Probleme



  • Hallo!

    Um mich kurz zu fassen 🙂

    Ich habe iene TADOConnection-Komponente auf meiner Form, die mit einer Access-Datenbank verbunden ist. Ich habe mit Hilfe einiger Artikel hier im Forum die Verbindung genau eingerichtet, der Testaufbau klappt und zur Entwicklungszeit kann ich "Connected=true" setzen, ohne Probleme.
    Wenn ich während der Entwicklungszeit "Connected=true" setze, funktioniert mein ganzes Programm auch während der Laufzeit ohne Probleme.

    Der Haken: Ich will die Datenbank erst zur Laufzeit verbinden, d.h. "Connected=false" und im Code dieses:

    Form2->ADOConnection1->ConnectionString="Provider=MSDASQL.1;Persist Security Info=False;User ID=\"\"\"\"\"\";Location=db1.mdb;Mode=ReadWrite;Extended Properties=\"DSN=Microsoft Access-Datenbank;DBQ=db1.mdb;DefaultDir=;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;UID=admin;\";Initial Catalog=db1";
    Form2->ADOConnection1->Connected=true;
    if (!(Form2->ADOConnection1->Connected))
    Application->MessageBox("Error", "Cannot open/read database!", MB_OK);
    else
    ...
    

    Hierbei ist der Connection-String unwichtig (habe ihn hier nur aus der Komponente zur Ansicht heraus in den Code kopiert, auch ohne klappt es nicht).
    Das Programm sagt in der Zeile

    Form2->ADOConnection1->Connected=true;
    

    diesen Fehler: Es wird eine Exception aufgerufen (EOLeException) mit der Nachricht "CoInitialize has not been called".

    Hat jemand eine Idee wo der Haken liegt? Vor allem das merkwürdige, das dies nur passiert, wenn ich während der Laufzeit "Connected=true" setze.

    Gruß
    Genscher



  • Hi,

    Hierbei ist der Connection-String unwichtig..

    nur der ConnectionString ist entscheidend.
    Dein ConnectionString scheint mir falsch zu sein.

    Doppelklick auf ConnectionString im Objektinspektor. Den entsprechnenden Treiber wählen, Einstellungen auf der nächsten Seite vornehmen und auf "Verbindung testen" klicken. Solange versuchen und Einstellungen ändern, bis das Teil Verbindung "erfolgreich" meldet.



  • Hallo!

    Wie gesagt, das testen läuft astrein! Der connection-String ist also richtig.
    Vor allem habe ich ihn im Code auskommentiert und trotzdem kommt der gleiche Fehler.

    Der Haken liegt woanders, denke ich.

    Form2->ADOConnection1->Connected=false;
    Form2->ADOConnection1->Connected=true;
    

    Funktioniert, wenn ich während der Entwicklungszeit "Connection=true" in der Komponente setze,
    und funktioniert nicht , wenn ich während der Entwicklungszeit "Connection=false" in der Komponente setze.(die oben genannte Exception kommt dann.

    Danke für die Mühe!



  • hm,

    if(Form2->ADOConnection1->Connected)
             Form2->ADOConnection1->Connected=false;
    Form2->ADOConnection1->Connected=true;
    

    schon mal probiert ?



  • Hallo!

    Ich weiss nicht ob es damit zusammenhängt, aber falls du den
    Builder 5 benutzt gibt es bei Borland ein Update das wohl
    einige Probleme mit ADO beseitigt...

    Ich hatte damals einen Fehler beim Zugriff auf die Datenbank den ich nicht
    gewollt reproduzieren konnte. Nach dem Update kam er nicht mehr vor...

    Hoffe es hilft weiter!

    Schönen Gruß!



  • Hallo mal wieder 🙂

    Also

    if(Form2->ADOConnection1->Connected)
             Form2->ADOConnection1->Connected=false;
    Form2->ADOConnection1->Connected=true;
    

    habe ich probiert und es funktionierte immer noch nicht.

    Wahrscheinlich muss ich mir ein Update vom BCB6 holen.
    Danke für den Hinweis!



  • Hallo!

    Also bei mir haben sich die ganzen Errors in Luft aufgelöst, nachdem ich meine Inline-Assembler-Thread-Anweisung (push bla, ..., Call CreateThread) durch ein TThread-Object ersetzt habe.

    Also der Code weiter oben funktioniert jetzt Prächtig und das Ado-Zeug läuft auch.

    Ich habe da wohl den Stack nicht ganz richtig behandelt, und die Syncronisation total weggelassen.

    Dies nur als Anmerkung für alle, die auch mal "wilde Fehlermeldungen" erhalten.

    MfG
    Genscher


Anmelden zum Antworten