Zum Inhalt springen

[ACCESS] OpenRecordset --> Typen unverträglich ???


Pittiplatsch

Empfohlene Beiträge

Hi, jetzt hab ich schon wieder ein Problem mit diesem einen Formular.

Kurz und knapp ich habe mittlerweile 3 Recordsets in einem Formular und weiß nicht, ob das überhaupt geht.

Das Programm sagt mir jedenfalls immer wieder:

Fehler beim Kompilieren

Typen unverträglich

:confused: :confused:

Aber das sagt es erst beim 3. Recordset, die ersten beiden funktionieren prima.

Oder liegt der Fehler irgendwo in diesem Abschnitt?

sqlvo = "SELECT * FROM vorgang_vorab"

vorgang = db2.OpenRecordset(rsvo, dbOpenDynaset)(0)

Do While Not rsvo.EOF

'Programmablauf

rsvo.MoveNext

Loop

Die einzelnen Variablen sind vorher richtig definiert.

Wer kann mir helfen ?????

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich werd aus diesen Zeilen nicht schlau:

vorgang = db2.OpenRecordset(rsvo, dbOpenDynaset)(0)

Do While Not rsvo.EOF

der erste Parameter in OpenRecordset (wo bei dir rsvo steht) sollte eigentlich die Tabelle bzw. Abfrage sein von der du das Recordset erstellen willst und vor dem Gleich die Variable die den Recordset aufnimmt.. ich denk mal du hast "vorgang" und "rsvo" einfach vertauscht -> siehe dein rsvo.EOF

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hab den Fehler gefunden. :)

Vertauscht war nix, aber irgendwie doppelt.

Hatte weiter oben rsvo schon gefüllt.

sqlvo = "SELECT * FROM vorgang_vorab"

Set rsvo = db.OpenRecordset("vorgang_vorab")

'vorgang = db.OpenRecordset(rsvo, dbOpenDynaset)(0)<--Fehler

Do While Not rsvo.EOF

MsgBox (rsvo!Feld1)

rsvo.MoveNext

Loop

Jetzt funktioniert es soweit ganz gut, er gibt mir den Inhal von Feld1 auch richtig aus(war jetzt erstmalzu Testzwecken).

Allerdings versucht er die letzte Zeile der Tabelle, welche immer dabei ist für neue Datensätze, auch mit auszulesen und es kommt zu einer weiteren Fehlermeldung.

Unzulässige Verwendung von NULL

Wie kann ich das jetzt umgehen??

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vertauscht war nix, aber irgendwie doppelt.

Hatte weiter oben rsvo schon gefüllt.

Allerdings versucht er die letzte Zeile der Tabelle, welche immer dabei ist für neue Datensätze, auch mit auszulesen und es kommt zu einer weiteren Fehlermeldung.

da lag der der Fehler, rsvo ist vom Typ Recordset und als erster Parameter für OpenRecordset brauch er nen String.. deswegen "Typen unverträglich"

Eigentlich sollte er die Schleife nicht noch mal durchgehen wenn EOF erreicht ist.. in welcher Zeile wird der Fehler denn verursacht?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das mit demAbfragen der Felder funzt ja jetzt.

Die Daten werden auch ordentlich in die andere Tabelle überragen.

Wie kann ich jetzt aber die einzelnen Datensätze löschen?

Hab jetzt folgendes versucht:

If (db.OpenRecordset(sqlvo, dbOpenDynaset)(0) = 0) Then

rsvo2.AddNew

rsvo2!Personalnummer = personNr

rsvo2!Massnahmenummer = vorgang

rsvo2.Update

End If

rsvo.Delete

rsvo.MoveNext

Der blaue Teil funktioniert, dieses Delete aber nicht.

Wielautet hier der richtige Befehl zum Löschen eines Datensatzes?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Meenzer,

hier der entsprechende code:

Dim db As DAO.Database

Dim rsvo As DAO.Recordset 'Recordset für vorgang_vorab

Dim rsvo2 As DAO.Recordset 'Recordset für tbl_Vorgangsdaten

Dim personNr As String

Dim vorgang As String

Set rsvo = db.OpenRecordset("SELECT * FROM vorgang_vorab", dbOpenForwardOnly)

Set rsvo2 = db.OpenRecordset("tbl_Vorgangsdaten")

If rs.RecordCount > 0 Then

Do While Not rsvo.EOF

sqlvo = "SELECT COUNT(*) FROM tbl_Vorgangsdaten WHERE Personalnummer='" & personNr & "' AND Massnahmenummer='" & vorgang & "' "

If (db.OpenRecordset(sqlvo, dbOpenDynaset)(0) = 0) Then

rsvo2.AddNew

rsvo2!Personalnummer = personNr

rsvo2!Massnahmenummer = vorgang

rsvo2.Update

End If

rsvo.Delete

rsvo.MoveNext

Loop

End If

Antwort des Programms

Operation wird für diesen Objekttyp nicht unterstützt

Ich hab irgendwie keine Ahnung, wo der Fehler liegt! :confused: :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du versuchst mit dem Delete den aktuellen Datensatz von rsvo zu löschen, da rsvo aber auf einem SELECT Statement basiert bringt er diese Fehlermeldung.

Du kannst die Delete Anweisung so weit ich weiss nur auf Records anwenden, die direkt eine Tabelle als Ursprung haben (wie z.B. rsvo2). Könntest du z.B. lösen, indem du statt "rsvo.delete" direkt per Docmd.RunSQL ein DELETE auf die Tabelle ausführst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

vielleicht machst Du es mal ohne Recordsets. Zum Nachschauen benutze ich Dlookup und das Einfügen mache ich mit einem direkten SQL Statement. Zum Beispiel so (ungetestet):


Dim db As DAO.Database

Dim rsvo As DAO.Recordset

Dim personNr As String

Dim vorgang As String

Dim TMP As Variant


Set rsvo = db.OpenRecordset("SELECT * FROM vorgang_vorab", dbOpenForwardOnly)

If rsvo.RecordCount > 0 Then

  Do While Not rsvo.EOF

    TMP = Dlookup("personNr","tbl_Vorgangsdaten","personNR = '" &  

    rsvo!personNr  & "'AND vorgang = "' & rsvo!vorgang  & "'")

    If isNull(TMP) then

      currentdb.execute "INSERT INTO tbl_Vorgangsdaten (personNr, vorgang)   

       VALUES ('" & rsvo!personNr  & "','" & rsvo!vorgang & "');"

    End If

    rsvo.Delete

    rsvo.MoveNext

   Loop

End If   


Ich hoffe es geht so. Gruß Meenzer

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hab das Problem jetzt gelöst.

Nach dem alle Daten in den entsprechenden Tabellen gespeichert sind, geb ich die folgenden Befehle.

DoCmd.SetWarnings False 'Warnmeldung ausschalten

DoCmd.RunSQL "DELETE vorgang_vorab.* FROM vorgang_vorab;" 'Datensätze löschen

DoCmd.SetWarnings True 'Warnmeldung wieder einschalten

Das letzte Problem,welches ich jetzt noch hab,ist das Neuladen des Unterformulars.

Hab ich bei einer PErson mehrere Vorgänge, hab ich im Unterformauch dementsprechend mehrere Zeilen. Nach dem Speichern hab ich diese Zeilen immernoch, nur das in den einzelnen Feldern

#Gelöscht

drinnsteht.

Gibt es da einen speziellen Refresh-Befehl?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Meinst du damit das komplette Formular?

Hab diesen Befehl versucht, auf das Unterformular zu verwenden und das hat nicht geklappt. :(

Ach ja,mit refresh auf das komplette Form klappt es insofern, daß es mir die vorhandenen Felder leert, aber ich hab immernoch mehrere Zeilen imUnterformular. genau das wollte ich aber umgehen.

Nach dem Speichern und allem soll im Unterformular nur noch eine Zeile zu sehen sein.

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...