Zum Inhalt springen

Im Access (VBA) Abfrage in einer Schleife ausführen


rubber

Empfohlene Beiträge

Hallo. Habe hier etwas Quellcode für eine Prozedur, welche eine gespeicherte Abfrage (Insert_Pc oder Insert_Produkt) solange ausführen soll, bis Daten in den Variablen (Datenfeldern) sind. Es werden zwar immer mehrere Datensätze durch die Abfrage erstellt, aber immer wieder mit den Inhalten des ersten Datensatzes.

Sub Daten_in_KV()

    Dim CnLeistung As ADODB.Connection

    Dim dblDauer As Double


    Set CnLeistung = New ADODB.Connection

    Set objCmd = New ADODB.Command

    dHeute = Date

    With CnLeistung

        .CursorLocation = adUseClient

        .Provider = "Microsoft.Jet.OLEDB.4.0"

        .ConnectionString = "Reise.mdb"

        .Open

    End With

    With objCmd

    End With

    For i = 0 To 7 Step 1

        If Not Dauer(i) = "" Then

        dblDauer = CDbl(Dauer(i))

        With objCmd

            If PC(i) = True Then

            .CommandText = "Insert_PC"

            Else

            .CommandText = "Insert_Produkt"

            .Parameters.Append .CreateParameter("Produkte", adBSTR)

            .Parameters("Produkte").Value = Produkt(i)

            End If

            .CommandType = adCmdStoredProc

            .ActiveConnection = CnLeistung

            .Parameters.Append .CreateParameter("Kundennummer", adDouble)

            .Parameters("Kundennummer").Value = KundenNr

            .Parameters.Append .CreateParameter("Leistungen", adBSTR)

            .Parameters("Leistungen").Value = Leistung(i)

            .Parameters.Append .CreateParameter("Heute", adDate)

            .Parameters("Heute").Value = dHeute

            .Parameters.Append .CreateParameter("Beginn", adBSTR)

            .Parameters("Beginn").Value = Beginn(i)

            .Parameters.Append .CreateParameter("Dauer", adDouble)

            .Parameters("Dauer").Value = dblDauer

            .Parameters.Append .CreateParameter("Kontakt", adBSTR)

            .Parameters("Kontakt").Value = Kontakt

            .Parameters.Append .CreateParameter("Arten", adBSTR)

            .Parameters("Arten").Value = Art(i)

            .Parameters.Append .CreateParameter("Initialen", adBSTR)

            .Parameters("Initialen").Value = Initialen

            .Parameters.Append .CreateParameter("Bemerkung", adBSTR)

            .Parameters("Bemerkung").Value = Bemerkung(i)

            .Execute Options:=adExecuteNoRecords

            .Cancel

        End With

        End If

    Next i

    CnLeistung.Close

    Exit Sub

End Sub

Ist das nachzu vollziehen?

Wenn ja, könnt ihr mir sagen, ob ich da einen Befehl vergessen habe, oder ob das in einer Schleife nicht geht?

Danke im Vorraus.

rubber :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du hast eine With-Anweisung drinnen, die du sofort wieder beendest, aber die ist nicht das Problem, die kannst du auch einfach rausnehmen.

Ich bin mir nicht ganz sicher ob er richtig zählt. Du hast auch am Ende einen Abort-Befehl drinnen. Versuch mal mit einer MsgBox festzustellen, ob die einzelnen Variablen richtig gefühlt sind. Das hilft mir oft weiter. Da kannst du auch gleich kontrollieren, ob richtig gezählt wird.

Gruß Patrick

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also zählen tut er richtig und auch ohne die cancel funktioniert es nicht.

Die Abfragen kann ich dir ja auch nochmal zeigen:

PARAMETERS Kundennummer IEEEDouble, Leistungen Text ( 30 ), Heute DateTime, 

Beginn Text ( 5 ), Dauer IEEEDouble, Kontakt Text ( 20 ), 

Art Text ( 15 ), Initialen Text ( 10 ), Bemerkung Text ( 255 );

INSERT INTO PC ( KDN_NR, LEISTUNG, DATUM, ZEIT_START,

 ZEIT, PARTNER, ART, KUERZEL, BEMERK )

VALUES ([Kundennummer], [Leistungen], [Heute], [Beginn], [Dauer],

[Kontakt], [Art], [Initialen], [Bemerkung]);
PARAMETERS Kundennummer IEEEDouble, Leistungen Text ( 30 ),

 Produkte Text ( 255 ), Heute DateTime, Beginn Text ( 5 ),

 Dauer IEEEDouble, Kontakt Text ( 20 ), Art Text ( 15 ), 

Initialen Text ( 10 ), Bemerkung Text ( 255 );

INSERT INTO Produkt ( KDN_NR, LEISTUNG, PRODUKT, DATUM, 

ZEIT_START, ZEIT, PARTNER, ART, KUERZEL, BEMERK )

VALUES ([Kundennummer], [Leistungen], [Produkte], [Heute], [Beginn],

[Dauer], [Kontakt], [Art], [Initialen], [Bemerkung]); 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

meinst ein .refresh funktinoiert bei mir auch hab ne access tabelle mit 5 tabellen und lauter 1:n beziehungen soll dazu jetzt ein VB programm machen aber entweder es kommt immer nur 1 Datensatz und wenn der 2 Datensatz kommt dann nimmts mir immer die werte aus dem ersten Datensatz mit also 1 tabelle richtig die anderen 4 tabellen immer nur 1. datensatz suspekt.......

wenn ich mit ADO arbeite funktionierts gar nicht mit data environment weiß ich ned wie ich auf denn 2. datensatz komme mein data grid will auch ned so wie ich und dann soll ich noch 10000000000 anderere sachen da drin verwalten hinzufügen, data report über ne suchabfrage usw..........

allmächt entweder bin ich in der schule bei VB immer krank gewesen oder ich hab 0 peil

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...