Zugriff auf Tabelle -> Ungültiger Dateiname



  • Hallo:

    ich habe in dem Ordner wo mein Programm ist einen ordner Data, wo eine tabelle (paradox7) drin ist: alias2.db!

    Im form create möchte ich da schon was auslesen:

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    AnsiString asDatadir = ExtractFilePath(Application->ExeName) +"\\Data";
    Query1->DatabaseName = asDatadir;
    Query1->Close();
    Query1->SQL->Clear();
    Query1->SQL->Add("select * from alias2.db");
    Query1->Open();
    

    Fehler ist Ungültiger Dateiname, was mache ich falsch?



  • ich kenne mich da zwar nicht so aus, aber verschiebe das ganze mal in FormShow und gib mal bescheid ob der gleiche fehler auftrettet..



  • ja gleicher fehler auch bei SHow!!
    oder mach ich grundsätzlich was falsch?



  • könnte es vielleicht daran liegen, dass du DatabaseName einen Pfad und keine Datenbank zuweißt? ich kenn mich mit Paradox nicht aus, aber bei Access z.B. muss da der Datenbankname rein



  • Nein, das sollte eigentlich so funktionieren. Versuch mal, ob es funktioniert, wenn Du noch ein "\" anhängst.
    Also "\\Data\".



  • Hmmm...immernoch Fehler!

    Brauch ich vielleicht nochwas ausser Query?

    Oder gibt es da noch eine andere möglichkeit, zb mit Access?

    nochmal der Code jetzt

    void __fastcall TForm1::FormShow(TObject *Sender)
    {
    AnsiString asDatadir = ExtractFilePath(Application->ExeName) + "\\Data\\";
    TQuery *Query1 = new TQuery(Application);
    Query1->DatabaseName = asDatadir;
    Query1->Close();
    Query1->SQL->Clear();
    Query1->SQL->Add("select * from alias2.db");
    Query1->ExecSQL();
    delete Query1;
    

    wieder Ungültiger Dateiname



  • Normalerweise benötigst Du noch ein TDataSource zu einem TQuery.

    Was passiert, wenn Du den Tabellennamen in Anführungszeichen setzt?
    Der 'Datenbankname' sollte als erstes gesetzt werden.
    In welcher Zeile tritt der Fehler auf?



  • Fehler tritt nach Query1->ExecSQL auf!

    Hab TDataSource noch gemacht, bringt nix!

    Joe_M. schrieb:

    Der 'Datenbankname' sollte als erstes gesetzt werden.

    kannst mir das kurz erklären? steh auf schlauch!



  • schliesst du die datenbank mit

    Query1->Close();

    nicht wieder?

    [edit] kenne mich wie gesagt nicht so gut aus, sieht aber auf den ersten blick so aus[/Edit]



  • Zum einen muss es heißen: ->Open() anstatt ->ExecSQL (dieses ist nur für Anweisungen ohne Ergebnismenge) und zum anderen, hätte ein kurzer Blick auf die Pfadvariable im Debugger gereicht, um festzustellen, dass + "\\Data\" zu einem falschen Pfad führt: "Programmpfad\\\Data\" nämlich. Ändere "\\Data\" in "Data\" und freu Dich.



  • Ja funktioniert, danke!

    Funktioniert das auch ähnlich mit Access Datenbanken?
    Weil da hab ich noch nix gefunden!



  • Eine frage hab ich noch, wie müsste das Beispiel aussehen, wenn ich ADO-Komponente verwende??

    Hab noch nie damit gearbeitet!

    void __fastcall TForm1::FormShow(TObject *Sender)
    {
    AnsiString asDatadir = ExtractFilePath(Application->ExeName) + "Data\\";
    TQuery *Query1 = new TQuery(Application);
    Query1->DatabaseName = asDatadir;
    Query1->Close();
    Query1->SQL->Clear();
    Query1->SQL->Add("select * from alias2.db");
    Query1->Open();
    delete Query1;
    

Log in to reply