Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: trebuh am Juli 19, 2015, 15:24:43

Titel: Transaktionen
Beitrag von: trebuh am Juli 19, 2015, 15:24:43
Hallo,

habe mich mal mit dem Tipp von HONDO bezüglich Fehler bei Anfüge-Abfragen beschäftigt, und dazu auch im Handbuch "Richtig einsteigen: Access 2010 VBA-Programmierung"
was dazu gelesen. Stichwort Transaktionen.

Nun habe ich mal meinen bisherigen Code:

Private Sub Befehl13_Click()
10       On Error GoTo Befehl13_Click_Error

20        DoCmd.SetWarnings False
30          DoCmd.Hourglass True
40        DoCmd.OpenQuery "ObjectAFL-Löschen", acViewNormal, acEdit
50        DoCmd.OpenQuery "CodesAFL-Löschen", acViewNormal, acEdit
60        DoCmd.OpenQuery "Object-Löschen", acViewNormal, acEdit
70        DoCmd.OpenQuery "Codes-Löschen", acViewNormal, acEdit
80        Forms![Hintergrund]![Datum_Rundholz_von] = Forms![Grundlage Export Navi]![Datum_Rundholz_von]
90        Forms![Hintergrund]![Datum_Rundholz_bis] = Forms![Grundlage Export Navi]![Datum_Rundholz_bis]
100       DoCmd.OpenQuery "Anfügen-Codes", acViewNormal, acEdit
110       DoCmd.OpenQuery "Anfügen-Codes-Rundholz", acViewNormal, acEdit
         
120       DoCmd.OpenQuery "Object anfügen", acViewNormal, acEdit
130       DoCmd.OpenQuery "Object anfügen-Rundholz", acViewNormal, acEdit
         
140         DoCmd.Hourglass False
150       MsgBox "Daten wurden an übertragen. ", 64, "Hinweis!"

170   DoEvents
180         DoCmd.Close

190      On Error GoTo 0
200      Exit Sub

Befehl13_Click_Error:

210       MsgBox "Error " & Err.Number & " in Zeile " & Erl & " (" & Err.Description & ") in procedure Befehl13_Click of VBA Dokument Form_Grundlage Export Navi"
End Sub


durch diesen ersetzt:

Private Sub Befehl13_Click()
10       On Error GoTo Befehl13_Click_Error

20          DoCmd.Hourglass True
30          BeginTrans
           
40        CurrentDb.QueryDefs("ObjectAFL-Löschen").Execute
50        CurrentDb.QueryDefs("CodesAFL-Löschen").Execute
60        CurrentDb.QueryDefs("Object-Löschen").Execute
70        CurrentDb.QueryDefs("Codes-Löschen").Execute
80        Forms![Hintergrund]![Datum_Rundholz_von] = Forms![Grundlage Export Navi]![Datum_Rundholz_von]
90        Forms![Hintergrund]![Datum_Rundholz_bis] = Forms![Grundlage Export Navi]![Datum_Rundholz_bis]
100       CurrentDb.QueryDefs("Anfügen-Codes").Execute
110       CurrentDb.QueryDefs("Anfügen-Codes-Rundholz").Execute
         
120       CurrentDb.QueryDefs("Object anfügen").Execute
130       CurrentDb.QueryDefs("Object anfügen-Rundholz").Execute
         
140         DoCmd.Hourglass False
           
150       CommitTrans
160       MsgBox"Daten wurden übertragen.", vbInformation, "Hinweis!"
           
170        DoCmd.Close acForm, "Grundlage Export Navi"

180      On Error GoTo 0
190      Exit Sub

Befehl13_Click_Error:
200       Rollback
210       MsgBox "Error " & Err.Number & " in Zeile " & Erl & " (" & Err.Description & ") in procedure Befehl13_Click of VBA Dokument Form_Grundlage Export Navi"
220     DoCmd.Hourglass False
End Sub


Nun bekomme ich aber eine Fehlermeldung in der Zeile 130:

Diese Lautet:
ZitatError 3061 in Zeile 130 (2 Parameter wurden erwartet, aber es wurden zu wenig
Parameter übergeben.) in procedure Befehl13_Click of VBA Document
Form_Grundlage Export Navi

Was kann da die Ursache sein, da der alte Code ja funktioniert hat?
Kann man irgenwie feststellen, welche Parameter da fehlen?

gruß
trebuh
Titel: Re: Transaktionen
Beitrag von: trebuh am Juli 19, 2015, 19:57:31
So wie meine Recherchen (donkarl) ergeben haben, kann es nur was mir den
Zitat80        Forms![Hintergrund]![Datum_Rundholz_von] = Forms![Grundlage Export Navi]![Datum_Rundholz_von]
90        Forms![Hintergrund]![Datum_Rundholz_bis] = Forms![Grundlage Export Navi]![Datum_Rundholz_bis]
zu tun haben.
Aber mit dem Eval Befehl komme ich auch nicht so recht klar.

In der aufzurufenden Abfrage ist im Ausdruckgenerator in einem Feld unter anderem das Kriterium:
Zwischen [Formulare]![Hintergrund]![Datum_Rundholz_von] Und [Formulare]![Hintergrund]![Datum_Rundholz_bis]
Da gibt es ja keinen Eval-Befehl.

Wie muss ich den Code mit dem Eval-Befehl ergänzen?
Titel: Re: Transaktionen
Beitrag von: MzKlMu am Juli 19, 2015, 20:10:56
Hallo,
erkläre mal was Du mit dem Code überhaupt bezweckst.
Ich habe in langen Forumsjahren die Erfahrung gemacht, dass solche Aktionen oft überflüssig oder falsch angegangen werden.
Man öffnet auch keine Aktionsabfragen, sondern führt diese aus.
CurrentDb.Execute "Anfügen-Codes", dbFailOnError
Die DoCmd.SetWarnings False/True entfallen ersatzlos. Das  dbFailOnError sorgt für eventuelle Fehlermeldungen. Warnungen werden keine ausgegeben.
Alle Abfragen die etwas machen (=Aktionsabfragen: Löschen, Anfügen, Aktualisieren) sollten so gestartet werden.
Titel: Re: Transaktionen
Beitrag von: trebuh am Juli 19, 2015, 20:51:55
Hallo Klaus,

eigentlich dachte ich, das ich den bisherigen Code:

Private Sub Befehl13_Click()
10       On Error GoTo Befehl13_Click_Error

20        DoCmd.SetWarnings False
30          DoCmd.Hourglass True
40        DoCmd.OpenQuery "ObjectAFL-Löschen", acViewNormal, acEdit
50        DoCmd.OpenQuery "CodesAFL-Löschen", acViewNormal, acEdit
60        DoCmd.OpenQuery "Object-Löschen", acViewNormal, acEdit
70        DoCmd.OpenQuery "Codes-Löschen", acViewNormal, acEdit
80        Forms![Hintergrund]![Datum_Rundholz_von] = Forms![Grundlage Export Navi]![Datum_Rundholz_von]
90        Forms![Hintergrund]![Datum_Rundholz_bis] = Forms![Grundlage Export Navi]![Datum_Rundholz_bis]
100       DoCmd.OpenQuery "Anfügen-Codes", acViewNormal, acEdit
110       DoCmd.OpenQuery "Anfügen-Codes-Rundholz", acViewNormal, acEdit
          'DoCmd.OpenQuery "Anfügen-Codes-Rundholz-arc", acViewNormal, acEdit
120       DoCmd.OpenQuery "Object anfügen", acViewNormal, acEdit
130       DoCmd.OpenQuery "Object anfügen-Rundholz", acViewNormal, acEdit
          'DoCmd.OpenQuery "Object anfügen-Rundholz-arc", acViewNormal, acEdit
140         DoCmd.Hourglass False
150         DoCmd.SetWarnings True
160       MsgBox "Daten wurden übertragen.", 64, "Hinweis!"

170         DoCmd.Close acForm, "Grundlage Export Navi"

180      On Error GoTo 0
190      Exit Sub

Befehl13_Click_Error:

200       MsgBox "Error " & Err.Number & " in Zeile " & Erl & " (" & Err.Description & ") in procedure Befehl13_Click of VBA Dokument Form_Grundlage Export Navi"
End Sub


wegen der deaktivierten Warnmeldungen, und wegen des evtl. eintreten eines Fehlers mit der Transaktion versuche.

Scheinbar gibt es laut den Handbüchern ja mehrere Varianten. Die letzte welche ich jetzt versucht habe ist folgender:

Private Sub Befehl13_Click()

      Dim ws As DAO.Workspace
      Dim db As DAO.Database

10       On Error GoTo Befehl13_Click_Error
         
20     DoCmd.Hourglass True
       
30    Set ws = DBEngine.Workspaces(0)
40    Set db = CurrentDb

50        Forms![Hintergrund]![Datum_Rundholz_von] = Forms![Grundlage Export Navi]![Datum_Rundholz_von]
60        Forms![Hintergrund]![Datum_Rundholz_bis] = Forms![Grundlage Export Navi]![Datum_Rundholz_bis]

70        ws.BeginTrans
           
80        db.Execute "ObjectAFL-Löschen", dbFailOnError
90        db.Execute "CodesAFL-Löschen", dbFailOnError
100       db.Execute "Object-Löschen", dbFailOnError
110       db.Execute "Codes-Löschen", dbFailOnError
         
120       db.Execute "Anfügen-Codes", dbFailOnError
130       db.Execute "Anfügen-Codes-Rundholz", dbFailOnError
         
140       db.Execute "Object anfügen", dbFailOnError
150       db.Execute "Object anfügen-Rundholz", dbFailOnError
         
160       ws.CommitTrans
         
170         DoCmd.Hourglass False
               
180        Call MsgBox("Daten wurden erfolgreich an die TopMaps - Datenbanken  übertragen." _
                       & vbCrLf & "" _
                       & vbCrLf & "   -  Aktive Aufträge in die Abfuhrliste" _
                       & vbCrLf & "   -  Erledigte Aufträge in die Rundholzliste" _
                       , vbInformation, "HDSoft - Hinweis!")
                       
190       DoCmd.Close acForm, "Grundlage Export Navi"

Aufraeumen:
200       ws.Close
210       Set db = Nothing
220       Set ws = Nothing
             
230      On Error GoTo 0
240      Exit Sub

Befehl13_Click_Error:
250       ws.Rollback
260       MsgBox "Error " & Err.Number & " in Zeile " & Erl & " (" & Err.Description & ") in procedure Befehl13_Click of VBA Dokument Form_Grundlage Export Navi"
270       DoCmd.Hourglass False
           
End Sub


Aber die Fehlermeldung ist immer die gleiche. Mache das ganze jetzt wieder rückgängig, da es mit dem alten Code ja problemlos funktioniert hat.

Trotzdem danke für die Hilfe
Gruß Hubert
Titel: Re: Transaktionen
Beitrag von: MzKlMu am Juli 19, 2015, 21:12:55
Hallo,
leider gehst Du nicht auf die Hintergründe des Vorhabens ein, worum ich gebeten hatte.