![]() |
fortlaufender Index in dBase Datenbank
Morgen,
ich brauch ein fortlaufenden Index für eine dBase Datenbank. Mir ist es anscheinend nicht möglich die dBase Datenbank so einzustellen, dass eine Spalte als Indexfeld angesehen wird. Jeder eingetragener Datensatz braucht ein eindeutiges Feld, welches die Spalte eindeutig macht. Relevant ist dies beim löschen eines einzlnen Datensatzes. Der Code dafür ist soweit fertig, dank der Hilfe von vielen anderen, ![]() Ich hab jetzt zum Testen in die DB eine Spalte eingefügt, welche als integer deklariert wurde. Die Spalte nennt sich "integ", nur als Test - wie gesagt.
Delphi-Quellcode:
Leider muss ich noch per Hand das >>Indexfeld<< "integ" mit Zahlen füllen. Das kann aber später nicht mehr sein, wäre auch zu umständlich das die User sich eine Zahl ausdenken müssten, wenn sie ihren Datensatz in die DB übernehmen lassen.
q_Delete.SQL.Clear;
q_Delete.SQL.Add('DELETE FROM "t:eDienstreisebuch\mainDB.dbf" WHERE Integ=:Id'); q_Delete.ParamByName('Id').AsInteger := querysort.FieldByName('Integ').AsInteger; q_Delete.ExecSQL; MainDBtabelle.refresh; querySort.Refresh; Eine Notlösung wäre eine Zufallsrechnung, die ich auf die ButtonClickfunktion lege, des Abschickbuttons. Das kann aber auch wirklich nur ne Notlösung sein. Kann wer helfen? |
Re: fortlaufender Index in dBase Datenbank
Hat dBase keinen Datentyp "Autoinc" oder sowas?
Kann ich mir garnet vorstellen. Wenn wirklich nicht, oder du ihn nicht benutzen willst, kannst du ne funktion schreiben, die dir die nächst höhere Zahl vom neusten Datensatz zurückgibt. In der Funktion nen 'SELECT MAX(integ) FROM ....' Dann die zahl + 1 Wert zurückgeben, fertig. Musst natürlich noch den Fall abfangen, dass noch kein Datensatz drin ist :-D Aber eigentlich kenn ich keine einzige Datenbank, die nicht nen Autoincrement anbietet...schau da mal nach. Btw: Deine Notlösung ist ein Widerspruch in sich... Zufall != Eindeutig/Einmalig :shock: |
Re: fortlaufender Index in dBase Datenbank
Hi,
AutoInc unterstützt DBase nicht ! Um eine eindeutige Nummer zu erzeugen könntest du auf eine Datums/Zeitangabe in numerischer Form so wie Delphi sie benutzt (TDateTime) ausweichen. Grüße Frank |
Re: fortlaufender Index in dBase Datenbank
Zitat:
Danke. Fragen werde ich sicher noch stellen müssen. |
Re: fortlaufender Index in dBase Datenbank
Zitat:
Wie man die aktuelle Uhrzeit abgreift, geht mir nicht ganz auf. Datum ist klar, aber gibt es auch eine Komponente bzw. Funktion mit der man an die Uhrzeit kommt? Smokeys Idee ist auch gut, wenn jemand dazu etwas sagen möchte, meine Ohren bzw. Augen sind auf. |
Re: fortlaufender Index in dBase Datenbank
Die Funktion now gibt dir Datum und Uhrzeit in einer Zahl kombiniert zurück (wenn das deine Frage war).
Mfg. Frank |
Re: fortlaufender Index in dBase Datenbank
Zitat:
Aber:
Delphi-Quellcode:
müsste es heißen, dass geht aber nicht
MainDBtabelle.FieldByName('Index').AsInteger := now;
Zitat:
Verdammt! |
Re: fortlaufender Index in dBase Datenbank
TDateTime ist kompatibel zu double also könntest du statt integer-field ein float-field mit entsprechenden Nachkommastellen benutzen oder du multiplizierst die TDateTime*10000 und machst dann trunc.
Delphi-Quellcode:
Mfg.
MainDBtabelle.FieldByName('Index').AsFloat := now;
MainDBtabelle.FieldByName('Index').AsInteger := trunc(now*10000); Frank |
Re: fortlaufender Index in dBase Datenbank
Thx,
funktioniert beides. Endlich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 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