Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi AutoInc nicht mit "1" beginnen (https://www.delphipraxis.net/57207-autoinc-nicht-mit-1-beginnen.html)

Angel4585 17. Nov 2005 09:09

Datenbank: Paradox • Version: 7 • Zugriff über: TTable

AutoInc nicht mit "1" beginnen
 
Hallo zusammen

Gibt es eine Möglichkeiten in ein AutoIncFeld eine Zahl reinzuschreiben, bzw. nicht mit 1 zu beginnen, sondern z.B. mit 10 oder 20 oder so?

Also ich hab probiert:
Delphi-Quellcode:
Fieldefs.Find('AutoIncFeld').DataType:=ftInteger;
FieldByName('AutoIncFeld').AsString:='12345';
Fieldefs.Find('AutoIncFeld').DataType:=ftAutoInc;
Allerdings wird mir gesagt das in dieses Feld nichts geschrieben werden kann.

Danke schonmal

mumu 17. Nov 2005 09:22

Re: AutoInc nicht mit "1" beginnen
 
erstell 19 datensätze und lösche diese anschließend wieder.

dann müsste der nächste eintrag mit 20 beginnen...

Angel4585 17. Nov 2005 09:25

Re: AutoInc nicht mit "1" beginnen
 
und wenn ich bei 10000 beginnen will?

Dann ist das doch zu umständlich, oder?

Es muss doch irgendwie anders gehen. Trotzdem Danke.

rwachtel 17. Nov 2005 09:42

Re: AutoInc nicht mit "1" beginnen
 
Verabschiede Dich von dem Gedanken, dass ein AutoInc-Wert eine sinnvolle Größe in Deiner Datensammlung repräsentiert. Solche per "Generator" erzeugten Werte (das können auch u.a. GUIDs sein) eignen sich für Verknüpfungen innerhalb der Datenbank und sollten bis auf wenige Ausnahmen nach Möglichkeit gar keine Bedeutung nach aussen haben. Kümmere Dich von Anfang an selbst um alle sinnhaltigen Werte, dann wirst Du später auch mit richtigen(TM) Datenbanksystemen keine Probleme bekommen.

noch_ein_hannes 17. Nov 2005 09:44

Re: AutoInc nicht mit "1" beginnen
 
Also bei mySQL kann kann man das beim Erstellender Tabelle angeben: (wenn es denn unbedingt sein muss!?)
Delphi-Quellcode:
CREATE TABLE `data_content` (
  `id` bigint(20) NOT NULL auto_increment,
  `strTitel` varchar(127) NOT NULL default '',
  `strContent` text NOT NULL,
  `status` enum('0','1') NOT NULL default '0',
  PRIMARY KEY (`id`)
) TYPE=MyISAM COMMENT='Meine tolle Tabelle' AUTO_INCREMENT=25 ;
                                            ^^^^^^^^^^^^^^^^^^

Angel4585 17. Nov 2005 10:02

Re: AutoInc nicht mit "1" beginnen
 
Zitat:

erstell 19 datensätze und lösche diese anschließend wieder.

dann müsste der nächste eintrag mit 20 beginnen...
SORRY SORRY SORRY

das ich das in Frage gestellt hab, hab das hier:

Delphi-Quellcode:
 while not(Table2.FieldByName('AutoIncField').AsInteger=(Table1.FieldByName('AutoIncField').AsInteger))do
      begin
      try
       Last;
       Delete;
      except end;
      Append;
      Post;
      end;
Danke für den Tip!!
:thumb:

EDIT : funzt doch nict ganz. der erste eintrag bleibt leer, werds aber hinbekommen.

mschaefer 17. Nov 2005 10:04

Re: AutoInc nicht mit "1" beginnen
 
Moin, moin,

vom Prinzip ist es eigentlich "läusig" das AutoInc-Feld für andere Zwecke, wie Kundennummer oder ähnliches zu verwenden. Da Paradox keine Generatoren hat kommt man leider manchmal auf solche Gedanken. Trotzdem ein Prinzip bleibt: Ein AutoInc-Feld ist nie beschreibar bei Paradox. Die MySQL-Variante geht auch nicht. Wahrscheinlich irgendein undokumentierte BDE-Zugriff, aber das lassen wir mal aussen vor. Ok, eine einigermaßen elegnte Krücke unter Paradoxkondition wäre folgende

SQL-Code:

SELECT (AutoIncFeld + 1000) AS MyNumber, Feld2, Feld,3 FROM MyTable
Konsequenz ist aber, dass Du TQuery nimmst und auf TTable verzichtest. Oder Du mußt mit kalkulierten Feldern in der Tablekomponente arbeiten, aber dass ist nun wahrlich nicht der Eleganz letzter Schluss.

Grüße // Martin

dfried 17. Nov 2005 10:12

Re: AutoInc nicht mit "1" beginnen
 
Es geht über Umwege über die BDE-Funktion DbiDoRestructure oder über manuelles "Patchen" des Headers der Paradox-Datei.
Beispiele und Quellcodes dazu findet man in den Google-Groups wenn man nach folgenden Stichworten sucht "Paradox autoinc min value".

Beides ist natürlich nich so toll!

Angel4585 17. Nov 2005 10:32

Re: AutoInc nicht mit "1" beginnen
 
So jetzt:
Delphi-Quellcode:
Append;
Post;
while not(Table2.FieldByName('AIF').AsInteger =(Table1.FieldByName('AIF').AsInteger))do
 begin
 try
  Last;
  Delete;
 except
  end;
 Append;
 Post;
 end;
Edit;
funzt perfekt

:hello:

mumu 17. Nov 2005 10:35

Re: AutoInc nicht mit "1" beginnen
 
lol das ist aber jetzt nicht dein ernst, dass du das so machst. also ich könnte mir keinen fall vorstellen, wo soetwas sinn macht.

führ nen weiteres integer feld ein und dann ist gut...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 Uhr.
Seite 1 von 2  1 2      

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