Entwickler-Ecke

Datenbanken - Keine Connection?


D. Annies - Mo 18.03.13 09:31
Titel: Keine Connection?
Hi, Delpher,

bei diesem Prg verwende ich Borland Delphi 2006. zur Laufzeit bekomme ich den Fehler:

[Microsoft][ODBC Visual FoxProDriver]file 'schuelertss.dbf does nor exist

obwohl es im Verzeichnis steht.

Code dazu:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
      aktvz := getcurrentdir;

      dn := extractfilename(opendialog1.filename);
      delete(dn, length(dn)-34);   showmessage(dn);
      DaMod1.ADOTbSchule.Connection := DaMod1.ADOConnection2;  //schuelertss
      DaMod1.ADOTbSchule.Active := false;
        DaMod1.ADOTbSchule.TableName := dn;  
        DaMod1.ADOtbschule.readonly := true;
      DaMod1.ADOTbSchule.active := true;             
      showmessage(dn + ' ist geladen von '+getcurrentdir);
      chdir(home);



Der ConnectionString ist:


Delphi-Quelltext
1:
2:
3:
4:
  DaMod1.ADOConnection2.ConnectionString :=
    'Provider=MSDASQL.1;Persist Security Info=False;User ID=an;'+
    'Data Source=schuelertss;'+
    'Initial Catalog='+aktvz;



Wo liegt da der Fehler?

Danke für Ideen,
Detlef

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt


WasWeißDennIch - Mo 18.03.13 12:41

Bist Du sicher, dass GetCurrentDir (=aktuelles Arbeitsverzeichnis) stimmt? Oder meinst Du eher das Verzeichnis, in dem sich auch die Exe befindet? Das wäre ExtractFileDir(ParamStr(0)).


Delete - Mo 18.03.13 21:52

- Nachträglich durch die Entwickler-Ecke gelöscht -


Delete - Di 19.03.13 08:37

user profile iconWasWeißDennIch hat folgendes geschrieben Zum zitierten Posting springen:
Bist Du sicher, dass GetCurrentDir (=aktuelles Arbeitsverzeichnis) stimmt? Oder meinst Du eher das Verzeichnis, in dem sich auch die Exe befindet? Das wäre ExtractFileDir(ParamStr(0)).


Da mußt du anders fragen: Bist du dir sicher, daß deine DB im aktuellen Arbeitsverzeichnis liegt? Schließlich ändert sich das aktuelle AV ständig, z.B. durch den Einsatz eines TSaveDialog oder TOpenDialaog. Wenn deine DB im selben Verzeichnis liegt wie deine EXE-Datei (bei ordnungsliebenden Programmierern ist das der Ordner BIN im Projektverzeichnis), dann verwende ExtractFilePath(ParamStr(0)).


D. Annies - Di 19.03.13 19:09

Hi, Frühlingsrolle,

leider meckert der Compiler, wenn ich in uses die unit dbf hinschreibe.

LG, Detlef


Delete - Di 19.03.13 19:43

Laut deinen eigenen Angaben lautet die Fehlermeldung:

file 'schuelertss.dbf does not exist

An diese Fehlermeldung mußt du dich auch halten, wenn du dein Problem lösen möchtst. Sie besagt nämlich, das die angegebene Datei an der angegebenen Stelle nicht existiert. Da liegt der Fehler!

Oben gibst du ein umständliches und unvollständiges Code-Beispiel:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
      aktvz := getcurrentdir; // welcher Ordnerpfad befindet sich in aktvz?

      dn := extractfilename(opendialog1.filename); // wieso hier den Dateinamen extrahieren?
      delete(dn, length(dn)-34);   showmessage(dn); // wieso hier die Datei-Endung entfernen?
      DaMod1.ADOTbSchule.Connection := DaMod1.ADOConnection2;  //schuelertss
      DaMod1.ADOTbSchule.Active := false;
        DaMod1.ADOTbSchule.TableName := dn;  // wieso hier den "verstümmelten" Dateinamen übergeben?
        DaMod1.ADOtbschule.readonly := true;
      DaMod1.ADOTbSchule.active := true;             
      showmessage(dn + ' ist geladen von '+getcurrentdir);
      chdir(home);


Aus welchem Grund übergibst du an DaMod1.ADOTbSchule.TableName nicht einfach den vollständigen Dateinamen?

Delphi-Quelltext
1:
2:
3:
      if not OpenDialog1.Execute then exit;
      dn := OpenDialog1.Filename;
      DaMod1.ADOTbSchule.TableName := dn;

Wenn du später Teile des Dateinamenes zur User-Benachrichtigung benötigst, kannst du diese Teile noch immer extrahieren:

Delphi-Quelltext
1:
     ShowMessage(ExtractFileName(dn) + ' ist geladen von ' + ExtractFilePath(dn));                    


Delete - Di 19.03.13 20:19

- Nachträglich durch die Entwickler-Ecke gelöscht -


D. Annies - Mi 20.03.13 16:00

@ Perlsau: Ich hatte wirklich geglaubt, dass ich nur einen "verstümmelten" Dateinamen übergeben darf.
Jetzt ist das Problem eigentlich fast gelöst. Ich melde mich heute abend noch einmal.

LG, Detlef


Delete - Mi 20.03.13 22:52

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
@ Perlsau: Ich hatte wirklich geglaubt, dass ich nur einen "verstümmelten" Dateinamen übergeben darf.
Jetzt ist das Problem eigentlich fast gelöst. Ich melde mich heute abend noch einmal.

Woher auch soll Delphi den Pfad zu einer Datei kennen, wenn du ihn vor der Zuweisung herausschneidest?