[gelöst] dBASE-Dateien

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
wega
Beiträge: 57
Registriert: Di 6. Dez 2011, 15:36

[gelöst] dBASE-Dateien

Beitrag von wega »

Hallo zusammen,

kann mir eine/r einen Hinweis geben, wie ich in einer dBASE-Datei gezielt einen Record anspringen und dessen Inhalte ausgeben kann?

mit freundlichem Gruß
Werner
Zuletzt geändert von wega am Di 10. Jan 2012, 14:10, insgesamt 1-mal geändert.

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: dBASE-Dateien

Beitrag von Socke »

http://lmgtfy.com/?q=lazarus+dbase" onclick="window.open(this.href);return false;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

wega
Beiträge: 57
Registriert: Di 6. Dez 2011, 15:36

Re: dBASE-Dateien

Beitrag von wega »

Hallo Socke,

rechtvielen Dank für Deine aufschlußreiche Antwort.
Ich denke, jeder der hier im forum ist, hat sich ausreichend über die und mit der
Hilfe zu Lazarus beschäftigt.
Ebenso wird den suchern im Datenbankforum die Beschreibung des TDBFs bekannt sein.

Wenn man dieses Forum also um Hilfe bittet, dann erwartet man bestimmt mehr als Deine
Antwort.

Aber dennoch vielen Dank für Deine Mühe.

mit Gruß
Werner

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: dBASE-Dateien

Beitrag von mschnell »

Wie wärs dann mit einer konkreten Frage ?

Was funktioniert ? Was funktioniert nicht ? ...

-Michael

wega
Beiträge: 57
Registriert: Di 6. Dez 2011, 15:36

Re: dBASE-Dateien

Beitrag von wega »

Hallo Michael,

also das Problem ist folgendes:

Ich kann die dBASE-Datei über Lazarus anlegen und auch mit den DataControls auch auslesen.
Selbst aus einer TDBLookupListbox kann ich einen einzelnen Record auswählen und mir seine
Record-Nr. bzw ID-Nummer in einem TDBText-Feld anzeigen lassen.

Wenn aber das Ganze etwas komplexer werden soll, beginnen die Schwierigkeiten.
Mit Doppelklick innerhalb der TDBLookupListbox wird zu einer Procedur gesprungen, in der dann der
angewählte Record-Inhalt (also der Inhalt aller Felder innerhalb des Records) in dafür vorgesehene
TEdit-Felder übertragen werden soll.
Also, wie komme ich auf den angewählten Record und wie lese ich dann die Felder aus?

Ich habe "seek" probiert, komme damit nicht weiter.
MoveTo bekomme ich auch nicht hin.

Ich lege mal ein Bild der Form bei.
Bild-01.jpg
Ebenfalls der Code der Unit:

Code: Alles auswählen

unit Unit2; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, db, dbf, FileUtil, LResources, Forms, Controls, Graphics,
  Dialogs, StdCtrls, DbCtrls, ComCtrls;
 
type
 
  { TForm2 }
 
  TForm2 = class(TForm)
    Button1: TButton;
    Datasource1: TDatasource;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    Dbf1: TDbf;
    DBLookupListBox1: TDBLookupListBox;
    DBText1: TDBText;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    procedure Button1Click(Sender: TObject);
    procedure DBLookupListBox1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  Form2: TForm2; 
 
implementation
 
{ TForm2 }
 
procedure TForm2.Button1Click(Sender: TObject);
begin
  close;
end;
 
procedure TForm2.DBLookupListBox1Click(Sender: TObject);
begin
  //showmessage ('Das ist es');
  //showmessage (DBText1.DataField);           // gibt den Namen des Feldes aus
  //showmessage (DBText1.Caption);             // damit wird der Inhalt des Feldes ausgelesen
  //seek(Dbf1,StrToInt(DBText1.Caption));      <- funktioniert so nicht.
  //showmessage ((Dbf1.recNO));                <- ergibt beim kompilieren Fehlermeldung
  // kommt man zu dem Datensatzrecord, den man mit DBText1.Caption auslesen kann??
end;
 
initialization
  {$I unit2.lrs}
 
end.
mit Gruß
Werner
Zuletzt geändert von Lori am Mo 9. Jan 2012, 19:56, insgesamt 1-mal geändert.
Grund: richtigen Highlighter

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: dBASE-Dateien

Beitrag von mschnell »

Leider kann ich da nicht helfen, aber jetzt hat vielleicht jemand eine Chance.

-Michael

Benutzeravatar
theo
Beiträge: 10865
Registriert: Mo 11. Sep 2006, 19:01

Re: dBASE-Dateien

Beitrag von theo »

Ich habe da auch nicht viel Ahnung von, aber kannst du nicht durch das DataSet eiern?
Also so:
Datasource1.DataSet.Next;

Vielleicht gibt's da auch eine Funktion zum Lokalisieren.

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Re: dBASE-Dateien

Beitrag von knight »

function Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean; override;

knight

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: dBASE-Dateien

Beitrag von Christian »

Noch ein Hinweis, TDbf ist nicht wahnsinnig stabil und wird auch nicht mehr weiterentwickelt wenn du neuentwickelst setz auf mindestens sqlite.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

wega
Beiträge: 57
Registriert: Di 6. Dez 2011, 15:36

Re: dBASE-Dateien

Beitrag von wega »

Hallo Theo, hallo knight,

eure Hinweise sind goldrichtig. Bringen mich wieder ein Stück weiter.
Wenn ich meine Datenbankausgabe hinreichend genug steuern kann,
werde ich das Programm hier veröffentlichen.

mit Gruß
Werner

TErxleben
Beiträge: 18
Registriert: Mi 24. Mär 2010, 18:54

Re: dBASE-Dateien

Beitrag von TErxleben »

1)
In einer DBase-Datei kannst du eeinen Datensatz lediglich über seine physikalische Datensatznummer anspringen.

2)
Das führt in Deinem Fall zwangsläfig zu einem "durcheiern" aller vorhandenen Datensätzen (also der kompletten Datenmenge).

3)
Eine SQL-DB kannst Du fragen: "Gib mir alle Datensätze, die Kriterum x erfüllen". Anschliessend eierst Du durch erheblich weniger Datensätze. (im Idealfall liefert die DB genau einen DS).

4)
Deshalb sind DBF-Dateien heutzutage auch leicht "old-aged".

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: dBASE-Dateien

Beitrag von Christian »

Darum muste sich der Programmierer seit Delphi 1 noch nie den Kopf zerbrechen, Locate gibts schon immer.
Zu 3.das ist auch falsch man kann auch bei dbase filter setzen wonach man von der db schnittstelle nur ein paar datensätze bekommt
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

wega
Beiträge: 57
Registriert: Di 6. Dez 2011, 15:36

Re: dBASE-Dateien

Beitrag von wega »

Hallo zusammen,

es hat zwar etwas gedauert, aber mit der Hilfe des Forums hier und der englischen Seite habe ich mein Beispiel einer Datenbank zur Adressdatensammlung mit dBASE IV zusammengestellt.

Ich habe meine Vorgehensweise in einer PDF-Datei niedergeschrieben und lege auch den gezipten Code des Beispieles bei.
Freuen würde ich mich, wenn dieses Beispiel diskutiert würde und durch Verbesserungen eleganter würde.
Lazarus-und-dBASE-IV.pdf
(602.68 KiB) 166-mal heruntergeladen
Personal.zip
(4.9 MiB) 100-mal heruntergeladen
mit Gruß
Werner

Antworten