DEFAULT bei SQL in VBA

Hallo

Ich wollte in VBA einen SQL Befehl zum erstellen einer Tabelle schreiben. Der sieht wie folgt aus:

Private Sub test_Click()
Dim sqlString As String
sqlString = „CREATE TABLE test (Oppt-Nr Text( 50 ) primary key, KWInteger,Jahr` Integer)“
CurrentDb.Execute (sqlString)
End Sub

Das funktioniert auch so weit.
Wie kann ich nun bei diesem Befehl mitgeben, dass die Dezimalstellenanzeige bei ‚KW‘ und ‚Jahr‘ 0 ist und der Standartwert bei ‚KW’ ‚01‘ und ‚Jahr’ ‚2006‘ ist? Ich habe es mit DEFAULT ‚01‘ versucht, aber dabei gibt er immer einen Syntaxfehler aus.

Danke, Kinglui

Hallo,

nur ein Tipp zu einer anderen Vorgehesweise: Mittels des TableDef Objektes ist die Parametriesierung beim Tabelleanlegen etwas einfacher zu bewerkstelligen.
Einfach mal im Manual bei TableDef(s) nachschauen.

Tschau
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Irgendwie komme ich mit TableDef überhaupt nicht klar. Kann mir eventuell jemand sagen wie es für mein Beispiel aussehen würde?

Private Sub test_Click()
Dim sqlString As String
sqlString = „CREATE TABLE test (Oppt-Nr Text( 50 ) primary
key, KWInteger,Jahr` Integer)“
CurrentDb.Execute (sqlString)
End Sub

Hi,

ein kleines Beispiel bzgl. TableDefs;

=======================================
Dim db as Database
Dim tblDef as TableDef
Dim fIdx As Index

set db = CurrentDB

Set tblDef = db.CreateTableDef(„MeineTabelle“)
Set fIdx = tblDef.CreateIndex(„ID“)
fIdx.Unique = True
fIdx.Required = True

AppendDeleteField tblDef, „APPEND“, „ID“, dbLong, 8
AppendDeleteField tblDef, „APPEND“, „einLongInteger“, dbLong, 8
AppendDeleteField tblDef, „APPEND“, „einShortFloat“, dbShort, 8
AppendDeleteField tblDef, „APPEND“, „einShortText“, dbText, 8

fIdx.Fields.Append fIdx.CreateField(„ID“)
tblDef.Indexes.Append fIdx

db.TableDefs.Append tblDef

====================================================================
Sub AppendDeleteField(tdfTemp As TableDef, _
strCommand As String, strName As String, _
Optional varType, Optional varSize)

With tdfTemp

’ Erst überprüfen, ob das TableDef-Objekt
’ aktualisierbar ist. Wenn dies nicht der Fall ist
’ wird die Steuerung an die aufrufende Prozedur zurückgegeben.
If .Updatable = False Then
MsgBox "TableDef-Objekt nicht aktualisierbar! " & _
„Vorgang konnte nicht durchgeführt werden.“
Exit Sub
End If

’ Abhängig von den übergebenen Daten ein Feld
’ der Fields-Auflistung des angegebenen
’ TableDef-Objekts anfügen oder daraus löschen.
If strCommand = „APPEND“ Then
.Fields.Append .CreateField(strName, _
varType, varSize)
Else
If strCommand = „DELETE“ Then .Fields.Delete _
strName
End If

End With

End Sub

============================================================

Das sollte etwas helfen

Tschau
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Bei mir hat er irgendwie Probleme mit ‚Dim db As Database‘. Es kommt immer die Fehlermeldung:

Fehler beim kompilieren: Benutzerdefinierter Typ nicht definiert

Ich benutze Access 2000

Moin.

Vermutlich fehlt der Verweis auf DAO.

Gehe im VBA-Editor auf Extras->Verweise. Wenn dort der Verweis auf DAO fehlt, dann mache ein Häkchen bei „Microsoft DAO 3.xy Object Library.“ „xy“ steht für Versionsnummer, ich habe hier nur A97 und A2003. „OK“ nicht vergessen (passiert mir immer…)

Schöne Grüße
Leo

Vielen Dank erst einmal für die Hilfe an alle!
Jetzt funktioniert fast alles wie es soll mit einer Ausnahme.
Wie kann ich über TableDef nun einen Standartwert mitgeben. Z.B. beim Feld ‚Jahr‘ den Standartwert ‚2006‘? Und wie kann ich die Dezimalstellenanzeige auf ‚0‘ setzten?

Hier mein bisheriger VBA-Code:

Option Compare Database
Option Explicit

Sub Erstellen_Click()

Dim db As Database
Dim tblDef As TableDef
Dim fIdx As Index

Set db = CurrentDb

Set tblDef = db.CreateTableDef(„KW 01“)
Set fIdx = tblDef.CreateIndex(„ID“)
fIdx.Unique = True
fIdx.Required = True
fIdx.Primary = True

AppendDeleteField tblDef, „APPEND“, „ID“, dbText, 50
AppendDeleteField tblDef, „APPEND“, „KW“, dbInteger
AppendDeleteField tblDef, „APPEND“, „Jahr“, dbInteger

fIdx.Fields.Append fIdx.CreateField(„ID“)
tblDef.Indexes.Append fIdx

db.TableDefs.Append tblDef

End Sub

Hallo,

>>:Z.B. beim Feld ‚Jahr‘ den Standartwert ‚2006‘? Und wie kann
>>:ich die Dezimalstellenanzeige auf ‚0‘ setzten?

wieso die Dezimlstellen setzen? Integer hat von Hause aus keine Dezimalstellen.

Die Fliesskommazahlen werden in der Tabelle immer mit voller Breite gespeichert, lediglich die Darstellung wird ueber eine Formatanweisung amnipuliert.
Tschau
Peter

Und was ist mit dem Standartwert?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moin.

Ok - leider abstrakt:

Du hast einen Table-Def td, dann enthält dieses td alle Felder in td.Fields.

Also bekommst Du mit td.Fields.Count die Zahl der Felder(= Tabellenspalten).

Sei der Name des Feldes Zahl, so ist der Standardwert td.fields(„Zahl“).DefaultValue

Schlicht:
td.fields(„Zahl“).DefaultValue = 4711

Ich hoffe, dass das hilft

Schöne Grüße
Leo

Vielen Dank. Problem gelöst :smile: