ODBC/UDD_SQL Befehle/Fehler bei SQLDriverConnect()



  • Hi 🙂

    Ich will über ODBC eine UDD Datenbank connecten und ein paar spezielle Befehle wie UDD_Update() absetzen.

    Hab das mit TQuery und TDatabase versucht. Aber man kann da nur syntaktisch richtige SQL Befehle absetzen, nich sowas wie

    UDD_EXECUTE (delete FROM cobol_field, C:\Dokumente und Einstellungen\afe1\Eigene Dateien\udd\drop1.txt)
    

    Zwar klappt zwar delete FROM usw alleine ganz gut, aber für spezielle Befehle wie UDD_Import(file.ufd) kenn ich kein Gegenstück.

    So.

    Nach Doku wird empfohlen dass mittels SQLDriverConnect()
    zu machen und die verweisen da mal auf "Microsoft ODBC 2.0
    Programmer's Reference and SDK Guide".

    Hab ich auch gefunden. Aber beim Test des Progs kommen merkwürdige Fehler:

    [Linker Fehler] Unresolved external '_SQLSetEnvAttr' referenced from C:\PROGRAMME\BORLAND\CBUILDER5\PROJECTS\UDDUPDATE.OBJ
        [Linker Fehler] Unresolved external '_SQLConnect' referenced from C:\PROGRAMME\BORLAND\CBUILDER5\PROJECTS\UDDUPDATE.OBJ
        [Linker Fehler] Unresolved external '_SQLAllocHandle' referenced from C:\PROGRAMME\BORLAND\CBUILDER5\PROJECTS\UDDUPDATE.OBJ
        [Linker Fehler] Unresolved external '_SQLExecDirect' referenced from C:\PROGRAMME\BORLAND\CBUILDER5\PROJECTS\UDDUPDATE.OBJ
        [Linker Fehler] Unresolved external '_SQLDisconnect' referenced from C:\PROGRAMME\BORLAND\CBUILDER5\PROJECTS\UDDUPDATE.OBJ
        [Linker Fehler] Unresolved external '_SQLFreeHandle' referenced from C:\PROGRAMME\BORLAND\CBUILDER5\PROJECTS\UDDUPDATE.OBJ
    

    Hmm nach verschiedenen Forumseinträgen braucht man die odbccp32.lib und die odbc.lib. Hab ich.
    Desweiteren sind
    <windows.h>
    <sql.h>
    <sqlext.h>
    included.

    Joar, ich weiss nich was ich machen soll. Krieg den Fehler nicht weg.

    Gibt es nicht die Möglichkeit Befehle mit TQuery bwz Database einfach so abzusetzen ohne das nen Fehler kommt?

    Schönen Gruß
    Andi



  • Freakazoid schrieb:

    Hmm nach verschiedenen Forumseinträgen braucht man die odbccp32.lib und die odbc.lib. Hab ich.
    Desweiteren sind
    <windows.h>
    <sql.h>
    <sqlext.h>
    included.

    du muss die *.lib Datei zu deinem projekt hinzufügen und nicht die *.h . die header dateien sind dafür da, damit dein compiler die Funktionen/Klassen/Strukturen/etc. -beschreibung weiß. so eine Headerdatei kannst du auch selbst schreiben (vorrausgestzt du wei?, wie die Funktionen/Klassen/Strukturen/etc. auszusehen haben) . die Funktioenen selbst liegen aber in dem Fall in DLL's. und die werden von Linker mit Hilfe der *.lib's gesucht und zu deinem Program "gelinkt".



  • Hmm also die libs sind in dem Suchpfad. Reicht das?



  • 1. Projektverwaltung öffnen (STRG+ALT+F11)
    2. Mit rechter Maustaste auf dein Projekt klicken (das Ding, was fett angezeigt wird)
    3. Im Kontextmenü auf Hinzufügen klicken (linke Maustaste 🙂 )
    4. in dem Fenster "Dem Projekt hinzufügen" bei Dateityp "Bibliotheksdatei (*.lib)" auswählen
    5. Deine *.lib Datei suchen und auswählen.
    6. auf "OK" klicken.



  • Cool, kenne ich gar nicht 🙂

    Danke, aber die odbccp32.lib hab ich nur für visual Studio und irgendwie kommt da nen Fehler beim compilieren nach dem hinzufügen 😞

    [Linker Fehler] 'C:\PROGRAMME\MICROSOFT VISUAL STUDIO .NET 2003\VC7\PLATFORMSDK\LIB\ODBCCP32.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
    

    Nachdem ich odbc32.lib hinzugefügt habe bleiben die external Fehler übrigens...



  • wenn du dene Fehlermeldung markierst (blau) und dann uaf F1 drückst, bekommst du folgendes zur Sicht

    Die Objektdatei ist beschädigt oder keine .OMF-Objektdatei. Wenn Sie eine COFF-Importbibliothek linken, führen Sie zunächst das Programm COFF2OMF.EXE aus dem Verzeichnis BIN aus.

    oder besser du machst eine *.lib Datei mit Hilfe von implib.exe (<BCB>\bin\) aus der DLL Datei.



  • Äh also..wie mach ich das denn?

    hab die beiden exe Dateien gefunden und hmm

    Und ich soll aus der DLL ne *.lib machen, dachte die wäre schon *.lib *voll_verwirrt* 😕



  • Suche in der BCB Hilfe nach 'Coff2Omf' und 'implib'



  • Brauch ich für implib nicht die DLL Datei?

    Bei Coff2Omf sieht der Befehl doch folgendermassen aus, woll?

    C:\Programme\Borland\CBuilder5\Bin>Coff2Omf.exe c:\Odbccp32.lib c:\Test\Odccp32.lib
    

    Kommt der Fehler hier..

    COFF to OMF Converter Version 1.0.0.74 Copyright (c) 1999, 2000 Inprise Corporat
    ion
    ERROR: COFF error: c:\Odbccp32.lib
    (coffread.cpp, 1548) : reading size of obj string table



  • natürlich brauchst du die dll datei. aus der dll wird mit hilfe von implib eine bcb-konforme lib datei erstellt.



  • Hab die DLL nur in Installshield Prof ^^..ok, hab ich gemacht.

    Der Befehl:

    C:\Programme\Borland\CBuilder5\Bin>implib.exe c:\Odbccp42.lib @respon.txt
    

    In respon.txt steht Odbccp32.dll.
    Die befindet sich auch in c:\

    Fehlermeldung:

    Cannot open response file 'respon.txt'

    EDIT:

    hab jetzt die respon.txt und die Odbccp32.dll im bin Verzeichniss...hmm jetzt kommt ne Fehlermeldung von wegen Anweisung verweist auf Speicher X828 sogar zweimal und ne unknown software exception..schön :(..und die lib is waaaahnsinnige 8 kb groß?

    Is das gut? 🙂

    Vermutlich nich und hab die ma trotzdem hinzugefügt und der external fehler von oben kommt



  • implib.exe Odbccp32.lib Odbccp32.dll



  • Hmm ja vielen Dank...klappt zumindest ohne Fehlermeldung

    Ja, hab des jetzt hinzugefügt und der alte external Fehler kommt 😞

    Datei is immer noch 8 kb groß. Nur die odbc32.lib bzw odbc32.dll hab noch nicht durch implib gejagt..

    Willst du die Dateien vll ma ham und versuchen zu compilieren?



  • dann nimm di andere lib in dein projekt rein.

    ich habe das zwar schon mal gemacht, aber ist schon drei jahre her. und weiß auch nicht mehr, welche dll die richtige ist.



  • Hab mittlerweile alles irgendwie mal gehabt an dlls und libs 😞
    Dachte ich schaff des noch bevor ich inne Urlaub gehe.
    2 - 3 Stunden gebe ich mir noch.


Anmelden zum Antworten