PDA

Vollständige Version anzeigen : Fehler beim Hinzufügen von Datensatz


thomas345
13.06.2012, 07:47
Hallo ich habe ein problem mit dem hinzufügen eines neuen Datensatzes. hier mein code. Die zeile, die nicht ausgeführt wird ist makiert:

Option Explicit
Option Compare Database

Dim DbL As Database
Dim RsL As Recordset
Dim Db As Database
Dim Zeile As Integer
Dim MaxZeile As Integer
Dim MaxSpalte As Integer
Dim Fundzeile As Integer
Dim vWertDerZelle As Variant
Dim strSQL As String

'LieferantenNr ergänzen wenn Lieferant gewählt wurde
Private Sub Lieferant_AfterUpdate()
LieferantNr.Value = Lieferant.Value
End Sub

'Lieferant ergänzen wenn LieferantenNr gewählt wurde
Private Sub LieferantNr_AfterUpdate()
Lieferant.Value = LieferantNr.Value
End Sub

'Neue speichern
Private Sub save_Click()
Set DbL = CurrentDb()
Set RsL = DbL.OpenRecordset("LIEFERANTEN", dbOpenDynaset)
Zeile = 0

RsL.MoveLast
MaxZeile = RsL.RecordCount

'Lieferanten Informationen aus Lieferanten Tabelle holen
'Zeile finden in der der gewählte Lieferant ist
For Zeile = 0 To MaxZeile Step 1
RsL.AbsolutePosition = Zeile
If RsL.Fields(0) = CInt(Lieferant.Value) Then
Fundzeile = Zeile
End If
Next

RsL.AbsolutePosition = Fundzeile

strSQL = "INSERT INTO DATEN (LieferantNr,Lieferant,LieferantID,Datum,BanfNr,BestellNr,Ware,V,R,M,Eingang) VALUES ( '" & RsL.Fields(1) & "','" & RsL.Fields(2) & "','" & RsL.Fields(0) & "'," & Format(Me!Datum, "\#mm\/dd\/yyyy\#") & "," & Me!BanfNr & "," & Me!BestellNr & "," & Me!Ware & "," & Me!V & "," & Me!R & "," & Me!M & "," & Me!Eingang & ")"

'Hier ist wahrscheinlich der fehler, es wird nicht ausgeführt?
'---------------------------------------------------------
Db.Execute strSQL, dbFailOnError ' dbFailOnError = 128 , Db = einzige benötigte Database-Objektvariable
'---------------------------------------------------------

Set Db = Nothing
RsL.Close
Set RsL = Nothing
' RsD wird ebensowenig benötigt wie DbD

DoCmd.Close acForm, Me.Name
DoCmd.OpenForm "ERGEBNISSE"
'Ergebniss Tabelle aktualisieren, damit man gleich nachvollziehen kann ob es geklappt hat
Call Forms("ERGEBNISSE").anzahl_AfterUpdate
End Sub

Stefan Dase
13.06.2012, 08:10
Hallo thomas345,

eine Bitte gleich vorweg: Benutze doch bitte die Code-Tags. Damit ist Programmcode wesentlich besser lesbar und behält auch Einrückungen.

Vergleiche

For Zeile = 0 To MaxZeile Step 1
RsL.AbsolutePosition = Zeile
If RsL.Fields(0) = CInt(Lieferant.Value) Then
Fundzeile = Zeile
End If
Next

mal mit

For Zeile = 0 To MaxZeile Step 1
RsL.AbsolutePosition = Zeile
If RsL.Fields(0) = CInt(Lieferant.Value) Then
Fundzeile = Zeile
End If
Next


Dann ist mir aufgefallen, dass Db zwar deklariert aber nicht instanziert wird; irgendwo muss noch ein Set Db = ... stehen.

Falls das nur ein Kopierfehler war, welche Fehlermeldung erhälst du? Testweise könntest du mal den Inhalt von strSQL im Debug-/Direkt-Fenster ausgeben lassen und in eine Access-Abfrage als SQL einfügen. Kann diese Abfrage dann ausgeführt werden?

Viele Grüße,
Stefan

thomas345
13.06.2012, 08:15
ne, die zeile fehlte wirklich.
ist die denn so richtig?

Set Db = CurrentDb()

Stefan Dase
13.06.2012, 08:21
ne, die zeile fehlte wirklich.
ist die denn so richtig?

Set Db = CurrentDb()


Wenn du einen Verweis auf die aktuelle Datenbank haben möchtest, ist das so korrekt instanziert. Dies hast du je für DbL bereits so verwendet.

Grüße,
Stefan

Beaker s.a.
13.06.2012, 21:51
Hallo,
@Stefan
Wenn du einen Verweis auf die aktuelle Datenbank haben möchtest, ist das so korrekt instanziert. Dies hast du je für DbL bereits so verwendet
Fragt sich nur, warum er überhaupt zwei Referenzen auf CurrentDb braucht, - eine reicht doch, auch für mehrere zu öffnende Recordsets.

@Thomas
Set RsL = DbL.OpenRecordset("LIEFERANTEN", dbOpenDynaset)
Warum filterst Du hier nicht gleich auf den Lieferanten?
Also
Set RsL = DbL.OpenRecordset("SELECT * FROM LIEFERANTEN WHERE LieferantNr = " & LieferantNr.Value)
(Luftcode mit nicht bekannten Objekt-Bezeichnungen)
Da sparst Du das sequenzielle durchkaspern des RS.
hth
gruss ekkehard

thomas345
14.06.2012, 06:32
und wie komme ich dann an die zeilen nummer, bzw. was ist der rückgabewert dieser funktion?

Anne Berg
14.06.2012, 09:04
Hi,

das wurde dir bereits an anderer Stelle vorgekaut, warum hast du hier überhaupt einen neuen Thread angefangen? :confused:Set RsL = DbL.OpenRecordset("SELECT * FROM LIEFERANTEN WHERE LieferantNr = " & LieferantNr.Value)Das ist keine "Funktion", sondern damit wird ein Recordset mit dem gesuchten Datensatz geöffnet.
Du kannst also direkt auf die von dir benötigten Datenfelder aus RsL zugreifen.
Und anstelle von Db kannst du DbL verwenden, du brauchst nur ein Database-Objekt, um auf die aktuelle Datenbank zu verweisen.