ADOX unter C++ Builder 2007



  • Hallo zusammmen,

    ich bin gerade dabei mich mit C/C++ anzufreunden und habe dabei natürlich gleich ein Problem.
    Ich wollte unter dem C++ Builder 2007 mittels ADOX eine leere MDB-Datei erzeugen.
    In Delphi habe ich das einwandfrei hinbekommen, jedoch will es unter C einfach nich funktionieren.
    Ich habe die ADOX über "Komponente importieren" > "Typbibliothek importieren" > "Microsoft ADO Ext. 2.8 for DLL and Security" ohne Komponenten-Wrapper als "Unit"
    importiert. Daraufhin war im Imports-Verzeichnis unter anderem eine ADOX_TLB.h Datei zu finden. Diese habe ich per

    #include "ADOX_TLB.h"
    

    in mein Programm übernommen. Desweiteren habe ich dann folgenden Code:

    _Catalog *MyCatalog;
    ...
    ...
    ...
    MyCatalog->Create("TestDB.mdb");
    

    Beim Compilieren bekomme ich dann immer folgende Fehlermeldung:
    "[BCC32 Fehler] PP_Main.cpp(57): E2285 Keine Übereinstimmung für '_Catalog::Create(AnsiString)' gefunden"

    Ich habe schon in mehreren Foren gesucht aber bin bis jetzt leider nicht
    weitergekommen. Es wäre schön wenn mir jemand weiterhelfen könnte.

    Gruß Netzschleicher



  • Hallo

    Die Fehlermeldung sagt aus, das an Create einen falschen Parameter übergibst. Schau mal in der erstellten Header-datei nach, was gefordert wird. Ich vermute du must einen UnicodeString anstatt eines AnsiString übergeben. Wenn ich Recht habe, dann sollte dieser Aufruf funktionieren :

    MyCatalog->Create(L"TestDB.mdb"); // Zusätzliches L symbolisiert einen wchar_t*
    

    bis bald
    akari



  • Hallo,

    stimmt mit der Angabe als wchar_t funktioniert es. Das heisst der code wird nun
    kompiliert. Jedoch erhalte ich dann bei der Ausführung einen weiteren Fehler:

    "Zugriffsverletzung bei Adresse xxxxx in Modul C-Test.exe.
    Lesen von Adresse 00000000"

    Brauche ich noch einen extra Connectionstring oder eine offene ADO-Connection?

    Grüße Netzschleicher



  • Hallo

    Die Fehlermeldung hat nichts mit der Datenbank ansich zu tun, sondern du verwendest irgendwo einen ungültigen Zeiger. Vermutlich hast du zu MyCatalog keine gültige Instanz angelegt.

    bis bald
    akari



  • In Delphi hatte ich noch folgende Zeile:

    Catalog:=CoCatalog.Create;
    

    Dann muß ich das auch noch einfügen. Hatte es schon mit

    MyCatalog.CreateInstance(__uuidof(Catalog));
    

    versucht. Allerdings habe ich da wieder einen anderen Fehler.

    "[BCC32 Fehler] PP_Main.cpp(61): E2294 Auf linker Seite der Struktur ist . oder .* erforderlich"

    Ist etwas frustrierend gerade. In Delphi hatte ich damit keine Probleme. 😕



  • Hallo

    In C++ verwendet man new, um Instanzen zu erstellen. Ausgehend von deiner Zeigerdeklaration müßte das so aussehen :

    _Catalog *MyCatalog = new _Catalog();
    ... // Benutzen
    delete _Catalog; // Wieder löschen
    

    Aber ich weiß auch nicht ob der Konstruktor deine Klasse nicht noch einen Parameter braucht. Dazu mußt du in die besagte Headerdatei schauen.

    Ich empfehle dir dringend, die Grundlagen der Sprache C++ zu lernen, bevor du versuchst, mit der C++ VCL eine Datenbank-Anwendung zu schreiben.

    bis bald
    akari



  • Naja,

    hat so auch nicht wirklich funktioniert. 😕
    Ich hatte das mal versucht weil ich versuchen wollte ob ich das auch mit C/C++ hinbekomme. Ist aber im Augenblick doch ne Nummer zu groß. Hatte C/C++ bis jetzt
    mal zum Schreiben einer Befehlssatzsimulation eines alten 8Bit-Prozessors aus CP/M Zeiten benutzt. Das hatte sehr gut funktioniert.

    Trotzdem danke für Deine Mühe.



  • Hallo

    "Funktioniert nicht" ist keine ausreichende Fehlerbeschreibung...

    bis bald
    akari


Anmelden zum Antworten