Borland + MS Oracle ODBC-Treiber



  • Du machst die Zuweisung im Ereignis OnLogin des TDatabase?
    Dort kannst Du zu Laufzeit in LoginParams Benutzername und Passwort setzen.
    So funktioniert es zumindest bei unserer informix DB.

    Vorher die Zeilen mit USER NAME und PASSWORD löschen dann in der OnLogin:

    LoginParams->Add("USER NAME=" + FormLogin->GetBenutzerName().Trim());
    LoginParams->Add("PASSWORD=" + FormLogin->GetPasswort().Trim());
    

    FormLogin ist ein selbstgeschriebenes Abfragefensterchen für Name und Pw.



  • Irgendwie funktioniert das auch nich. 😞

    Das komische ist ja, wenn ich z.B. im GUI-Editor die Eigenschaft Connected auf true setze, kommt der Login-Dialog normal hoch, ich melde mich an und es klappt.

    Wenn ich das Programm dann starte, kommt der LoginDialog nich mehr, obwohl LoginPrompt auf true is.

    Woran kann das denn liegen?



  • Kann natürlich sein, dass der ODBC Treiber andere Bezeichnungen erwartet. Sprich statt USER NAME USERNAME, oder statt PASSWORD PASSWD... LoginPrompt muß auch weiterhin auf true stehen, auch wenn Du eine eigene OnLogin verwendest.
    Kannst auch noch mal versuchen, in der IDE Connected auf false zu setzen, kompilieren und das Programm nicht aus der IDE starten.

    Laut Borland ist das kein Bug, allerdings konnte mir auch niemand erklären, was da falsch läuft. Das einzige was man mir anbieten konnte, war eine Fehleranalyse über einen überteuerten Support-Vertrag.
    Auf jeden Fall beeinflußt das Connected = true in der IDE das Verhalten.

    Das Lustige ist, dass es ein paar Tage dauern kann, bis dieser Effekt auftritt, oder er tritt gar nicht auf, aber wenn er in einem Projekt einmal aufgetreten ist, wird man ihn nicht wieder los.



  • Irgendwie will mich mein PC verarschen 😞

    Also ich connecte in der IDE.
    Dann kommt der Dialog und alles funzt wunderbar -> der Treiber funktioniert.

    Wenn ich das Programm dann starte (egal ob über IDE oder Explorer) kommt wieder die Fehlermeldung "Kennung ungültig".

    Wo kann man denn nachgucken, wie die Parameter heissen, die der ODBC-Treiber erwartet?



  • Schau mal, ob hier was brauchbares bei ist: http://www.connectionstrings.com/



  • Welchen BCB hast du denn?

    Falls du den 6er hast und auf ODBC verzichten kannst sollteste dir mal die dbExpress Komponenten angucken.
    Da ist die Konfiguration meiner Meinung nach einfacher.



  • Müßte der 6er sein. Im 5er hatte ich dieses Problem nicht.



  • Ja is die 6er Version...

    Werde mir den Link mal anschauen...

    Edit:
    Habe mir den Link mal angeguckt.
    Da waren auch Sachen eingetragen (Uid und Pwd) allerdings klappt das auch nich...
    Alles scheisse 😞



  • Ich habe jetzt sogar mal alles manuell gemacht.
    Also in der TDatabase keinen Alias sondern den MS Oracle Treiber direkt angegeben und in den Params dann SERVER, UID und PWD gesetzt.

    Jetzt kommt immer die Fehlermeldung "Falscher Konfigurationsparameter".

    Was meint er denn damit?
    (Habe übrigens schon alle Parameter in Params usw. entfernt umbenannt usw.)

    Edit:
    Rechtschreibfehler beseitigt.



  • Poste doch bitte mal die OnLogin Routine hier, sowie die Einstellungen der TDatabase.



  • TDatabse *dbOracle
    AliasName: oracle (is die ODBC-Quelle)
    Params:
    UID=a
    PWD=b
    (Habe hier auch schon USER NAME=a und PASSWORD=b ausprobiert)

    In der Oracle ODBC-Quelle habe ich Server und Benutzername hinterlegt.

    Im Quellcode mache ich dann nur noch
    mdlOracle->dbOracle->Connected = true;

    In der OnLogin-Routine mache ich gar nix.

    Ich habe im selben Programm übrigesn eine weiter Datenbank im Zugriff die auf Postgres läuft, dort mache ich das genauso und dort funktionierts...



  • Die Zuweisung von USER NAME und PASSWORD MUSS in der OnLogin erfolgen!

    Grüße Joe_M.



  • So habe den ganzen kappes in die OnLogin kopiert, immer noch die gleiche Fehlermeldung.

    Meine OnLogin-Routine:

    void __fastcall TmdlOracle::dbOracleLogin(TDatabase *Database,
          TStrings *LoginParams)
    {
      dbOracle->Params->Clear();
      dbOracle->Params->Add("USER NAME=a");
      dbOracle->Params->Add("PWD=b");
    }
    


  • Versuch es bitte mal im dem übergebenen Objekt LoginParams.



  • Ich krich einen an der Klatsche! Jetzt gehts...

    Ich glaub es hackt.

    Aber warum muss man dass da machen und warum funzt das nich, wenn ich das direkt in dem TDatabase-Objekt einrichte?



  • Wenn Du die Zeilen aus meinem Posting direkt in Deine OnLogin kopiert hättest... (um Sledge Hammer zu zitiieren: Vertrauen Sie mir!) 😉

    Das ist m.E. ein Bug im BCB6.

    Grüße Joe_M.



  • Naja, jetzt funtkionierts ja auf jeden Fall.
    Danke noch mal für die schnelle Hilfe.


Anmelden zum Antworten