Einsteiger: MS Access DB-Zugriff

Für Fragen von Einsteigern und Programmieranfängern...
lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Einsteiger: MS Access DB-Zugriff

Beitrag von lucster »

Hi Leute,

ich möchte gern eine Applikation (Lazarus) schreiben, die auf eine Access DB zugreift und Daten manipulieren können sollte. Ich habe ein bisschen die Suche beansprucht aber nur alte Beiträge zum Thema gefuden. Dabei bin ich auf ODBC aus der sqldb.lib gestoßen, was aber scheinbar nicht so der Bringer sein soll.
Ich habe in Richting DB-Zugriff noch kein Projekt gemacht. Meine Fragen sind daher, um mich in das Thema einarbeiten zu können:

Welche Komponente ist für mein Vorhaben zu empfehlen?
Gibt es für diese Komponente bzw. generell zum Thema Referenzen/Tutorials (werde nat. auch selber danach suchen, wenn ich weiss, welche Kompo ich benutzen kann/sollte)?

Leider habe ich noch keine genaue Aufgabenspezifizierung erhalten, sodass ich nciht sagen kann, ob die Datenbank lokal oder auf einem Server liegen soll. Obwohl eine gute Zugriffskomponente beide Fälle abdecken wird, denke ich.

Grüße lucster

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Einsteiger: MS Access DB-Zugriff

Beitrag von Christian »

An Access Datenbanken kommst du über Lazarus nur per ODBC ran. An so ziemlich jedes ordentliche Datenbanksystem direkt.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Einsteiger: MS Access DB-Zugriff

Beitrag von monta »

Nimm das Package SQLDB mit TODBCConnection.
Johannes

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Einsteiger: MS Access DB-Zugriff

Beitrag von KOBOLD Messring GmbH »

Ich bin zuerst auch daran verzweifelt, aber jetzt funktioniert meine Anwendung sehr stabil mit den Lazarus-eigenen SQLdb-Komponenten:
Hier nochmal meine Stolpersteine, die mich am Anfang zur Weisglut brachten:
1) ODBC-Connection nur EINMAL am Programmbeginn (z.B. FormCreate) öffnen (Connected := TRUE setzen)
und am Programmende (z.B. FormDestroy) Connected := FALSE setzen.
(Wenn man die während des Programmablaufs auf FALSE setzt, bleibt ein sog. ODBC-Environment - was immer das ist - mit der gleichen PID des Programms bestehen, und ein Erneutes Connected := TRUE verursacht Absturz)
2) In SQL-Befehlen mit TSQLQuery bei Strings NUR einfache Anführungszeichen verwenden, doppelte Anführungszeichen verträgt der ODBC-Treiber nicht.
3) BLOBS und Memos habe ich nicht hinbekommen (Not yet implemented). Habe statt BLOBs also Dateien in ein Verzeichnis geschrieben, und nur den Dateinamen in der Access-DB vermerkt.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Einsteiger: MS Access DB-Zugriff

Beitrag von mse »

KOBOLD Messring GmbH hat geschrieben:3) BLOBS und Memos habe ich nicht hinbekommen (Not yet implemented). Habe statt BLOBs also Dateien in ein Verzeichnis geschrieben, und nur den Dateinamen in der Access-DB vermerkt.

Die MSEgui Version von TODBCConnection unterstützt BLOBS.

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Einsteiger: MS Access DB-Zugriff

Beitrag von KOBOLD Messring GmbH »

Ich bin zwar nach wie vor der Meinung, dass die Lazarus DB-Komponenten besser sind als ihr Ruf, aber die MSEide DB-Komponenten sind WIRKLICH ausgereift, alle Achtung und Hut ab, lieber Martin.
(Aber - leider - war mein Verzweiflungsgrad bei den ersten Schritten mit der MSEide/MSEGui noch grösser als bei den Lazarus-DB-Komponenten... :cry: , deshalb hatte ich bislang Lazarus-DB genommen).
Aber jetzt schau ich mir mal die MSEIde/MSEGui in der 2.0RC1 Version an...

lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Einsteiger: MS Access DB-Zugriff

Beitrag von lucster »

Okay,

vielen Danke erst einmal für die Antworten. Nach einer Woche Urlaub werd ich mich jetzt damit beschäftigen :)

lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Einsteiger: MS Access DB-Zugriff

Beitrag von lucster »

KOBOLD wäre es möglich. das du mir ein bisschen Beispielcode zukommen lässt?
Speziell was Parametersetzen (Datenbakinformationen/Treiber...) anbelangt. Wenn ich im OnCreate der Form Connected:=true setze, dann bekomme ich eine Access-Violation :( liegt sicher daran das ich die Parameter noch nicht gesetzt habe. Wo liegt denn z.B. der ODBC Treiber? und was ist FileDSN (Erklärungen von Wikipedia bringen mir leider nix im Entwicklungskontext)? Hab mir ein Setup runtergeladen und ausgeführt, wodurch ich jetzt in der Systemssteuerung unter Verwaltung eine Verknüpfung zu Datenquellen(ODBC) besitze. War das Setup überhaupt erforderlich? mmh zu viele Fragen.
Leider konnte ich noch kein Tutorial od. ähnliches finden, was auf Lazarus/Delphi/FreePascal zugeschnitten ist.

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Re: Einsteiger: MS Access DB-Zugriff

Beitrag von EugenE »

Bei ODBC kannst du ja Benutzer-DSN, System-DSN und File-DSNs erstellen, FileDSN ist dann für die File-DSNs die du im ODBC-Datenquellen-Administrator erstellst ;)

Welche Parameter bzw. Eigenschaften hast du gesetzt bevor du Connect := true machst?

Bei Driver musst du dann für Ms Access das hier eintragen: Mircosoft Access Driver (*.mdb)

lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Einsteiger: MS Access DB-Zugriff

Beitrag von lucster »

Jetzt gibt es sogar mehrere DSN?
Hab über den ODBC Datenquellen Admministrator eine Datei-DSN erstellt. Seitdem liegt eine DSN-Datei in meinem Datenbankordner.

Also im OnCreate setze ich

Code: Alles auswählen

Driver:='Mircosoft Access Driver (*.mdb)' (muss denn hier kein Pfad zur Treiberdatei angegeben werden? weiss auch garnicht wo der liegen soll)
DatabaseName:='//Pfadname zur .mdb'
FileDSN:='//Pfadname zur .dsn'

Dann kommt Connected:=true;

Password, UserName werden von meiner DB nicht verlangt.
Fehlermeldung: "Project raised exception class 'EODBCException"
Kann gut möglich sein das die DSN nicht hinhaut bzw. der Treiber anders angegeben werden muss. Aber ich bin, wie es auch im Titel steht, absoluter Anfänger, was dieses Thema Datenbankzugriffe angeht. Habe vorher Übungsweise mal mit ORACLE gearbeitet.

Wie erstelle ich denn mit ODBC eine richtige DSN?
Beispielcode würde mir sher viel bringen, denke ich.

So sieht der Text in der DSN aus:

Code: Alles auswählen

[ODBC]
DRIVER=Microsoft Access Driver (*.mdb)
UID=admin
UserCommitSync=Yes
Threads=3
SafeTransactions=0
PageTimeout=5
MaxScanRows=8
MaxBufferSize=2048
FIL=MS Access
DriverId=25
DefaultDir=XXX\TESTDATENBANK
DBQ=XXX\TESTDATENBANK\db1.mdb


Grüße Steve

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Einsteiger: MS Access DB-Zugriff

Beitrag von monta »

Johannes

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Re: Einsteiger: MS Access DB-Zugriff

Beitrag von EugenE »

lucster hat geschrieben:Also im OnCreate setze ich

Code: Alles auswählen

Driver:='Mircosoft Access Driver (*.mdb)' (muss denn hier kein Pfad zur Treiberdatei angegeben werden? weiss auch garnicht wo der liegen soll)
DatabaseName:='//Pfadname zur .mdb'
FileDSN:='//Pfadname zur .dsn'



Entweder:

Code: Alles auswählen

Driver und bei den Properties DBQ=PFAD/ZUR/MDB setzen


ODER

Code: Alles auswählen

Pfad zur FileDSN setzen


ODER

Code: Alles auswählen

Oder DatabaseName setzen wobei das nicht "DBQ" ist sondern auch nur ein DSN , also ein name für ein Benutzer/System DSN


Versuch mal eins der beiden ersten Vorschläge, nicht alle gleichzeitig ;)

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: Einsteiger: MS Access DB-Zugriff

Beitrag von KOBOLD Messring GmbH »

muss denn hier kein Pfad zur Treiberdatei angegeben werden? weiss auch garnicht wo der liegen soll

Da muss kein Pfad rein, denn der ist in der Win-Registry registriert, das Betriebssystem weiss, wo denn nun diese DLL liegt, beim ODBC muss nur dieser Name rein.
So sieht bei mir der ODBC-Eintrag aus (odbc.png)
Wichtig: den "Treiber" (nicht den "Driver") nehmen, denn dahinter verbirgt sich der deutsche Zeichensatz.
und der Objektinspektor (oi.png)
(ich hab UTF8 genommen, ist aber nicht zwingend, kann auch westeuropäisch sein, dann viell. leerlassen)
und das setze ich bei FormCreate:

Code: Alles auswählen

ODBCConnection1.DatabaseName := 'baumodbc';
  { das ist der ODBC-Name, hier: baumodbc der in der ODBC-Verwaltung als User-DSN gesetzt wurde }
 
  { Wichtig für die Queries ist das da: }
  SQLQuery1.UsePrimaryKeyAsKey := FALSE;
  SQLQuery2.UsePrimaryKeyAsKey := FALSE;
  ODBCConnection1.Connected := TRUE; { und schon funzt es }
Dateianhänge
oi.png
oi.png (9.35 KiB) 3431 mal betrachtet
odbc.png

lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Einsteiger: MS Access DB-Zugriff

Beitrag von lucster »

siehe nächsten Beitrag :/
Zuletzt geändert von lucster am Di 10. Feb 2009, 14:04, insgesamt 1-mal geändert.

lucster
Beiträge: 30
Registriert: Mi 6. Aug 2008, 14:26
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Einsteiger: MS Access DB-Zugriff

Beitrag von lucster »

Ahhh okay, jetzt geht es. Jedenfalls kommen keine Fehler mehr. Prob war, das ich keine USER DSN, sondern eine FILE DSN erstellt habe.

Wie muss ich nun die USES Klausel erweitern, damit ich queries benutzen kann? Bisher mit "db" und "odbcconn" erweitert. Für ein Beispiel wäre ich sehr dankbar :)

Antworten