Nochmals: TDbf

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

Nochmals: TDbf

Beitragvon Midykm » 1. Nov 2017, 21:41 Nochmals: TDbf

Hallo,

zunächst vielen Dank für den Hinweis, daß es "WriteLn(MyDbf.Fields[i].AsString)" heißen muß.
So weit, so gut...
Lasse ich das Programm laufen, kompiliert es anstandslos, gibt auch als Datensatz-Anzahl korrekt 1465 aus. Aber:
Dann krieg ich einen Exception-Klasse "EListError" ("List index out of bounds").
Debugge ich das Ganze, wirds richtig interessant.
"MyDbf.FilePath <Error: Type TDBF has no component named FILEPATH..."
usw.
Oops!
Ich erwäge, die Computerei an den Nagel zu hängen und zum guten alten Rechenschieber zurückzukehren!

Trotzdem: Danke für die Zeit und Mühe!
Midykm
 
Beiträge: 7
Registriert: 31. Okt 2017, 21:59

Beitragvon af0815 » 1. Nov 2017, 21:47 Re: Nochmals: TDbf

Schon hier mal nachgelesen: http://wiki.freepascal.org/Lazarus_Tdbf_Tutorial/de bzw. die genauere englische Version ?

BTW: Manche Sachen kann der gdb nicht auflösen. Da muss man halt kreativ sein. Siehe gdb Probleme.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3497
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon wp_xyz » 1. Nov 2017, 23:51 Re: Nochmals: TDbf

An den von Lazarus verwendeten Debugger, gdb, muss man sich erst gewöhnen. Gerade Objekte machen ihm das Leben schwer. So kann er inbesondere keine Properties direkt auswerten. Aber du kannst das objekt-interne Feld reinschreiben, auf das sich das/die Property bezieht.

Beispiel TDbf.FilePath:
Klicke im Quelltext, in dem TDbf vorkommt, auf den Bezeichnen "TDbf" mit gedrückter Ctrl-Taste. Dadurch wird der Quelltext von TDbf geöffnet, scrolle etwas nach unten bis du "property Filepath: String read FRelativePath write SetFilePath" findest. Daraus erkennst du, dass hinter der eigenschaft "Filepath" die Objektvariable "FRelativePath" steckt. Wenn du jetzt, wenn dein Programm läuft und ein Breakpoint erreicht ist, im Debugger-Auswerte- oder Watch-Fenster den Ausdruck "MyDbf.FRelativePath" eingibst, wird dir der aktuelle String angezeigt.

In vielen Fällen geht es auch einfacher, weil die Objektvariable in der Regel genauso heißt wie das/die Property und nur ein "F" vorangestellt hat.

Probleme gibt es, wenn die Eigenschaft durch eine Funktion ausgelesen wird, weil gdb keine Funktionen auswerten kann. Hier hilft es, den Quelltext kurz umzuschreiben, und den Wert in einer Variablen zwischenzuspeichern; damit kannst du sogar den Wert in einem Mouse-Over-Popup ablesen. Oder man schreibt sich, gar nicht zeitgemäß, eine WriteLn-Anweisung in den Quelltext. Achtung: Bei Windowsprogrammen muss man dafür in den Projekt-Optionen unter "Konfiguration und Ziele" das Häkchen vor "Win32-Gui-Anwendung" wegmachen; sonst gibt es einen Laufzeitfehler.

Das ist alles recht gewöhnungsbedürftig, und wenn ich zwischendurch mal wieder ein Delphi-Projekt debugge, denke ich mir: Ja, das wär's. Aber einen Vorteil hat es: Dadurch dass man gelegentlich in den Lazarus-Quelltext schauen muss, lernt man immer mehr, wie die Objekte intern funktionieren. Daher bitte nicht die Flinte ins Korn werfen.

Hier noch ein paar Links zum Debugger:
http://wiki.freepascal.org/GDB_Debugger_Tips#Properties
http://wiki.lazarus.freepascal.org/Debugger_Setup
wp_xyz
 
Beiträge: 2686
Registriert: 8. Apr 2011, 08:01

Beitragvon Midykm » 2. Nov 2017, 17:48 Re: Nochmals: TDbf

Vielen Dank für die Antworten!
Ja, das Tutorial kenne ich gut; Teile meines Codes stammen von da.
Daß der Debugger so zickig ist, wusste ich nicht - Danke für die Hinweise.
Es wird wohl mit meiner .DBF-Datei was nicht stimmen, da ich nach Ausgabe des ersten Datensatzes eine "Out Of Index-Fehler" erhalte.
Ist auch keine "generische dBase-Datei", sondern wurde mit LibreOffice (Speichern unter..) erstellt.

OK, nochmals Danke!
Midykm
 
Beiträge: 7
Registriert: 31. Okt 2017, 21:59

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried