AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi fortlaufender Index in dBase Datenbank
Thema durchsuchen
Ansicht
Themen-Optionen

fortlaufender Index in dBase Datenbank

Ein Thema von LuckyStrike4life · begonnen am 9. Jan 2004 · letzter Beitrag vom 15. Jan 2004
Antwort Antwort
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#1

fortlaufender Index in dBase Datenbank

  Alt 9. Jan 2004, 11:46
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,
Thread hier zu lesen.

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:
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;
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.

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?
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Benutzerbild von Smokey
Smokey

Registriert seit: 10. Nov 2003
Ort: Puerto de la Cruz
158 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: fortlaufender Index in dBase Datenbank

  Alt 9. Jan 2004, 12:39
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

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
Greif dir ein gutes Stück Fleisch auf deinem Weg nach draussen !!!
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: fortlaufender Index in dBase Datenbank

  Alt 9. Jan 2004, 13:13
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
Frank
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: fortlaufender Index in dBase Datenbank

  Alt 12. Jan 2004, 08:00
Zitat von Sourcemaker:
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
Okay, dann werd ich mich doch mal damit beschäftigen.
Danke.
Fragen werde ich sicher noch stellen müssen.
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: fortlaufender Index in dBase Datenbank

  Alt 14. Jan 2004, 11:46
Zitat von Sourcemaker:
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
Hm.. könntest du dazu noch ein paar Worte sagen.
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.
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: fortlaufender Index in dBase Datenbank

  Alt 14. Jan 2004, 12:23
Die Funktion now gibt dir Datum und Uhrzeit in einer Zahl kombiniert zurück (wenn das deine Frage war).

Mfg.

Frank
Frank
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: fortlaufender Index in dBase Datenbank

  Alt 14. Jan 2004, 13:18
Zitat von Sourcemaker:
Die Funktion now gibt dir Datum und Uhrzeit in einer Zahl kombiniert zurück (wenn das deine Frage war).

Mfg.

Frank
Stimmt, die Funktion hab ich im gleichem Programm schon benutzt .

Aber:
MainDBtabelle.FieldByName('Index').AsInteger := now; müsste es heißen, dass geht aber nicht
Zitat:
[Fehler] DB4realpas.pas(308): Inkompatible Typen: 'Integer' und 'TDateTime'
Also versuch ichs mit AsDateTime, dann kann Delpgi zur Laufzeit nicht in das Feld schreiben, weils nummerisch ist.

Verdammt!
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: fortlaufender Index in dBase Datenbank

  Alt 14. Jan 2004, 16:39
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:
MainDBtabelle.FieldByName('Index').AsFloat := now;

MainDBtabelle.FieldByName('Index').AsInteger := trunc(now*10000);
Mfg.

Frank
Frank
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#9

Re: fortlaufender Index in dBase Datenbank

  Alt 15. Jan 2004, 08:16
Thx,
funktioniert beides. Endlich.
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz