Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Aktualisierungsabfrage mit Parametern per vba

Begonnen von jagger, März 17, 2019, 07:49:24

⏪ vorheriges - nächstes ⏩

jagger

Hallo,

in einem Formular "mnu_Kunden" gibt es zwei Listboxen.
"lbxKunden" und "lbxKundenDuplikat"

Ich habe eine Anfügeabfrage erstellt.
UPDATE tab_ex_kdnr SET tab_ex_kdnr.AGKDNR = [Formulare]![mnu_Kunden]![lbxKunden], tab_ex_kdnr.ID = [Formulare]![mnu_Kunden]![lbxKunden] & "-" & Nz([code]) & "-" & Nz([kdnr])
WHERE (((tab_ex_kdnr.AGKDNR) Like [Formulare]![mnu_Kunden]![lbxKundenDuplikat]));


Wenn ich die Abfrage per Klick direkt aufrufe, tut sie was sie soll.

Starte ich die Abfrage mit...


     Dim db As DAO.Database
     Dim qdf As DAO.QueryDef
     Set db = CurrentDb
     Set qdf = db.QueryDefs("qry_Duplikatezusammenführen")
     qdf.Parameters("[Formulare]![mnu_Kunden]![lbxKunden]") = "OAGKDNR"
     qdf.Parameters("[Formulare]![mnu_Kunden]![lbxKundenDuplikat]") = "DAGKDNR"
     
     qdf.Execute dbFailOnError
     
qdf.Close: Set qdf = Nothing
Set db = Nothing


...werden keine Daten geändert.   :(

Wird die Afrage überhaupt ausgeführt oder
werden die Parameter nicht korrekt übergeben?

Mit...

OAGKDNR = Forms!mnu_Kunden!lbxKunden
DAGKDNR = Forms!mnu_Kunden!lbxKundenDuplikat


...werden die richtigen Wert erzeugt.

Kann jemend helfen? Was mache ich falsch?
Mit Dank im Voraus
LG
jagger




MzKlMu

Hallo,
Du kannst die Abfrage mit verketten Formularfeldern direkt starten.
Versuche es mal so:
CurrentDb.Execute "Update tab_ex_kdnr SET AGKDNR = '" & Me.[lbxKunden] & ",ID = '" _
                 & Me.[lbxKunden] & "-" & Nz([code]) & "-" & Nz([kdnr]) & " WHERE AGKDNR = '" & Me.[lbxKundenDuplikat] & "'", dbFailOnError

ungetestet
Gruß Klaus

jagger

Hallo Klaus,

da kommt:
"Laufzeitfehler '2465'
Microsoft Access kann das in Ihrem Ausdruck angegebene Feld '|1' nicht finden"

Die Namen habe ich überprüft, die stimmen.
Auch habe ich "Me." mal durch "Forms![mnu_Kunden]!" ersetzt.
Das Ergebnis bleibt gleich.  ???

Aber, trotzdem Danke!

LG
jagger

Lachtaube

Vermutlich sind Deine Listboxen mehrspaltig und nicht auf die Felder der Abfrage abgestimmt.
Grüße von der (⌒▽⌒)

jagger

Hallo Lachtaube,

ja, sie sind mehrspaltig. Wie kann man die Anpassung vornehmen?
Die erste Spalte ist immer die "AGKDNR" und die restlichen Spalten sind in beiden Listboxen gleich.

LG
jagger

MzKlMu

Hallo,
Die 1.Spalte muss die sein die Abfrage benötigt.
Oder die gebundene Spalte entsprechend einstellen.
Gruß Klaus

jagger

@Klaus,

die erste Spalte ist in beiden Listboxen "AGKDNR", also die,
die benötigt wird.

LG
jagger

jagger

@alle,

testweise habe ich mal mit

Me!txtLbxKundenDuplikat = lbxKundenDuplikat.Column(0)
Me!txtLbxKunden = lbxKunden.Column(0)


und den entsprechenden Änderungen an der Abfrage und bei den
Parametern probiert.
Leider mit dem selben Ergebnis. Die Abfrage ändert keine Werte.
Die beiden Textfelder "txtLbxKundenDuplikat" und "txtLbxKunden"
zeigen jeweils die richtigen Werte (Kundennummern) an.  :-[

LG
jagger


MzKlMu

Hallo,
Column(0) ist wahrscheinlich das Geliche wie Ohne. Die Spalte muss vorne stehen die den Wert für die Verkettung enthält.
Lasse Dir mal den Wert der Kombis ausgeben.

MsgBox Me.[lbxKundenDuplikat]
MsgBox Me.[lbxKunden]

Vor dem CurrentDb.....
Gruß Klaus

jagger

@Klaus,

da werden genau die Kundennummern ausgegeben,
die die Abfrage verarbeiten sollte!

LG
jagger

MzKlMu

Hallo,
welcher Datentyp ist denn die Kundennummer in der Tabelle(n) ?
Gruß Klaus

jagger

Hallo Klaus,

die Kundennummer = AGKDNR  ist Datenty kurzer Text.

LG
jagger

PhilS

Zitat von: jagger am März 17, 2019, 07:49:24

[...]     
qdf.Parameters("[Formulare]![mnu_Kunden]![lbxKunden]") = "OAGKDNR"     
qdf.Parameters("[Formulare]![mnu_Kunden]![lbxKundenDuplikat]") = "DAGKDNR"
[...]     
Ist das wirklich dein exakter Code?
Wenn ja, werden die exakten Texte OAGKDNR und DAGKDNR an die Abfrageparameter übergeben, nicht die korrespondierenden Werte, die du irgendwo hast.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

MzKlMu

Hallo,
es wäre jetzt mal wichtig den Code zu sehen der verwendet wird. Ich hatte ja oben Execute vorgeschlagen.
Gruß Klaus

jagger

#14
@Klaus,

der Code steht doch schon im Eröffnungspost, aber hier noch mal:

Dim OAGKDNR As String
Dim DAGKDNR As String
OAGKDNR = Forms!mnu_Kunden!lbxKunden
DAGKDNR = Forms!mnu_Kunden!lbxKundenDuplikat

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
     
     Set db = CurrentDb
     Set qdf = db.QueryDefs("qry_Duplikatezusammenführen")
     qdf.Parameters("[Forms]![mnu_Kunden]![txtLbxKunden]") = "OAGKDNR"
     qdf.Parameters("[Forms]![mnu_Kunden]![txtLbxKundenDuplikat]") = "DAGKDNR"
     
     qdf.Execute dbFailOnError

qdf.Close: Set qdf = Nothing
Set db = Nothing


Der Code für die Abfrage:

UPDATE tab_ex_kdnr SET tab_ex_kdnr.AGKDNR = [Forms]![mnu_Kunden]![txtLbxKunden], tab_ex_kdnr.ID = [Forms]![mnu_Kunden]![txtLbxKunden] & "-" & Nz([code]) & "-" & Nz([kdnr])
WHERE (((tab_ex_kdnr.AGKDNR) Like [Forms]![mnu_Kunden]![txtLbxKundenDuplikat]));


ZitatIch hatte ja oben Execute vorgeschlagen.

Hab ich ja probiert und auch oben geschrieben:
Zitat
da kommt:
"Laufzeitfehler '2465'
Microsoft Access kann das in Ihrem Ausdruck angegebene Feld '|1' nicht finden"

Funktioniert also leider nicht.

LG
jagger