title image


Smiley Hhhmmm, naja, das glaube ich nun nicht wirklich
Hallo Bernd,



naja, das glaube ich nun nicht wirklich. Dazu sah Dein Code etwas zu verwurschtelt und unstrukturiert aus. Außerdem fehlten mir da noch ein paar Variablen...

Da Du ja kein Newbie bist, weißt Du was ich meine (und kannst meine harsche Kritik dazu hoffentlich vertragen.)



Nun ja, Du mußt beachten, daß der von Dir definierte Workspace automatisch für alle darin aufgerufenen Subs/Funktionen gilt. D.h., Du mußt da schon genau wissen, wie Du Dich in diesem Workspace 'bewegst'.



Ein kleines Beispiel habe ich Dir mal angehängt.

Das ist nun nichts überragendes und allgemeingültiges, soll Dir aber nur mal den Umgang mit Transaktionen verdeutlichen. Und, wie schon gesagt, es macht keinen Sinn eine Transaktion zu öffnen, wenn Du nur einen Satz schreibst. Beim Schreiben in mehrere Tabellen, da kommt man um eine Transaktion nicht herum.





Private Sub TestSub()

  Dim wks As DAO.Workspace, db As DAO.Database

  Dim bInTrans As Boolean, bTransErr As Boolean

  Dim sTmp As String, s As String

  On Error GoTo Er



  Set wks = DBEngine(0)

  wks.BeginTrans

  bInTrans = True

  Set db = CurrentDb

  sTmp = tmp

  tmp = InputBox("Bezeichnung:", "AKZ-Neueintrag", "Neu")

  If Len(tmp) = 0 Then tmp = "NEU"

  s = "INSERT INTO tbl_AdrAKZ (str_akz_Index, str_akz_Bezeichnung ) SELECT '" & sTmp & "', '" & tmp & "'"

  db.Execute s, dbFailOnError

  bTransErr = Not CBool(db.RecordsAffected)

  

  'Diese Aufrufe der Testfunktion laufen auch im Workspace ab!!!:

  If Not bTransErr And Not TestFunc("1") Then bTransErr = True

  If Not bTransErr And Not TestFunc("2") Then bTransErr = True

  If Not bTransErr And Not TestFunc("3") Then bTransErr = True

  

  If bInTrans And bTransErr Then wks.Rollback: bInTrans = False

  If bInTrans And Not bTransErr Then wks.CommitTrans: bInTrans = False

 

Ex:

  On Error Resume Next

  'hier zur Sicherheit nochmal, ist aber nicht unbedingt nötig

  If bInTrans Then wks.Rollback

  'geöffnete Objekte explicit schließen:

  rs.Close

  Set rs = Nothing

  db.Close

  Set db = Nothing

  wks.Close

  Set wks = Nothing

  Exit Sub

Er:

  Dim strErr As String

  If bInTrans Then wks.Rollback: bInTrans = False

  Select Case Err.Number

    Case Else

      strErr = "Fehlermeldung/Information..." & vbCrLf

      strErr = strErr & "FehlerNummer: " & Err.Number & vbCrLf

      strErr = strErr & "Beschreibung: " & vbCrLf & Err.Description

      MsgBox strErr, vbCritical + vbOKOnly, "Sub: TestSub"

      Resume Ex

  End Select

  Resume

End Sub



Private Function TestFunc(ByVal sValue As String) As Boolean

  Dim db As DAO.Database

  On Error GoTo Er

 

  Set db = CurrentDb

  s = "INSERT INTO tbl_AdrAKZ (str_akz_Index, str_akz_Bezeichnung ) SELECT 'TestFunc" & sValue & "', 'Na, bin ich da???'"

  db.Execute s, dbFailOnError

  TestFunc = CBool(db.RecordsAffected)

 

Ex:

  On Error Resume Next

  db.Close

  Set db = Nothing

  Exit Function

Er:

  Dim strErr As String

  Select Case Err.Number

    Case Else

      strErr = "Fehlermeldung/Information..." & vbCrLf

      strErr = strErr & "FehlerNummer: " & Err.Number & vbCrLf

      strErr = strErr & "Beschreibung: " & vbCrLf & Err.Description

      MsgBox strErr, vbCritical + vbOKOnly, "Function: TestFunc"

      Resume Ex

  End Select

  Resume

End Function










geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: