Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

VBA-Fehlermeldung bei Einlesen mehrerer Werte aus Kombifeld

Begonnen von Ralf_17, Dezember 16, 2010, 11:38:06

⏪ vorheriges - nächstes ⏩

Ralf_17

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

database

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

Ralf_17

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

database

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

Ralf_17

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]

database

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!


MzKlMu

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?
Gruß Klaus

Ralf_17

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.


DF6GL

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..

database

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!


Ralf_17

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".
...

DF6GL

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

Ralf_17

@ DF6GL
punkt 2 war mir schon klar.
punkt 1 - war absichtlich alter code nochmal.

database

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...

Ralf_17

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!