Announcement

Collapse
No announcement yet.

Probleme beim Zugriff auf MS-Access Datenbanken

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme beim Zugriff auf MS-Access Datenbanken

    Mit Delphi 4.0 ging folgendes problemlos:
    einen Eintrag im BDE-Administrator (nicht ODBC, also mit nativ-treiber) mit Namen "XX" anlegen und direkt auf eine (physische) MS-Access Datenbank verweisen. In der Entwicklungsumgebung konnte man dann bei der Database-Component als Alias-Namen den gewählten Namen "XX" eintragen und alles lief problemlos, d.h. man konnte die Connected-Property auf true setzen und so im weiteren auf die Daten zugreifen. Wenn ich das nun in Delphi 5.0 (auf einem anderen Rechner) versuche, so kommt lediglich "Allgemeiner SQL-Fehler. Das Microsoft Jet-Datenbankmodul kann die Datei ... nicht öffnen. Sie ist bereits von Alias ???" der Rest wird leider abgeschnitten!

    ich kann mir nicht erklären woran das liegt und bin ziemlich rat- und hilflos. An der Delphi Version? Am BDE-Administrator (die Versionsnummern des BDE-Administrator sind jedoch gleich). Gibt es schon Service-Packs für Delphi 5?

    Ich wäre über Tipps und Ratschläge wirklich erfreut...

    Danke im voraus, Matthias ([email protected])

  • #2
    Hallo,

    habe ähnliches Problem, allerdings laufen bei mir die Native-Treiber nur nicht unter WinNT4 mit SP4/5, nur dort kriege ich den allgemeinen SQL-Fehler. Unter Win98 läuft alles easy.

    Mein Hauptproblem: wie kriege ich mit den Native-MSACCESS-Treibern einen Datenpfad und den neuen Alias zur Laufzeit erstellt und die Passwort-Abfrage ausgeschaltet, alle Versuche, auch aus diverser Literatur sind bis dato gescheiter

    Comment


    • #3
      Hallo,

      wenn das Programm eine beliebige MDB-Datei aus einem beliebigen Pfad öffnen soll, ist es am einfachsten, einen temporären Alias (ohne BDE-Konfiguration) direkt über eine <b>TDatabase</b>-Instanz zu erstellen:
      <pre>
      procedure TFormMain.SBtnOpenClick(Sender: TObject);
      begin
      with OpenDialogMDB do
      if Execute then
      begin
      EditMDB.Text := FileName;
      OpenMDB(FileName);
      end;
      end;

      // private Methode für den temp. Alias über TDatabase

      procedure TFormMain.OpenMDB(sMDBName : String);
      var
      aTableList : TStringList;
      begin
      Screen.Cursor := crSQLWait;
      try
      TableACCESS.Active := False;
      DatabaseACCESS.Connected := False;
      ComboBoxTable.Items.Clear;
      ComboBoxTable.Enabled := False;
      StatBar.Panels[0].Text := '';
      StatBar.Panels[1].Text := 'MDB-Datei wird geöffnet....';
      DBGridACCESS.Visible := False;
      Application.ProcessMessages;
      with DatabaseACCESS.Params do
      begin
      Clear;
      Add('DATABASE NAME=' + sMDBName);
      Add('OPEN MODE=READ/WRITE');
      Add('LANGDRIVER=BLLT1DE0');
      Add('USER NAME=');
      Add('PASSWORD=');
      end;
      DatabaseACCESS.Connected := True;
      StatBar.Panels[1].Text := 'Tabellen aus MDB-Datei auslesen...';
      Application.ProcessMessages;
      // Tabellen aus der ACCESS-Datenbank auslesen + Combobox füllen
      aTableList := TStringList.Create;
      try
      Session.GetTableNames(DatabaseACCESS.DatabaseName, '',False, False, aTableList);
      ComboBoxTable.Items := aTableList;
      finally
      aTableList.Free;
      end;
      ComboBoxTable.Enabled := True;
      StatBar.Panels[1].Text := 'Eine Tabelle kann nun ausgewählt werden.';
      DBGridACCESS.Visible := True;
      finally
      Screen.Cursor := crDefault;
      end;
      end;
      </pre>
      Das Beispiel liest nach dem Öffnen der MDB-Datei auch alle Tabellen-Namen aus und füllt damit eine Combobox

      Comment


      • #4
        Hallo Dirk<br>
        ich habe das gleiche Problem.<br>
        Ich erhalte folgende Fehlermeldung:<br>
        <b>Allgemeiner SQL Fehler</b><br>
        <b>-2147221164</b><br>
        <b>Tabelle</b><br>
        <b>Alias: FL1</b><br>
        <br>
        FL1 ist der Databasename in meiner TDatabasekomponente<br>
        <br>
        Hast Di schon eine Lösung?<br><br>

        :-) Jens Schuma

        Comment


        • #5
          Hallo,

          um welches ACCESS-Format handelt es sich dabei (ACCESS97 oder ACCESS2000)? Borland hat den folgenden <i>Delphi Tech Alert</i> veröffentlicht:

          <i>We have heard cases of people having trouble using Access 2000 with the BDE. It should be noted that the BDE's native Access driver (and Access 97) use DAO while Access 2000 uses ADO. Attempting to open an Access 2000 table with the BDE's native driver will give an error. ODBC seems to work fine with Access 2000 so this is the recommended way to go if you're upgrading to Access 2000.</i&gt

          Comment


          • #6
            Hallo Andreas,<br>
            es handelt sich um Access 97.<br>
            <br>
            :-) Jen

            Comment


            • #7
              Hallo,

              welches Microsoft-Programm hat die Access97-Treiber (DAO) installiert? Wenn Delphi 5 installiert wird, wird MDAC 2.1 mit installiert, so das die neuen Access2000-Treiber mit auf dem Rechner sind. Auf meinen Rechnern war bereits Office97 und Delphi 4 installiert, als ich Delphi 5 zusätzlich installiert habe. Und in dieser Umgebung gibt es keine Probleme, sowohl Access97-MDB als auch Access2000-MDB-Datenbanken können problemlos geöffnet werden.

              Jetzt stellt sich die Frage, was passiert, wenn vorher noch niemals eine Office97-Anwendung auf dem Rechner war (also bei einer vollständigen Neuinstallation, bei der sofort Delphi 5 installiert wird)

              Comment


              • #8
                Hallo Andreas,<br>auf meinem NT-Rechner war noch nie ein Office 97 Programm. Das Erste was rauf kam war D2 dann D4 und jetzt D5. Ich habe die Delphi-Versionen immer vollständig installiert.<br>
                :-) Jen

                Comment


                • #9
                  Hallo Jens,

                  also scheinen die für Access97 zuständigen DAO-Treiber zu fehlen (denn diese wurden weder von Delphi 4 noch 5 installiert, die BDE setzt nur auf die DAO-Treiber auf, die allerdings vorher bereits auf dem Rechner sein müssen)

                  Comment


                  • #10
                    Hallo Andreas,<br>wo bekomme ich denn die aktuelle DAO-Version ?<br>Jetzt hat sich auf einem anderen Rechner ein zweites Problem hinzugesellt. Im BDE-Administrator ist der native MS Access Treiber nicht installiert. Kann ich den irgendwie nachinstallieren. Die IDDA3532.dll ist im BDE-Verzeichnis vorhanden. Auch eine D5 Neuinstallation hat nix gebracht.<br>:-) Jen

                    Comment


                    • #11
                      Hallo Jens,

                      ja - genau das habe ich gemeint. Die BDE installiert mit den SQL-Links nur die "Verbindungs-Stellen" zu den originalen Hersteller-Treibern - und <b>IDDA3532.DLL</b> ist nur die Verbindungs-DLL zu DAO 3.5 für das ACCESS 97-Format.

                      Dieser direkte Weg wurde mit Delphi 3 eingeführt, damit war noch DAO 3.0 (IDDAO32.DLL) aktuell - aber der "alte" Weg über die ODBC-Treiber für Microsoft Access sollte immer gehen. Falls ODBC nicht in Frage kommt, muss auf dem Rechner eine Software installiert werden, die DAO 3.5 "nebenbei" mit installiert. Da DAO 3.5 nicht frei verteilt werden darf, fehlt diese auf der Delphi-CDROM

                      Comment


                      • #12
                        Hallo Andreas,<br>die Sache mit dem nativen Treiber habe ich aufgegeben. Deshalb versuche ich mich jetzt mit der ODBC (Accesstreiber Version 3.50.342800) Lösung. Aber auch hier habe ich Probleme. Ich habe in der Systemsteuerung einen System-DSN für eine Accessdatei angelegt. Im BDE-Adminstrator erscheint der System-DSN Name als Aliase. Unter D5 kann ich die Aliasname Eigenschaft von TDatabase auf diesen Aliase setzen. Ich kann sogar TDatabase.Connected auf True setzen. Aber jetzt kommts: Wenn über den Objektinspektor in der an TDatabase "angeschlossenen" TTable den Tablename ändern (ich versuche die Combobox aufzuklappen)möchte, erhalte ich folgende Fehlermeldung:<br><b>Allgemeiner SQL-Fehler<br>[Microsoft][ODBC Microsoft Access 97]Ungültige Zeichen- oder Pufferlänge</b><br>Was soll ich da nur machen?<br>Ach ja - wenn ich einen gültigen Tabellenamen der Accessdatenbank per Hand in den Objektinspektor schreibe, kann ich die TTable Eigenschaft Active auf True setzen und alles läuft prima.<br>:-) Jens Schuman

                        Comment


                        • #13
                          Hallo,<br> hier noch ein kleiner Zusatz. Der Access ODBC-Treiber stellt die deutschen Umlaute falsch dar. Der native Access-Treiber nicht.<br>8-( Jens Schuman

                          Comment


                          • #14
                            Das Umlaute-Problem kannst Du einfach lösen:

                            Einstellungen->Systemsteuerung->BDE-Verwaltung->Konfiguration->Treiber->Microsoft Access-Treiber/Driver-> LANGDRIVER auf 'ascii' ANSI stellen.

                            Das andere Problem könnte an nicht zusammenspielenden Treiberversionen ODBC/Access/Delphi liegen.<br>
                            Meine Konfiguration ist:<br>
                            ODBC-Version 3.510.3711.0<br>
                            Access-Treiber 3.51.1713.00<br>

                            Beim Access-Treiber mußte ich schon den ODBC-Treiber von Access-2000 (V 4.00.xx) durch den ODBC-Treiber von Access-97 austauschen (3.51.xx), da es sonst Probleme mit Delphi -> ODBC -> Access gab. Dies betraf jedoch nur die Datei odbcjt32.dll

                            Comment

                            Working...
                            X