Zum Inhalt springen

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


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

Also so öffnet man ein Recordset:


set rs = currentdb.openrecordset("SELECT * FROM TAB",dbopenforwardonly)

if rs.recordcount > 0 then

  do while not rs.eof

   blbalbala

  loop

end if

Gruß Meenzer

Geschrieben

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

Geschrieben
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?

Geschrieben
Hallo Meenzer,

Dein Tipist gut. Du hast nur das

rs.MoveNext

vor dem

loop

vergessen.

Oh ha, sorry, kann mal passieren. Das darf natürlich nicht fehlen. Danke für den Hinweis. Meenzer

Geschrieben

Jetzt weiß ich, warum diese Meldung kommt.

Hab im Code doch die Zeile

MsgBox (rsvo!Feld1)

Wenn dieses Feld in der Tabelle aber leer ist, bekomm ich die Fehlermeldung mit der NULL.

Ich muß also nur dafür sorgen, daß eine Prüfung auf den Inhalt stattfindet.

Geschrieben

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?

Geschrieben

Hallo,

post mal den ganzen Code, weil nur mit dem Ausschnitt kann es viele Fehler geben. Zum Beispiel was ist rsvo??? Auch ein Recordset? Wo verwendest Du es noch.

Wenn man mal alles sieht, findet man den Fehler vielleicht schneller.

Gruß Meenzer

Geschrieben

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:

Geschrieben

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.

Geschrieben

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

Geschrieben

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?

Geschrieben

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.

Geschrieben
Sorry, Fehler lag wiedermal bei mir.

Ich hab nach dem

nochmals das Unterformular angesprochen, das wurde mir übelgenommen :floet:

und ich hab mich etwas unklar ausgedrückt, sorry, ich meinte [Name des Unterformulars].Requery
Geschrieben

Danke,jetzt klappts sowie es klappen soll.

Sonst hätte ich folgendes machen müssen:

DoCmd.Close

DoCmd.OpenForm "frm_Personal"

Und das hätte mir bei unseren Rechnern auf Arbeit doch irgendwie gewaltig das Programm ausgebremmst :rolleyes:

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