Anfängerfrage zu TDBF

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

Anfängerfrage zu TDBF

Beitragvon Midykm » 31. Okt 2017, 22:12 Anfängerfrage zu TDBF

Hallo,

ich möchte mit TDbf in einem (vorerst) Kommandozeilenprogramm alle Datensätze via WriteLn ausgeben.
Mein Code:

{$MODE OBJFPC}
Program project1;
uses Dbf, db, Dbf_Common;

var
MyDbf: TDbf;
i : integer;

begin
MyDbf := TDbf.Create(nil);
try
{ benutzen Sie relative Pfade}
MyDbf.FilePath := '.\';

MyDbf.TableLevel := 7;
MyDbf.Exclusive := True;
MyDbf.TableName := 'top1465.dbf';
MyDbf.Open;

WriteLn('Datensätze: ',mydbf.ExactRecordCount);
WriteLn('ENTER drücken...');
ReadLn;
for i := 0 to MyDbf.Fields.Count - 1 do begin
WriteLn(MyDbf.Fields[i]);
end;
ReadLn;

MyDbf.Close;
finally
MyDbf.Free;
end;
end.

Das klappt aber nicht ("Can't read or write variables of this type").

Bitte Hilfe!
Midykm
 
Beiträge: 7
Registriert: 31. Okt 2017, 21:59

Beitragvon wp_xyz » 31. Okt 2017, 23:01 Re: Anfängerfrage zu TDBF

Zunächst mal: Wenn du vor den Quellcode ein [ code=laz] und anschließend ein [ /code] schreibst, dann wird der Code entsprechend der Pascal-Syntax formatiert. Damit tut man sich als jemand, der deinen Code nicht kennt, leichter, ihn zu verstehen. Das Leerzeichen nach der öffnenden Klammer aber bitte weglassen - ich muss das hier verwenden, sonst formatiert die Forumsoftware den hier eingeschlossenen Text fälschlicherweise als Code.

Zu deiner Frage: Wenn du jetzt noch schreiben würdest, in welcher Zeile der Fehler auftritt, würde man sich nochmals leichter tun. So muss man nur vermuten... Ich denke, es hapert in der Zeile

Code: Alles auswählen
WriteLn(MyDbf.Fields[i]);

denn MyDbfFields[i] ist eine Klasse, die man nicht einfach per WriteLn ausgeben kann. Du musst schon angeben, welche Eigenschaft der Klasse gemeint ist - in diesem Fall wahrscheinlich der Dateninhalt des Feldes als String. Also:

Code: Alles auswählen
WriteLn(MyDbf.Fields[i].AsString);
wp_xyz
 
Beiträge: 2643
Registriert: 8. Apr 2011, 08:01

Beitragvon compmgmt » 1. Nov 2017, 06:03 Re: Anfängerfrage zu TDBF

wp_xyz hat geschrieben:Das Leerzeichen nach der öffnenden Klammer aber bitte weglassen - ich muss das hier verwenden, sonst formatiert die Forumsoftware den hier eingeschlossenen Text fälschlicherweise als Code.
Ist zwar nicht Hauptthema des Threads, aber es geht: [code=laz][/code]
Dazu einfach [[b][/b]code=laz][/code] (Einfach irgendein Attribut irgendwo innerhalb des anzuzeigenden Attributs beginnen und sofort beenden), da die Software nur einen Durchlauf zum Formatieren macht und dadurch nur das bold, aber nicht das code-Attribut interpretiert wird.
Der Prozesseinstiegspunkt "SignaturLaden" in Signatur.dll konnte nicht gefunden werden.
compmgmt
 
Beiträge: 312
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon wp_xyz » 1. Nov 2017, 10:54 Re: Anfängerfrage zu TDBF

Danke. Gut zu wissen.
wp_xyz
 
Beiträge: 2643
Registriert: 8. Apr 2011, 08:01

Beitragvon Midykm » 1. Nov 2017, 19:51 Re: Anfängerfrage zu TDBF

wp_xyz hat geschrieben:Zunächst mal: Wenn du vor den Quellcode ein [ code=laz] und anschließend ein [ /code] schreibst, dann wird der Code entsprechend der Pascal-Syntax formatiert. Damit tut man sich als jemand, der deinen Code nicht kennt, leichter, ihn zu verstehen. Das Leerzeichen nach der öffnenden Klammer aber bitte weglassen - ich muss das hier verwenden, sonst formatiert die Forumsoftware den hier eingeschlossenen Text fälschlicherweise als Code.

Zu deiner Frage: Wenn du jetzt noch schreiben würdest, in welcher Zeile der Fehler auftritt, würde man sich nochmals leichter tun. So muss man nur vermuten... Ich denke, es hapert in der Zeile

Code: Alles auswählen
WriteLn(MyDbf.Fields[i]);

denn MyDbfFields[i] ist eine Klasse, die man nicht einfach per WriteLn ausgeben kann. Du musst schon angeben, welche Eigenschaft der Klasse gemeint ist - in diesem Fall wahrscheinlich der Dateninhalt des Feldes als String. Also:

Code: Alles auswählen
WriteLn(MyDbf.Fields[i].AsString);


Danke - genau das war's!
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

cron
porpoises-institution
accuracy-worried