Hallo in die Runde,
folgendes Problem:
Alle 3 Werte od. Spalten aus einem Kombifeld sollen in eine Tabelle übernommen werden.
Code:
Private Sub Kombifeld4_AfterUpdate()
Dim IngBundesland_ID As Long, strBundesland As String, IngKennung As Long
strBundesland = Me!Kombifeld4.Column(1)
IngKennung = Me!Kombifeld4.Column(2)
IngBundesland_ID = Me!Kombifeld4
strSQL = "INSERT INTO Tab_Bundeslaender(Bundesland_ID, Bundesland, Kennung)VALUES(" & IngBundesland_ID & ",'" & strBundesland & "','" & IngKennung & "')"
DoCmd.RunSQL strSQL
End Sub
Bei Zeile Ingkennung = Me!Kombifeld4.Column(2) --> Fehlermeldung: Laufzeitfehler 13 Typen unverträglich.
Bei dem Feld vom Typ Int. handelt es sich um eine zusätzliche Angabe, welche wir als interne ID quasi als Schnittstelle für ein anderes Programm führen.
Danke für Hilfe!
D
Hallo,
zum einen eine Frage ...
... und was steht in Kombifeld4.Column(2) tatsächlich?
mit der Meldung "Laufzeitfehler 13 Typen unverträglich" verbinde ich, dass du versuchst einen Text in eine LongInteger-Variable zu quetschen
Wenn es eine ZAHL IST, könntest du versuchen ... CLng(Me!Kombifeld4.Column(2))
... und zum Anderen ...
Warum übergibst du dann aber wieder einen Text beim Insert ... '" & IngKennung & "' ?
Grüße
Peter
Hallo Peter,
in Column(2) sind rein Zahlen drin, deklariert als Int.
Mit CLng hat es leider auch nicht funktioniert.
das andere war mein Fehler, ist kopierter und angepaßter code gewesen.
Grüße, Ralf
Hallo Ralf,
was steht nach CLng(....) in der Variable IngKennung drin? Und wenn das bereits einen Fehler erzeugt - deklariere eine Variable z.B Test as Variant und lies den Inhalt vom Kombi mal da ein um zu sehen was in der Variablen dann echt drin steht.
Dass die Nummerierung der Columns bei 0 beginnt, hast du sicher beachtet?
Sonst lad mal die Herkunftstabelle des Kombifeldes + Tab_Bundeslaender + Formular mit dem Kombi in einer leeren DB hier hoch - ich würde mir das gerne mal mit Originaldaten anschauen.
Grüße
Peter
Hallo Peter,
Nummerierung paßte, die Id ist 0 usw.
Nach der Kennung ist noch ein Fremdschlüssel in der Tabelle selbst vorhanden.
Die kennung probeweise durch eine Text-Var. ersetzt und alles entsprechend abgeändert, auch Fehlermeldungen.
Ok, anbei die wichtigsten Infos (Tab.-struktur, Formular etc.) als pdf. Die DB kann ich hier nicht hochladen, da über Eigenschaften Firmennamen etc. ersichtlich ist.
Danke im voraus + VG,
Ralf
[Anhang gelöscht durch Administrator]
Hallo Ralf,
du mußt in der Tabelle und im Code den gleichen Datentyp verwenden - beim Lesen und beim Schreiben!
Ändere mal entweder in den Tabellen die Felddatentypen von Integer auf Long oder im Code von Long auf Integer.
Wenn ich das richtig interpretiere - leider ist das aus dem pdf nicht eindeutig zu erkennen, da der Cursor im Bild auf einem anderen Feld steht als auf Kennung!
Hallo,
warum sollen die gleichen Daten überhaupt in 2 Tabellen, würde es nicht genügen, nur den Primärschlüssel als Fremdschlüssel in Tabelle 2 zu speichern?
Hallo zusammen.
danke noch für die Unterstützung. Sorry, ging nicht früher hier.
@ MzKlMu
Stimmt schon und ist wohl damit auch Redundanz - zwar nicht in einer Tabelle - aber in der DB insgesamt.
Ist aber ausdrücklich so gewünscht, dass es eine Art Nachschlagetabelle gibt und eine Tabelle, in der die aktuellen Datensätze stehen.
Nur, trotz Umwandlung, es funktioniert nicht egal ob alles Long oder Ing. Er würde die ID reinschreiben, aber dann kommt die VBA-Fehlermeldung jetzt aktuell Syntaxfehler in "DoCmd.RunSQL strSQL".
Also, keine Ahnung woran es noch liegen könnte.
Hallo,
auf den zweiten Blick liegt hier der Hund begraben:
strSQL = "INSERT INTO Tab_Bundeslaender(Bundesland_ID, Bundesland,
Kennung)VALUES(" & IngBundesland_ID & ",'" & strBundesland & "','" & IngKennung &
")"
Die öffnende Klammer ist im Screenshot des Codes als Pipeline-Zeichen ("|") zu entziffern und das Hochkomma ist zuviel..
Hallo,
@DF6GL
Bei 200% Vergrößerung des Screenshots wirds dann aber doch noch als öffnende Klammer sichtbar.
Das Hochkomma ist aber in jedem Fall zu viel - wird dann auch WAHRSCHEINLICH den Syntaxfehler verursachen, wenn der SQL-String aktuell so aussieht.
@Ralf
"... egal ob alles Long oder Ing ... "
Bleib auf LONG!
hallo,
anbei nochmal der code:
--------------------------------------------------
Private Sub Kombifeld4_AfterUpdate()
Dim LongBundesland_ID As Long, strBundesland As String, LongKennung As Long
strBundesland = Me!Kombifeld4.Column(1)
LongKennung = Me!Kombifeld4.Column(2)
LongBundesland_ID = Me!Kombifeld4
strSQL = "INSERT INTO Tab_Bundeslaender(Bundesland_ID, Bundesland, Kennung)VALUES(" & LongBundesland_ID & ",'" & strBundesland & "','" & LongKennung & ")"
DoCmd.RunSQL strSQL
End Sub
------------------------------
@ database:
ich bleib auf "long".
...
Hallo,
@Ralf_17: Ja und, warum machst Du das Hochkomma nicht weg ??
Mit "bleib bei LONG" meint database nicht die Benamnsung der Variablen, eher den DATENTYP.. ;D
@database: ja da hast Du Recht... :D :D
@ DF6GL
punkt 2 war mir schon klar.
punkt 1 - war absichtlich alter code nochmal.
Hallo Ralf,
Zitatpunkt 1 - war absichtlich alter code nochmal.
Worin ich aber keinen tieferen Sinn erkennen kann.
Dieses INSERT-Statement ist ja nun nicht gerade das was man als kosmische Neuheit ansehen könnte.
Welcher Code erzeugt
AKTUELL den Syntaxfehler -
kopier doch
DIESEN mal aus deiner Applikation hier rein...
weil`s ja optisch - trotz zigfacher Vergrößerung - für euch nur schwer erkennbar war; deshalb nochmal im "alten" Zustand reingepostet.
Der Code - jetzt ohne das besagte Hochkomma - fkt. Wenn auch mit einer Einschränkung, er schreibt mir die Bundesland-ID rein, Bundesland selbst ignoriert er, sprich es bleibt leer, ebenso das nachfolgende Kennungs-Feld.
Sry, wenn ich manchmal blöde Fragen stell, aber erst nä. Jahr beleg ich einen VBA-Kurs und ohne VBA geht zwar viel aber doch nicht alles.
So oder so, dank euch für den support hier!
Hallo,
Zitat...Bundesland selbst ignoriert er, sprich es bleibt leer...
Dann stimmt mit dem Auslesen des Kombifeldes bzw. bei der Zuweisung der Werte aus dem Kombifeld etwas NICHT.
Wenn in den Variablen 'strBundesland' und 'LongKennung' nach der Zuweisung was drin steht, dann werden die Werte auch an die Tabelle übergeben!
Hi Peter,
du ich weiß es nicht. das erste Feld (die ID) schreibt Access auch rein UND es erscheint die Abfrage "Sie beabsichtigen eine Zeile anzufügen....".
.Access macht halt außer der ID-Übergabe nichts. Für Access selbst scheint es kein Fehler zu sein, da keine Fehlermeldung.
vG, Ralf
Hallo,
wir halt auch nicht...
Poste mal die Werte, die in den folgenden Eigenschaften des Kombis "Kombifeld4" stehen:
Datensatzherkunft (Wenn hier ein Abfragename steht, dann zusätzlich den SQL_String dieser Abfrage)
Gebundene Spalte
Spaltenanzahl
Spaltenbreiten
und den Code der Afterupdate-Ereignisprozedur, den Du jetzt aktuell benutzt...