Hallo zusammen,
ich habe folgendes Problem beim Lesen von Daten aus einer Access-DB. Bei einem Export aus Excel erzeuge ich Einträge in einer DB und dabei soll über einen Autowert ein eindeutiger Wert erzeugt werden, denn ich in einer anderen Tabelle dieser DB als Primärschlüssel verwenden möchte. Ich erzeuge also einen Eintrag, den ich anschließend gleich wieder lese um den Wert des Autowerts für meinen Primärschlüssel zu erhalten.
Wahrscheinlich lese oder schreibe ich mit den falschen Parametern, denn beim Lesen des eben geschriebenen Eintrags erhalte ich oft kein Ergebnis. Im Debug-Modus ist das Lesen allerdings häufiger Erfolgreich als im Echtzeitbetrieb, was mich vermuten lässt, mein eben geschriebener Eintrag steht noch nicht wirklich in der DB sondern in einer Art Puffer. Ist meine Vermutung mit dem Puffer eigentlich korrekt? Wenn ja, wie kann ich die DB dazu bringen den Puffer zu leeren bzw. wie schreibe ich direkt in die DB (ohne Puffer)?
Hier mein Code:
Sub Test_01()
Dim DB2 As DAO.Database
Dim Connect As Connection
Dim RecSet As Recordset
Dim RecSet2 As DAO.Recordset
Dim SQLString As String
Dim E_Quelle As Worksheet
Dim e_pfad As String
Dim dp_pfad As String
Dim db_tab1 As String
Dim db_struktur1 As String
Dim Personalnummer As String
Dim A_Tag_Str As String
Dim AZ_von As String
Dim AZ_bis As String
Dim S_ID As Integer
dp_pfad = "H:\db.mdb"
db_tab1 = "Tab_01"
db_struktur1 = "Personalnummer,Datum, AZ_von, AZ_bis"
Set Connect = New ADODB.Connection
With Connect
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & dp_pfad
.Open
End With
e_pfad = "H:\tab.xls"
Set E_Quelle = Workbooks.Open(e_pfad, ReadOnly:=True).Worksheets(1)
' Datensatz schreiben
SQLString = "INSERT INTO " & db_tab1 & " (" & db_struktur1 & ") " & _
"VALUES (" & Personalnummer & A_Tag_Str & AZ_von & ", " & _
AZ_bis & ")"
Set RecSet = New ADODB.Recordset
RecSet.Open SQLString, Connect, adOpenDynamic, adLockReadOnly
' jetzt wieder lesen
SQLString = "SELECT * FROM " & db_tab1 & " " & _
"WHERE Personalnummer = " & E_Quelle.Range("N13").Text & _
" AND AZ_Typ = " & AZ_typ & " " & _
"AND Datum = " & CLng(CDate(CStr(A_Tag))) & ";"
XterVersuch:
Set DB2 = CurrentDb
Set RecSet2 = DB2.OpenRecordset(SQLString, dbOpenForwardOnly)
' prüfe ob lesen geklappt hat, falls nicht, probiers nochmal
If RecSet2.RecordCount < 1 Then
GoTo XterVersuch
End If
S_ID = RecSet2!Schlüssel_ID
RecSet2.Close
DB2.Close
Connect.Close
End Sub
DB-Struktur (Primärschlüssel ist Personalnummer&Datum)
Personalnummer (Zahl)
Datum (Datum/Uhrzeit)
Schlüssel_ID (AutoWert)
AZ_von (Datum/Uhrzeit)
AZ_bis (Datum/Uhrzeit)
Vielen Dank schon mal für Eure hilfe!