Paradoxdaten lesen UND schreiben

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
starkard
Beiträge: 87
Registriert: Mi 31. Okt 2007, 10:44

Beitrag von starkard »

So ganz langsam hab ich keine Lust mehr. :cry:

1.: Hab Lazarus mit FPC2.2.1 runtergeladen. Der neue Conpiler ist vielleicht besser, macht nach meinem Empfinden aber auch mehr Fehlermeldungen und ist somit nicht ganz kompatibel mit meinem "alten" Programm. -> zurück zu 2.0.4

2. Hab eure Ratschläge beherzigt, trozdem gings nicht. Da ich das Problem nicht erkennen konnte hab jetzt ein winziges Form zum Querytesten gemacht: 1Datasource, 1SQLQuery und 1DBGrid sonst nichts. Alles verknüpft -> Immer noch das selbe Problem.
Wenn ich den SQLQuery auf true setzen will findet er die Database nicht. Höhrt sich ja auch logisch an, wenn er damit die Tabelle meint. Jetzt (nehme ich mal an ) kommt wieder mein TDBF ins Spiel, oder?. Brauch ich zufällig noch zusätzlich eine SQLTransaction?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Hast du eine Beispiel DB die ich mir mal einbinden kann. Dann kann ich die vielleicht am besten eine exakte Antwort geben, wie es funktioniert, oder warum es nicht funktioniert.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

starkard
Beiträge: 87
Registriert: Mi 31. Okt 2007, 10:44

Beitrag von starkard »

Hallo, erstmal danke für deine Hilfsbereitschaft.

Das Problem ist bei mir allerdings nicht die DB. Die DB hab ich aus Testzwecken mit sinnlosen DS gefüllt. Es ist eine Dbase4 Datei mit unterschiedlichen Feldern. Das Problem ist vermutlich die Verknüpfung der Komponenten. Hier nochmal mein kleines Form wie beschrieben:

-1Datasource, 1SQLQuery und 1DBGrid
-Verknüpfe Datasource über 'Dataset' mit SQLQuery -> DBGrid und SQLQuery mit Datasource auf 'Datasource'
-Setze mein SQLQuery SQL Prop. auf SELECT * FROM C:\Test.dbf
-Versuche SQLQuery auf active=true zu setzen -> Fehlermeldung: "Database is not assigned"

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

starkard hat geschrieben:Das Problem ist bei mir allerdings nicht die DB. Die DB hab ich aus Testzwecken mit sinnlosen DS gefüllt. Es ist eine Dbase4 Datei mit unterschiedlichen Feldern.
Wenn es möglich ist, so hätte ich trotzdem gerne die Datei zum Versuchen, damit kann ich schon mal Probleme besser nachvollziehen.
starkard hat geschrieben: -1Datasource, 1SQLQuery und 1DBGrid
-Verknüpfe Datasource über 'Dataset' mit SQLQuery -> DBGrid und SQLQuery mit Datasource auf 'Datasource'
-Setze mein SQLQuery SQL Prop. auf SELECT * FROM C:\Test.dbf
-Versuche SQLQuery auf active=true zu setzen -> Fehlermeldung: "Database is not assigned"
schaut aus als würdest du da was mischen.

DBase ist eine Clientdatabase, keine Serverdatase. Vergiss einmal dazu alles was sich auf der SQLdb Seite befindet. Das funktioniert nur mit quasi Serverdatenbanken (auch wenn sie lokal sind).
Du kannst also nuir das verwenden was auf der Seite 'Data Access' und 'Data Controls' ist.

Um es jetzt kurz zu machen, schau dir mal
http://wiki.lazarus.freepascal.org/Lazarus_Tdbf_Tutorial/de
an. Dort wird wird es im Code erklärt, die meisten Codezeilen kann man aber auch mittels dem Objektinspektor bei Lazarus zuwiesen.

Falls du jetzt noch nicht starten kannst, so lass es mich wissen. Ich werde dann versuchen es in den LazInfos klar zu legen, das wird dann aber ein paar Tage dauern.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

starkard
Beiträge: 87
Registriert: Mi 31. Okt 2007, 10:44

Beitrag von starkard »

Lustig dass du das TDBF Tutorial erwähnst. Damit hatte ich ja angefangen.
Alles lief sauber. Tabellen erstellen, DS ändern,hinzufügen anzeigen (sogar im DBGrid).
Dann dachte ich mir: Eigentlich nicht schlecht aber ich würde gerne SQL benutzen um diese DB (was eigtl. nur eine Tabelle ist,und somit auch der Grund ist warum ich mich für DBase und Clientdatabase entschieden habe) anzusprechen. In der DBGrid z.B. wurden immer alle DS angezeigt und ich hätte gerne selber die Kontrolle über das was dort passiert .So könnte mann evtl. später auch schneller andere DBdaten in das Programm einbinden (wenns denn mal überhaupt läuft).

Heisst das ich muss auf MySQL und Co. umsteigen wenn ich SQL verwenden will? Wenn ja was würdest du mir für so eine kleine DB empfehlen? Möchte ungerne mit Kanonen auf Spatzen schiessen.

P.S: meine Tabelle ist im Anhang
Dateianhänge
Messung.zip
(653 Bytes) 65-mal heruntergeladen

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Die Frage ist, warum du bei einer einfachen Aufgabe SQL einsetzen willst ? Über Filter hast du fast die selben Möglichkeiten wie mit der 'where' Klausel. Sortierungen gehen über die Index-Dateien. Mittels der Masterfield und Mastertable kann man joins über die Tabellen erreichen.

Es spricht bei kleinen, Singleuser Projekten nichts dagegen mit TDbf zu arbeiten. Vor allen hält sich dort der Aufwand/Leistung im richtigen Rahmen.

Wenn du unbedingt mit SQL was machen mußt/willst, so kann man das über die embedded Server machen. Die unterstützung ist bei den meisten vorhanden. Ich kann aber keine Aussage machen wie gut welches System wirklich ist.

Vor allen ist zu beachten, das du immer den Server mit der Applikation vertreiben/installieren mußt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

starkard
Beiträge: 87
Registriert: Mi 31. Okt 2007, 10:44

Beitrag von starkard »

Ok danke. Ich glaub ich bleib dann mal fürs erste beim DBF. :? War trozdem mal ein schöner Ausflug in die DB-Welt. Hoffe ich hab demnächst mal ein Erfolgserlebnis, denn Lazarus is schon... toll!

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:

Beitrag von Christian »

Du kannst wenn du unbedingt willst zumindest unter Windows auch über ODBC auf DBase zugreifen, aber direkt geht das nicht.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Christian hat geschrieben:Du kannst wenn du unbedingt willst zumindest unter Windows auch über ODBC auf DBase zugreifen, aber direkt geht das nicht.
Die BDE war da schon genial, besonders wenn es so wie hier um den Zugriff mittels SQL-Statements geht. Da kannst du den Weg über ODBC maximal verschlimmern.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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:

Beitrag von Christian »

Versteh ich jetzt nicht über ODBC auf dbf zuzugreifen läuft genauso übern wrapper wie wenn man das it der bde gemacht hat. Und die bde als genial zu bezeichnen ... ich weiss nicht. Was ich damals für Probleme mit DBS hatte an die ih selbst mit tdbf nicht mehr zu denken wage. Alles über 100000 Datensätzen würd ich nie wieder versuchen mit BDE zu handeln. Wie haben auf arbeit sogar noch ne BDE laufen für Goldmine frag nicht selbst n e riesenfirma wie Frointrange haben damit Riesenprobleme.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

BDE Probleme hin und her, du hast aber damit einen Wrapper gehabt, wo du immer mit einen Subset von SQL zugreifen hast können. Das war das Geniale daran.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

starkard
Beiträge: 87
Registriert: Mi 31. Okt 2007, 10:44

Beitrag von starkard »

Da bin ich wieder (Schamloser Missbrauch des Forums!) :)

ODBC kommt dann für mich nicht in Frage, da mein Prog mal unter Linux und evtl. auch unter Windows laufen sollte.

Da ich mich von SQL verabschiedet habe bin ich gerad dabei Filter für mein DBGrid zu erstellen. Bin dabei auf mehrere Beispiele gestossen. Dort wird augenscheinlich nach belieben mit ' , " , + etc. gearbeitet.Kann leider keine Syntax dazu finden (F1, Code insight usw. geht auch nicht).

Mein Ziel: möchte mit jedem eingegebenen Zeichen in ein DBEdit mein DBGrid, was mir anfänglich alle DS anzeigt, filtern und die DS dann (wenn möglich auch sortiert) anzeigen.
BSP: "1" eingegeben -> DBGrid zeigt aufsteigend alle DS die im 1. Feld mit 1 beginnen an.


Zu den Filtern hab ich vollgendes ausprobiert:
Dbf1.Filter := 'Feld1 = ' + QuotedStr(DBEdit1.Text);
funzt auch brauche aber wahrscheinlich Operatoren.

Im Forum gabs dazu folgendes:
Filter := '(''Date'' > ''15.09.2005'') and (''Date'' < ''16.09.2005'') and (''Order'' = ''123456'');
Geht nicht. ?Da ist wieder das Syntayproblem?

Meine Tabelle besitzt 3 Indiezes in einer .mdx Datei. Wo kann ich Lazarus mitteilen diese auch zu benutzen, bzw. auch danach im DBGrid sortiert anzeigen zu lassen? ENDE

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

starkard hat geschrieben:Meine Tabelle besitzt 3 Indiezes in einer .mdx Datei. Wo kann ich Lazarus mitteilen diese auch zu benutzen, bzw. auch danach im DBGrid sortiert anzeigen zu lassen? ENDE
Fängt alles mit 'Index' an.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

starkard hat geschrieben: Zu den Filtern hab ich vollgendes ausprobiert:
Dbf1.Filter := 'Feld1 = ' + QuotedStr(DBEdit1.Text);
funzt auch brauche aber wahrscheinlich Operatoren.

Im Forum gabs dazu folgendes:
Filter := '(''Date'' > ''15.09.2005'') and (''Date'' < ''16.09.2005'') and (''Order'' = ''123456'');
Geht nicht. ?Da ist wieder das Syntayproblem?
Es wird erstens das Date und Order im Hochkomma stören und die Parameter würde ich immer mit QuotedString Umsetzen. Date als Spaltenname ist keine gute Idee. Alles an Namen vermeiden, was eventuell als Token verwendet werden könnte.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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:

Beitrag von Christian »

ODBC kommt dann für mich nicht in Frage, da mein Prog mal unter Linux und evtl. auch unter Windows laufen sollte.
Und ? odbc ist in deinem Fall sicher mit kanonen auf Spatzen geschossen zumal hintenrum wieder nur dbf dranhängt. Hat aber nichts damit zu tun das es ODBC Implementationen für Linux, Windows und MacOS gibt.
BDE Probleme hin und her, du hast aber damit einen Wrapper gehabt, wo du immer mit einen Subset von SQL zugreifen hast können. Das war das Geniale daran.
Und wo ist jetzt der Unterscheid zu ODBC ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten