Einsteiger: MS Access DB-Zugriff
-
- 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
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
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
-
- 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
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/
-
- 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
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.
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.
-
- 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
Die MSEgui Version von TODBCConnection unterstützt BLOBS.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.
-
- 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
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...
, deshalb hatte ich bislang Lazarus-DB genommen).
Aber jetzt schau ich mir mal die MSEIde/MSEGui in der 2.0RC1 Version an...
(Aber - leider - war mein Verzweiflungsgrad bei den ersten Schritten mit der MSEide/MSEGui noch grösser als bei den Lazarus-DB-Komponenten...

Aber jetzt schau ich mir mal die MSEIde/MSEGui in der 2.0RC1 Version an...
-
- 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
Okay,
vielen Danke erst einmal für die Antworten. Nach einer Woche Urlaub werd ich mich jetzt damit beschäftigen
vielen Danke erst einmal für die Antworten. Nach einer Woche Urlaub werd ich mich jetzt damit beschäftigen

-
- 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
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.
Speziell was Parametersetzen (Datenbakinformationen/Treiber...) anbelangt. Wenn ich im OnCreate der Form Connected:=true setze, dann bekomme ich eine Access-Violation

Leider konnte ich noch kein Tutorial od. ähnliches finden, was auf Lazarus/Delphi/FreePascal zugeschnitten ist.
-
- 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
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)

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)
-
- 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
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
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:
Grüße Steve
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'
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
-
- 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
Hilft vielleicht:
http://www.kkxie.com/com/html/3/17.html" onclick="window.open(this.href);return false;
http://www.kkxie.com/com/html/3/17.html" onclick="window.open(this.href);return false;
Johannes
-
- 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
Entweder:lucster hat geschrieben: Also im OnCreate setze ichCode: 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'
Code: Alles auswählen
Driver und bei den Properties DBQ=PFAD/ZUR/MDB setzen
Code: Alles auswählen
Pfad zur FileDSN setzen
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

-
- 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
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.muss denn hier kein Pfad zur Treiberdatei angegeben werden? weiss auch garnicht wo der liegen soll
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 }
-
- 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
siehe nächsten Beitrag :/
Zuletzt geändert von lucster am Di 10. Feb 2009, 14:04, insgesamt 1-mal geändert.
-
- 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
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
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
