![]() |
Datenbank: dBase • Zugriff über: Topaz
dBase-Datenbanken mit Topaz-Erweiterung
Hallo Allerseits,
hat jemand hier im Forum Erfahrung mit der Erweiterung "Topaz" für das Arbeiten mit Delphi und dBase-Datenbankdateien? Wenn ja, hätte ich da ein paar Fragen. Ich verwende Delphi 5 und Topaz 5. |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Ein Thread reicht ;)
|
Re: dBase-Datenbanken mit Topaz-Erweiterung
Ist korrigiert. Ich nehme diese beiden Beiträge später dann auch weg, weil sich da ja erledigt hat. ;-)
|
Re: dBase-Datenbanken mit Topaz-Erweiterung
Hallo,
Zitat:
was sich nicht durch die Dokumentation und die Bsp-e lösen läßt ? Heiko |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
ich möchte einen vorhandenen Quellcode dynamisieren. Bisher ist das Ganze statisch aufgebaut. Also fest über die Komponenten, Objektinspektor etc. im Quellcode verankert. Ich möchte das Ganze aber vollständig über eine ini-Datei steuern. In dieser ini-Datei stehen dann z.B. Datenbankname, die Spaltenüberschriften usw. Der Ablauf ist dann in etwa so: 1.) ini-Datei einlesen, 2.) Gibt es schon eine dBase-Datenbank mit den Feldern aus der ini-Datei? 2.1) Nein: Datenbank erzeugen, 2.2) Ja: Vorhandene Datenbank einlesen, 3.) Eingelsene Daten verarbeiten. Punkt 1-3 habe ich schon erledeigt. Das Erzeugen einer Datenbank ist auf der Topaz-Seite ganz gut beschrieben und funktioniert: ![]()
Delphi-Quellcode:
Probleme bereiten mir die Punkte 2.2) und 3.)
procedure TForm1.Button1Click(Sender: TObject);
VAR dbf: TTzDbf; begin dbf := TTzDbf.Create(Application); { create an instance of TTzDbf } try dbf.DbfFields.Clear; { clear the list of fields } dbf.DbfFields.Add('name,C,30,0'); { add desired fields } dbf.DbfFields.Add('age,N,3,0'); dbf.DbfFields.Add('amount,N,10,2'); dbf.DbfFilename := 'c:\junk.dbf'; {specify the database name} dbf.Active := TRUE; { set active to true } dbf.Active := FALSE; { we are done creating the database } finally dbf.Free; { do not forget to free the instance } end; end; Hier würde mir etwas Beispiel-Code weiterhelfen. Ich habe dazu im Netz keine Beispiele gefunden. |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Hallo,
du wirfst DataBase und Tabelle in einen Topf. Was du erzeugst, ist keine Datenbank. sondern eine Tabelle. Bei DBase ist die Datenbank einfach das Verzeichnis, wo die Tabellen drinstehen. Eine Tabelle wird über TzDbf "verwaltet". Im Code also
Delphi-Quellcode:
Wichtig ist TzDbf.DbfFileName. Dort steht der Name der DBF-Datei (=Tabelle) incl. Pfad.
var
MyDBF: TzDbf; begin MyDBF:= TzDbf.Create(NIL); try finally MyDBF.Free; end; end; Per TzDbf.Open bzw. TzDbf.Active:= True wird die Tabelle geöffnet. Dann sollte es noch First, Last, Next, Prior, Eof usw. geben. Da es als BDE-Ersatz gedacht ist, sollte die Verwendung der Befehle kein Problem sein. Heiko |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Hallo,
hmm, so ganz verstehe ich das noch nicht. Ich habe folgendes ausprobiert:
Delphi-Quellcode:
Der Compiler meldet keinen Fehler.
{...}
{ Private-Deklarationen } DB: TTzVFile; {...} {...} DB:=TTzVFile.Create(Application); DB.DbfFilename := ExtractFilePath(ParamStr(0))+'test.dbf'; {specify the database name} DB.Open; DB.Append; DB.FieldByName('Test1').AsString := '20.05.2010 15:31:34'; DB.FieldByName('Test2').AsFloat := 40318.6469213; DB.FieldByName('Test3').AsFloat := 123.626; {...} Wenn ich das Programm aber laufen lasse, erhalte ich folgende Fehlermeldungen (Fehler tritt in der Zeile mit dem DB.Open auf): "FieldList.Count ist <=0 beim Versuch, eine Datenbank zu erzeugen" Und nach Bestätigung des OK-Buttons: "Im Projekt PdBase.exe ist eine Exception der Klasse Exception aufgetreten. Meldung: 'Dataset error: 1401'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen." Was mache ich falsch? |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Ich habe kein Topaz, aber bei anderen Komponenten verwende ich
nicht DB.open; sondern DB.Active := TRUE; Bis alles läuft würde ich auch den Pfad erst fest im Programm angeben. Auch schadet es nicht zum Test vor dem DB.open eine ShowMessage auszugeben und Vorn und Hinten mit X und Z zu begrenzen. Gruß Alfred |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Hallo,
gibt es denn hier wirklich keinen Fachmann der sich damit auskennt und hier helfen kann, bzw. ein erstes Grundgerüst posten kann, auf welches man aufbauen kann? Brauche hier wirklich Hilfe. Komme nicht weiter. |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Hallo,
Delphi-Quellcode:
Bei mir in #6 heisst das aber anders ...
DB: TTzVFile
wie komst du jetzt auf TTzVFile ??? Zitat:
Glaube ich nicht, dass es noch was was gibt. Heiko |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
Da dieser fehlerfrei funktioniert, gehe ich mal davon aus, dass das so richtig ist. Ich habe diesen daher so übernommen. Der Compiler meckert diesen Typen auch nicht an. Zitat:
Es geht vielmehr um den Umgang mit dBase-Dateien von Delphi aus. Wenn Du mir dafür einen Beispiel-Quellcode mit den grundsätzlichen Zugriffen wie Öffnen, Editieren, Schreiben posten kannst, dann hilft mir das schon weiter. |
Re: dBase-Datenbanken mit Topaz-Erweiterung
dBase ist schon längst veraltet. Wenn du dein Programm schon umbaust, nimm lieber ein aktuelles DBMS. Hierfür findest du auch fachleute, die dir dann helfen können.
|
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
Nur: - das Programm läuft in einer Umgebung zusammen mit anderen Programmen, die ebenfalls auf diese dBase-Datei zugreifen. - so antiquiert dBase-Dateien auch sein mögen; sie lassen sich (fast) mit einem einfachen Doppelklick in Excel laden. Das sind die Gründe. |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Hallo,
Zitat:
hatte ch auch ein paar Bsp.-e drin gehabt. Heiko |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
öffnen und auch noch zurückschreiben könnte... Solche Anforderungen löst man mit entsprechenden Exportfunktionen. Eine Routine zu schreiben die den Inhalt eines beliebigen Querys/Datasets in eine CSV Datei ausgibt (kann von Excel genauso einfach geöffnet werden) ist ein triviales Unterfangen. Die Nachteile von DBFs sind dagegen enorm. Alles hat/hatte seine Zeit. Die von DBF ist vorbei. |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Wenn Du Hilfe möchtest, dann sage doch bitte was passiert,
wenn Du in der IDE DB.active := True setzt. Zuerst solltest Du einfach ein Formular mit Dataset, Datasource und Datagrid anlegen. Besorge Dir einen Hexeditor und prüfe was im ersten Byte steht, da dbf nicht gleich dbf ist. Gruß Alfred |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
Der Compiler meldet keinen Fehler. Wenn ich das Programm aber laufen lasse, erhalte ich dieselben Fehlermeldungen (Fehler tritt nun in der Zeile mit dem DB.active auf): "FieldList.Count ist <=0 beim Versuch, eine Datenbank zu erzeugen" Und nach Bestätigung des OK-Buttons: "Im Projekt PdBase.exe ist eine Exception der Klasse Exception aufgetreten. Meldung: 'Dataset error: 1401'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen." Zitat:
Zitat:
|
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
Ist das korrekt? Edit: ![]() |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Kleine Anmerkung: Euch ist klar, dass das die ersten 8 Bytes sind? :wink:
|
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
|
Re: dBase-Datenbanken mit Topaz-Erweiterung
Liste der Anhänge anzeigen (Anzahl: 1)
Mein C++ Programmierbuch sagt zu 03 im ersten Byte
Zitat:
- VisualFoxpro(30) ist es nicht. - xBase hat jedoch auch 03. Zitat:
dann haben wir zum Testen eine gemeinsame Basis. Es geht zunächst erst einmal nur darum, dass die Datei geöffnet und angezeigt werden kann. Später kommt dann alles in den Code. Gruß Alfred |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
Gruß Alfred |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
|
Re: dBase-Datenbanken mit Topaz-Erweiterung
Hallo,
ich dachte, Topaz läuft bei dir schon (allerdings nicht dynamisch) ? Falls nicht, nimm lieber TDBF, oder Access, oder Firebird oder Oracle ... ;) Heiko |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
hernehmen und sehen ob Du diese öffnen und anzeigen kannst. Gruß Alfred |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Liste der Anhänge anzeigen (Anzahl: 4)
Zitat:
Delphi-Quellcode:
Die verwendete dBase-Datei ist bei den Beispielen von Topaz dabei (Dateien "MOVIE.DBF", "MOVIE.DBT" in Archiv "dBaseDateien.zip").
unit UTest;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, tzprimds, ucommon, utzcds, utzfds, Grids, DBGrids, atzgrids; type TForm1 = class(TForm) TzDbf2: TTzDbf; DataSource1: TDataSource; TzGrid1: TTzGrid; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} end. Bildschirmfoto des Formulars, sowie des Objektinspektors der Komponenten sind im Anhang (Dateien "Form.jpg", "TTzDbf_Objektinspektor_Eigenschaften.jpg", "TDataSource_Objektinspektor_Eigenschaften.jpg "). Verwendete Komponenten: TDataSource (Borland Delphi), TTzDbf (Topaz), TTzGrid (Topaz) |
Re: dBase-Datenbanken mit Topaz-Erweiterung
:thumb:
Nächster Schritt: 2 Buttons auf das Formular:
Delphi-Quellcode:
TzDbf2.active := TRUE;
Delphi-Quellcode:
Im Objektinspektor Active auf FALSE setzen.
TzDbf2.active := FALSE;
|
Re: dBase-Datenbanken mit Topaz-Erweiterung
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Delphi-Quellcode:
unit UTest;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, tzprimds, ucommon, utzcds, utzfds, Grids, DBGrids, atzgrids, StdCtrls; type TForm1 = class(TForm) TzDbf2: TTzDbf; DataSource1: TDataSource; TzGrid1: TTzGrid; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin TzDbf2.active := TRUE; end; procedure TForm1.Button2Click(Sender: TObject); begin TzDbf2.active := FALSE; end; end. |
Re: dBase-Datenbanken mit Topaz-Erweiterung
:thumb:
Nächster Schritt: den Tabellennamen im Objektinspector löschen und im Activ-Button vor dem Active folgendes eingeben:
Delphi-Quellcode:
Damit bist Du in der Lage eine beliebige Datei zu öffnen und zu schliessen.
TzDbf2.TableName := 'Pfad\DateiName.dbf';
|
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
Zitat:
Ich habe daher stattdessen folgende Eigenschaft verwendet:
Delphi-Quellcode:
Ist das identisch, oder verwechsle ich hier wieder Datei und Tabelle?
TzDbf2.DbfFileName := 'Pfad\DateiName.dbf';
Zitat:
Zitat:
Delphi-Quellcode:
Das ist der leicht veränderte Beispiel-Quellcode von der Topaz-Web-Seite
unit Ubaue_dBaseDB;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, tzprimds, ucommon, utzcds, utzfds, utzmds; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private-Deklarationen } dbf: TTzVFile; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin dbf := TTzVFile.Create(Application); { create an instance of TTzDbf } try dbf.DbfFields.Clear; { clear the list of fields } dbf.DbfFields.Add('name,C,30,0'); { add desired fields } dbf.DbfFields.Add('age,N,3,0'); dbf.DbfFields.Add('amount,N,10,2'); dbf.DbfFilename := 'junk.dbf'; {specify the database name} dbf.Active := TRUE; { set active to true } dbf.WriteToDisk; dbf.Active := FALSE; { we are done creating the database } finally dbf.Free; { do not forget to free the instance } end; end; end. ![]() Hier habe ich nur den Variablentyp ausgetauscht, dann wird die dBase-Datei erstellt:
Delphi-Quellcode:
gegen
VAR dbf: TTzDbf;
Delphi-Quellcode:
{ Private-Deklarationen }
dbf: TTzVFile; |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
|
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
|
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
|
Re: dBase-Datenbanken mit Topaz-Erweiterung
Liste der Anhänge anzeigen (Anzahl: 1)
So funktioniert es mit BDE und Foxpro:
Delphi-Quellcode:
q.e.d.
procedure TForm4.BitBtn1Click(Sender: TObject);
begin table3.TableName := 'Pfad\test.dbf'; table3.TableType := ttFoxPro; table3.Active := true; table3.Append; table3.FieldByName('test1').AsString := '20.05.2010 15:31:34'; table3.FieldByName('test2').asfloat := 40318.6469213; table3.FieldByName('test3').AsFloat := 123.626; table3.Post; end; |
Re: dBase-Datenbanken mit Topaz-Erweiterung
ähm... weißt Du, was pushen ist? und auch, dass dieses hier unerwünscht ist? :warn:
Bitte editiere Deinen letzten Post, wenn dieser nicht mindestens 24 Stunden alt ist. Danke! |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
Es macht m.E. keinen Sinn, Wissensstände die sich im Laufe des Tages weiter entwickelt haben, in einem Post zusammenzufassen, vor allem wenn ich nicht weiss ob der Empfänger die Information bereits abgerufen und diese weiter ver wendet hat. Ich war zudem der Meinung, dass es in diesem Fall didaktisch sinnvoller ist den Empfänger der Information schrittweise an die Lösung seines Problems heranzuführen, damit er sich auch selbst mit dem Thema auseinandersetzt. Zitat:
Zitat:
kann. Anders ist es einfach weg. Meine Einstellung hat auch etwas mit meinem Beruf zu tun, bei dem ich es mich nervt, wenn nach ein paar Tagen die Information einfach abgeändert da steht. Ich nehme den Hinweis zur Kenntnis und werde dies beim nächsten Post berücksichtigen. |
Re: dBase-Datenbanken mit Topaz-Erweiterung
Diese Regel ist nunmal ein Teil unserer Forenregeln und hat sich bewährt.
Zitat:
Zitat:
|
Re: dBase-Datenbanken mit Topaz-Erweiterung
Zitat:
Delphi-Quellcode:
Das ist schon einmal der erste Schritt.
procedure TForm1.Button3Click(Sender: TObject);
begin //TzDbf2.TableName := 'Pfad\test.dbf'; TzDbf2.DbfFileName := 'Pfad\test.dbf'; //TzDbf2.TableType := ttFoxPro; TzDbf2.Active := true; TzDbf2.Append; TzDbf2.FieldByName('name').AsString := '20.05.2010 15:31:34'; TzDbf2.FieldByName('age').asfloat := 40318.6469213; TzDbf2.FieldByName('amount').AsFloat := 123.626; TzDbf2.Post; end; Aber noch bestehen grafische, feste Komponenten (TTzDbf, TDataSource). Diese müssen noch durch Quellcode ersetzt werden. Die Spalten der dBase-Datei sollen ja zur Laufzeit aus den Einträgen einer ini-Datei erstellt werden. Anschließend soll dann mit diesen dynamisch generierten Spalten gearbeitet werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz