ADO 2.7 und Insert / Auto_Increment

Hallo,

ich erstelle mir eine Tabelle, darin habe ich versucht ein AUTO_INCREMENT Feld zu basteln.

Die Tabelle umfasst ca. 25 Spalten.

Erstellen der Tabelle über

 Set conn = New ADODB.Connection
 With conn
 .CursorLocation = adUseClient
 .Provider = "Microsoft.Jet.OLEDB.4.0"
 .Properties("Data Source") = filename
 .Open
 sqlstr = "CREATE TABLE Schausteller(Funktion char(255))"
 .Execute sqlstr 

danach erstelle ich gleich in einer anderen Sub die dazugehörigen Felder

Private Function FülleTabelle(c As ADODB.Connection, X As Byte) As Boolean
On Error GoTo fehler
Dim sql As String
FülleTabelle = False
 Select Case X
 Case 1 
 sql = "ALTER TABLE Schauspieler ADD COLUMN Vorname char(255)": c.Execute sql
 sql = "ALTER TABLE Schauspieler ADD COLUMN Nachname char(255)": c.Execute sql
 sql="SELECT ALTER TABLE Schausspieler ADD COLUMN ID INT NOT NULL AUTO\_INCREMENT": c.Execute sql
end select
fehler:
 exit function
end sub

Ich hab hier nicht alle Spalten aufgefuehrt.
Soweit tut die auch ihren dienst.

in der Form kann man nun einen Datensatz hinzufügen.

Diese mache ich mit

Dim sql
sql="INSERT INTO Schauspieler(Vorname,Nachname) VALUES ('" & txtvorname.txt & "',' & txtnachname.text & "')"
mdb.execute sql


    
    
    
    MDB ist hierbei die ADODB.Connection
     
    Wenn ich den Aufruf mache bekomme ich folgende Meldung, das das Feld Schauspieler.ID den Wert NULL hat.
    Wo liegt denn hier mein Fehler? Ich möchte das das Feld eine Index bekommt umso jeden Datensatz zu identifizieren. Also datensatz 1 = 1 , datensatz2 = 2 ... Datensatz n = n
    
    MFG Alex

Hallo, Alex!

sql=„SELECT ALTER TABLE Schausspieler ADD COLUMN ID
INT NOT NULL AUTO_INCREMENT“: c.Execute sql

Hast Du Dich vertippt, oder steht bei Dir wirklich ein „SELECT“ vor dem ALTER TABLE?

Soweit tut die auch ihren dienst.

Wenn Du die Datenbank unter Access öffnest, hast Du dann das, was Du willst?

Index bekommt umso jeden Datensatz zu identifizieren. Also
datensatz 1 = 1 , datensatz2 = 2 … Datensatz n = n

Dass das mit Datensatzx=x nicht immer gegeben sein muss (z. B. nach dem Löschen oder dem nicht-vollständigen Anfügen, d. h. so tun als ob, dann aber Datensatz doch nicht speichern), weißt Du, vermute ich.

Die Auto-Schlüsselfelder sollten wirklich nur für interne Zwecke herhalten. Wenn dann doch mal eine laufende Nummer benötigt wird, sollte man das selbst implementieren.

Die Syntax habe ich übrigens keiner genaueren Unterschung unterzogen oder nachvollzogen. Schau daher wirklich mal am besten unter Access, ob sich die Tabelle nach Deinen ALTER TABLE-Anweisungen so verändert hat wie gewünscht.

Gruß, Manfred

Hallo, Alex!

Hallo Manfred,

vielen Dank erst einmal für deine Antwort.

sql=„SELECT ALTER TABLE Schausspieler ADD COLUMN ID
INT NOT NULL AUTO_INCREMENT“: c.Execute sql

Hast Du Dich vertippt, oder steht bei Dir wirklich ein
„SELECT“ vor dem ALTER TABLE?

ups asche auf mein Haupt *schaem* das warn nen Tipp fehlern von mir. Natürlich faengt das Statement mit "ALTER TABLE … " an :smile:

Wenn Du die Datenbank unter Access öffnest, hast Du dann das,
was Du willst?

Also wenn ich die Datenbank unter Access öffnen will oder mit dem Visual Data Manager zeigt er mir an, Nicht erkennbares Datenbank Format. Warum weiss ich nicht.
Aber wenn ich mal was tippel und mir die tabellen und felder anzeigen lasse, dann klappt alles wunderbar und es ist auch alles da! Arbeiten kann ich auch mit der datenbank( hinzufuegen / speichern / editieren. Das klappt.
ich habe nur probleme mit dem Auto_Increment Feld. Da sollte automatisch erhöht werden und da bekomme ich ja beim INSERT INTO Schauspieler… Die Fehlermeldung das das Feld Schauspieler.ID gleich NULL ist und das nicht zulaessig ist.

Dass das mit Datensatzx=x nicht immer gegeben sein muss (z. B.
nach dem Löschen oder dem nicht-vollständigen Anfügen, d. h.
so tun als ob, dann aber Datensatz doch nicht speichern),
weißt Du, vermute ich.

Die Auto-Schlüsselfelder sollten wirklich nur für interne
Zwecke herhalten. Wenn dann doch mal eine laufende Nummer
benötigt wird, sollte man das selbst implementieren.

Bei dem Auto-Schlüsselfelde geht es mir darum. Eigentlich ist es mir egal, was da für eine Zahl steht! Es muss nur von datensatz zu datensatz immer eine andere sein.
Ich habe folgendes problem. Wenn du einen Datensatz eingibst, der schon einmal vorhanden ist,was der fall sein kann, so speichert er ihn ordnungsgemaess ab. Klickst du dann aber auf edit und aenderst die Daten dann bekommst du einer Fehlermeldung, die besagt das zuviele Spalten aktualisiert werden muessen (wahrscheinlich da ein Datagrid mit an die datenbank gebunden ist). Ich habe die nacht lange gesessen und den fehler gesucht. Nun habe ich ein Feld eingebaut was ein INT ist. Ich suche mir nun immer ne freie nummmer und weise sie dem Feld ID zu. So ist definitiv jeder Datensatz unterschiedlich und ich bin das problem umgangen. Aber das wahre ist es nicht, da jedesmal vor dem speichern die komplette datenbank ausgelesen wird :frowning:

Die Syntax habe ich übrigens keiner genaueren Unterschung
unterzogen oder nachvollzogen. Schau daher wirklich mal am
besten unter Access, ob sich die Tabelle nach Deinen ALTER
TABLE-Anweisungen so verändert hat wie gewünscht.

Ja das hat sie, denn unter VB bekomme ich alles felder so angezeigt :smile: Nur klappt es nicht beim INSERT INTO… :frowning:

Gruß, Manfred

MFG Alex