Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Indexfeld mit auto_increment in ACCESS-DB? (https://www.delphipraxis.net/31891-indexfeld-mit-auto_increment-access-db.html)

Leon de Bar 15. Okt 2004 11:54


Indexfeld mit auto_increment in ACCESS-DB?
 
Hi Leutz,

der Leon braucht schon wieder hilfe. Im Board habe ich nicht das gefunden was ich glaube zu suchen...:

ich erstelle eine mdb in access. nun will ich in einer tabelle ein feld namens ID erstellen - soweit kein problem. es soll aber automatisch den wert um eines nach oben setzen. In mySQL ist das ID int not null auto_increment..... nun bei access klappt das nicht. hat jemand eine lösung parat?

und noch eine frage damit ich nicht immer als volldepp da stehe... wie oder wo bekomme ich die DB- oder Tabellen steuerungsbefehle - wie diesen gesuchten hier - von access her?

thx Leon.

mikhal 15. Okt 2004 14:07

Re: Indexfeld mit auto_increment in ACCESS-DB?
 
Versuch's mal so:
SQL-Code:
CREATE TABLE Test(
id counter,
blabla varchar(40)
);

CREATE INDEX PK_TESTID ON Test(id) WITH PRIMARY;
Der Datentyp Counter entspricht deinem Autoincrement, die zweite SQL-Anweisung erzeugt den PrimaryKey mit Namen PK_TESTID für die Tabelle Test mit dem Feld id.

Grüße
mikhal

Leon de Bar 15. Okt 2004 15:44

Re: Indexfeld mit auto_increment in ACCESS-DB?
 
okay, danke. habe noch eine andere lösung gefunden die funktioniert (ich weiß nur nicht genau was es macht)...

CREATE TABLE ID ('ID AUTOINCREMENT(1,1), Mitliedsnummer TEXT(14);

Schätze der autoincrement wird auf 1 gesetzt und zählt immer um 1 hoch???

Ich habe aber noch ein ganz anderes Phänomen...

wenn ich meine tabellen erstelle, dann erstellt er mir nur 6 von 12 tabellen. Das system ist immer gleich... zu erst hat er mir gesponnen wenn ich INT(x) eingegeben habe (x=Anzahl der Stellen). ich habe daraufhin alles weggenommen und nun klappt es bis zur 6. tabelle... jemand ne idee?

Leon de Bar 15. Okt 2004 20:35

Re: Indexfeld mit auto_increment in ACCESS-DB?
 
der fehler ist gefunden.

was ich nur nicht verstehe ist, warum ich bei INT keine werte setzen darf? Sobald ich INT(x) setze ranzt der compiler ab...

hat jemand ne lösung oder erklärung?

thx.

mikhal 16. Okt 2004 06:26

Re: Indexfeld mit auto_increment in ACCESS-DB?
 
Zitat:

was ich nur nicht verstehe ist, warum ich bei INT keine werte setzen darf?
Access kennt eben keine Einschränkung auf die Anzahl der Stellen, die eine Integer-Variable haben darf, sondern gibt über den Integer-Typ die Größe des Wertebereichs vor. Access besitzt vier Integer-Typen:

Byte oder Integer1: entspricht einem Byte bei Delphi (-2^7 - 2^7-1)
Counter Autonumber: entspricht einem LongInteger = 32 Bit Integer, Autoincrement (1 - 2^32)
Short oder Integer2 oder Smallint: entspricht einem Integer = 16 Bit Integer (-2^15 - 2^15-1)
Long oder Int oder Integer oder Integer4: LongInteger = 32 Bit Integer (-2^31 - 2^31-1)

Grüße
Mikhal

Leon de Bar 16. Okt 2004 17:32

Re: Indexfeld mit auto_increment in ACCESS-DB?
 
@mikhal:

danke für diese information. da ich ein wenig neu in der materie bin frage ich gleich noch einmal dumm nach. kannst du mir das mal genauer erläutern was deine vier integer-aufzählungen genau bedeuten?
interessant ist für mich, in wie fern ich dieses wissen - wenn ich es dann habe - für access anwenden kann... ich meine sind das dann andere variablenbezeichnungen oder läuft alles unter INT???

wenn das zu dumm gefragt ist, dann bin ich auch über eine referenz zu diesem thema glücklich... :)

mikhal 17. Okt 2004 09:01

Re: Indexfeld mit auto_increment in ACCESS-DB?
 
Das Sind alles eigenständige Bezeichnungen, die eben für eigene Wertebereiche gelten.

Inwieweit du selbst eine Diffenrenzierung durchführst, bleibt dir überlassen, ich persönlich verwende ausschließlich den Bezeichner Integer für eine Ganzzahl und Counter für die Generierung eindeutiger Zahlen (eben das Autoincrement), die ich für Primary Keys benötige. Mich interessiert eigentlich selten, ob der Wertebereich der erfaßten Daten sich im Bereich von -128..127 (8-Bit Integer) oder -32768..32767 (16-Bit Integer) oder -2147483648..2147483647 (32-Bit Integer) oder 0..4294967295 (32-Bit Cardinal = Autoincrement = Counter) bewegt. Ich verwende einfach den größten angebotenen Wertebereich der Datenbank.

Du solltest dir in diesem Zusammenhang mal die Hilfe von Access, so du sie besitzt, zu Gemüte führen, da steht eigentlich alles drin, was du zu diesem Thema benötigst

Dein Konstrukt zur Erzeugung der Tabelle
Zitat:

CREATE TABLE ID ('ID AUTOINCREMENT(1,1), Mitliedsnummer TEXT(14);
erzeugt zwar, wie du sagst ein Datenfeld ID als Autoincrement-Feld, aber du legst damit noch nicht fest, daß dieses Datenfeld auch der Primary Key deiner Tabelle sein soll. Dazu solltest du dir CREATE INDEX Zeile anschauen, die ich bei meinem Beispiel dazugepackt habe, erst damit wird der Constraint Primary Key und der dazu gehörende Index angelegt.

Grüße
Mikhal

Leon de Bar 17. Okt 2004 10:28

Re: Indexfeld mit auto_increment in ACCESS-DB?
 
Super, danke für die Ausführungen. danke auch noch mal für den hinweis zur index. ich habe ihn wohl gelesen in deinem quellcodebeispiel aber bis dato noch völlig vergessen ;o)

Leon.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:13 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