Discussion:
Aktuellen Datensatz in andere Tabelle verschieben
(zu alt für eine Antwort)
Sven
2003-11-20 06:36:47 UTC
Permalink
Hallo NG

Ich möchten den aktuellen Datensatz im geöffneten Formular per Button
in eine andere Tabelle der gleichen Strucktur einfügen und in der
ürsprunglichen Tabelle löschen.

Habs Damit versucht:

Private Sub Befehl3_Click()
Dim dbs As Database, rst1 As Recordset, rst2 As Recordset

Set dbs = OpenDatabase("Kalibrieren.mdb")

Set rst1 = dbs.OpenRecordset("Meßwerte")
Set rst2 = dbs.OpenRecordset("Archiv")

rst2.AddNew

rst2 = rst1


rst2.Update


rst1.Close
rst2.Close
dbs.Close
End Sub

Es kommt aber eine Fehlermeldung:

Fehler beim Kompilieren
Verwendung einer Eigenschaft unzulässig.

Ich Arbeite mit A97

Danke schon mal im voraus
Paul Rohorzka
2003-11-20 07:32:26 UTC
Permalink
Hi Sven!
Post by Sven
Ich möchten den aktuellen Datensatz im geöffneten Formular per Button
in eine andere Tabelle der gleichen Strucktur einfügen und in der
ürsprunglichen Tabelle löschen.
a) Am effizientesten kopierst du Datensätze wohl mittels SQL-Anfügeabfrage.
Löschen kannst du mittels einer Löschabfrage.
Post by Sven
Private Sub Befehl3_Click()
Dim dbs As Database, rst1 As Recordset, rst2 As Recordset
Set dbs = OpenDatabase("Kalibrieren.mdb")
Set rst1 = dbs.OpenRecordset("Meßwerte")
Set rst2 = dbs.OpenRecordset("Archiv")
rst2.AddNew
rst2 = rst1
b) Wenn du ohne Set eine Zuweisung einer Objektvariablen vornimmst
(rst2 = rst1), wird versucht, die Standardeigenschaft zuzuweisen.
IMHO hat ein Recordset kein selbige, weshalb hier wahrscheinlich
der Fehler auftritt.
c) Schreibst du diese Zuordnung mit Set (Set rst2 = rst1) erhältst
du lediglich eine zweite Referenz rst2 auf das Quell-Recordset, aber
keine Kopie des Objekts oder gar der Daten.
Post by Sven
rst2.Update
rst1.Close
rst2.Close
dbs.Close
End Sub
Fehler beim Kompilieren
Verwendung einer Eigenschaft unzulässig.
d) Wenn es denn schon über ein Recordset gehen soll, dann musst du
mittels einer For-Each-Schleife über alle Fields des Recordsets die
Feld-Werte aus dem Quell-Recordset auslesen und in die entsprechenden
Felder des Ziel-Recordset schreiben. Aufpassen musst du dabei aber bei
Autowert-Feldern. Performant ist das sicher nicht.

HTH,
Paul
Sven
2003-11-20 12:07:04 UTC
Permalink
Post by Paul Rohorzka
Hi Sven!
Post by Sven
Ich möchten den aktuellen Datensatz im geöffneten Formular per Button
in eine andere Tabelle der gleichen Strucktur einfügen und in der
ürsprunglichen Tabelle löschen.
a) Am effizientesten kopierst du Datensätze wohl mittels SQL-Anfügeabfrage.
Löschen kannst du mittels einer Löschabfrage.
Post by Sven
Private Sub Befehl3_Click()
Dim dbs As Database, rst1 As Recordset, rst2 As Recordset
Set dbs = OpenDatabase("Kalibrieren.mdb")
Set rst1 = dbs.OpenRecordset("Meßwerte")
Set rst2 = dbs.OpenRecordset("Archiv")
rst2.AddNew
rst2 = rst1
b) Wenn du ohne Set eine Zuweisung einer Objektvariablen vornimmst
(rst2 = rst1), wird versucht, die Standardeigenschaft zuzuweisen.
IMHO hat ein Recordset kein selbige, weshalb hier wahrscheinlich
der Fehler auftritt.
c) Schreibst du diese Zuordnung mit Set (Set rst2 = rst1) erhältst
du lediglich eine zweite Referenz rst2 auf das Quell-Recordset, aber
keine Kopie des Objekts oder gar der Daten.
Post by Sven
rst2.Update
rst1.Close
rst2.Close
dbs.Close
End Sub
Fehler beim Kompilieren
Verwendung einer Eigenschaft unzulässig.
d) Wenn es denn schon über ein Recordset gehen soll, dann musst du
mittels einer For-Each-Schleife über alle Fields des Recordsets die
Feld-Werte aus dem Quell-Recordset auslesen und in die entsprechenden
Felder des Ziel-Recordset schreiben. Aufpassen musst du dabei aber bei
Autowert-Feldern. Performant ist das sicher nicht.
HTH,
Paul
Hi

Danke für die schnelle Antwort!!

Leider bin ich was programmieren angeht anfänger und von SQL hab ich
keine Ahnung. Wenn es möglich wäre, könntest du mir vielleicht einen
Code basteln.

Danke für die Hilfe

Gruß Sven
Paul Rohorzka
2003-11-21 09:30:50 UTC
Permalink
Hallo Sven!
Post by Sven
Post by Sven
Ich möchten den aktuellen Datensatz im geöffneten Formular per Button
in eine andere Tabelle der gleichen Strucktur einfügen und in der
ürsprunglichen Tabelle löschen.
Set rst1 = dbs.OpenRecordset("Meßwerte")
Set rst2 = dbs.OpenRecordset("Archiv")
Leider bin ich was programmieren angeht anfänger und von SQL hab ich
keine Ahnung. Wenn es möglich wäre, könntest du mir vielleicht einen
Code basteln.
Angenommen, das Primärschlüsselfeld deines Originaldatensatzes
heißt MesswertID. Dann könnte das ungefähr so aussehen:

Private Sub cmdArchivieren_Click
Call MesswertArchivieren(Me.MesswertID.Value)
End Sub

Private Sub MesswertArchivieren(MesswertID As Long)
On Error Goto Err_
Dim dbs As DAO.Database
Dim strSQL As String

Set dbs = CurrentDb()
strSQL = "INSERT INTO Archiv " & _
"SELECT Meßwerte.* " & _
"FROM Meßwerte " & _
"WHERE Meßwerte.MesswertID = " & MesswertID
dbs.Execute strSQL, dbFailOnError

strSQL = "DELETE Meßwerte.* " & _
"FROM Meßwerte " & _
"WHERE Meßwerte.MesswertID = " & MesswertID
dbs.Execute strSQL, dbFailOnError

Exit_:
Set dbs = Nothing
Exit Sub

Err_:
MsgBox Err.Description, vbExlamation, "Fehler #" & Err.Number
Resume Exit_
End Sub

*** WARNUNG ***
Ich habe diesen Code nicht getestet und übernehme keinerlei
Verantwortung für das, was er tut.
Bitte teste selbst an Entwicklungsdaten ausführlich!
***************

Es geht mehr um das Prinzip. Es fehlen auch noch einige
Dinge, die eine solche Funktion seriöserweise haben sollte:
Ordentliche Fehlerbehandlung und vor allem den Einschluss
des ganzen in eine Transaktion.

HTH,
Paul
Sven
2003-11-24 07:25:15 UTC
Permalink
Hallo

Danke für die schnelle Antwort. Ich Hab jetzt folgendes:

Private Sub Befehl5_Click()
Call MesswertArchivieren(Me.Prüfmittel_Nr.Value)
End Sub

Private Sub MesswertArchivieren(Prüfmittel_Nr As Long)
On Error GoTo Err_
Dim dbs As DAO.Database
Dim strSQL As String

Set dbs = CurrentDb()
strSQL = "INSERT INTO Archiv " & "SELECT Meßwerte.* " & "FROM
Meßwerte " & "WHERE Meßwerte.Prüfmittel_Nr = " & Prüfmittel_Nr
dbs.Execute strSQL, dbFailOnError

strSQL = "DELETE Meßwerte.* " & "FROM Meßwerte " & "WHERE
Meßwerte.Prüfmittel_Nr = " & Prüfmittel_Nr
dbs.Execute strSQL, dbFailOnError

Exit_:
Set dbs = Nothing
Exit Sub

Err_:
MsgBox Err.Description, vbExlamation, "Fehler #" & Err.Number
Resume Exit_
End Sub

Mein Primärschlüsselfeld heisst "Prüfmittel Nr".

Ich bekomme folgende fehlermeldung in dieser Zeile

Private Sub Befehl5_Click()
Call MesswertArchivieren(Me.Prüfmittel_Nr.Value)

Fehler beim Kompilieren:
Methode oder Objekt nicht gefunden

Wo liegt mein Fehler?

Danke für eure Hilfe
Paul Rohorzka
2003-11-24 09:27:09 UTC
Permalink
Hallo Sven!
Post by Sven
Private Sub Befehl5_Click()
Call MesswertArchivieren(Me.Prüfmittel_Nr.Value)
Methode oder Objekt nicht gefunden
Wo liegt mein Fehler?
Wahrscheinlich gibt es weder in dem Formular ein
Steuerelement, das exakt Prüfmitel_Nr heißt, noch
in der zugrundeliegenden Datenquelle ein Feld
dieses Namens.

Überprüf das einmal. Setz die Einfügemarke
in Prüfmittel_Nr und drücke Strg+Leertaste.
Wenn danach eine Liste aufklappt, hast du
dich wahrscheinlich vertippt und findest
in dieser Liste hoffentlich den korrekten
Bezeichner.

HTH,
Paul
Sven
2003-11-24 15:01:53 UTC
Permalink
Post by Paul Rohorzka
Hallo Sven!
Post by Sven
Private Sub Befehl5_Click()
Call MesswertArchivieren(Me.Prüfmittel_Nr.Value)
Methode oder Objekt nicht gefunden
Wo liegt mein Fehler?
Wahrscheinlich gibt es weder in dem Formular ein
Steuerelement, das exakt Prüfmitel_Nr heißt, noch
in der zugrundeliegenden Datenquelle ein Feld
dieses Namens.
Überprüf das einmal. Setz die Einfügemarke
in Prüfmittel_Nr und drücke Strg+Leertaste.
Wenn danach eine Liste aufklappt, hast du
dich wahrscheinlich vertippt und findest
in dieser Liste hoffentlich den korrekten
Bezeichner.
HTH,
Paul
Hallo Paul

Hoffe du hast noch etwas Geduld mit mir.

Ok. Hab das jetzt überprüft. Aber ich würde gern wissen auf was sich
Call MesswertArchivieren(Me.Prüfmittel_Nr.Value) beziehen muss.Auf
meine Tabelle
"messwerte" oder auf mein Eingabefeldt "text0" in dem die ID
(prüfmittel Nr) steht. Hab leider noch nicht ganz den durchblick.

Danke
Paul Rohorzka
2003-11-24 18:49:52 UTC
Permalink
Hallo Sven!
... Aber ich würde gern wissen auf was sich
Call MesswertArchivieren(Me.Prüfmittel_Nr.Value) beziehen muss.Auf
meine Tabelle
"messwerte" oder auf mein Eingabefeldt "text0" in dem die ID
(prüfmittel Nr) steht. Hab leider noch nicht ganz den durchblick.
Nun ja, wenn du die Prüfmittel-Nr in einem Textfeld hast,
dann nimm das.
Also Me.<BezeichnerTextfeld>.Value.

Ciao,
Paul
Sven
2003-11-25 07:18:47 UTC
Permalink
Hallo mal wieder

Damit es nicht langweilig wird.
So siehts grad aus:

Private Sub MesswertArchivieren(Text0 As Long)
On Error GoTo Err_
Dim dbs As DAO.Database
Dim strSQL As String

Set dbs = CurrentDb()
strSQL = "INSERT INTO Archiv " & "SELECT Meßwerte.* " & "FROM
Meßwerte " & "WHERE Meßwerte.Prüfmittel_Nr = " & [Meßwerte.Prüfmittel
Nr]
dbs.Execute strSQL, dbFailOnError

strSQL = "DELETE Meßwerte.* " & "FROM Meßwerte " & "WHERE
Meßwerte.Prüfmittel_Nr = " & [Meßwerte.Prüfmittel Nr]
dbs.Execute strSQL, dbFailOnError

Exit_:
Set dbs = Nothing
Exit Sub

Err_:
MsgBox Err.Description, vbExclamation, "Fehler #" & Err.Number
Resume Exit_
End Sub

Fehler #3061
1 Parameter wurden erwartet, aber es wurden zu wenig Parameter
übergeben.

Danke
Oliver Schreiner
2003-11-25 07:32:24 UTC
Permalink
Hi Sven,
Post by Sven
Fehler #3061
1 Parameter wurden erwartet, aber es wurden zu wenig Parameter
übergeben.
ich weiss zwar nicht ob das Dir letzlich hilft, aber ich meine gehört zu
haben, dass Access immer ein Semikolon am Ende eines SQL-Befehls haben will.
Somit müssten Deine SQL's so aussehen:

strSQL = "INSERT INTO Archiv " & "SELECT Meßwerte.* " & "FROM Meßwerte "
& "WHERE Meßwerte.Prüfmittel_Nr = " & [Meßwerte.Prüfmittel Nr] & ";"
dbs.Execute strSQL, dbFailOnError

strSQL = "DELETE Meßwerte.* " & "FROM Meßwerte " & "WHERE
Meßwerte.Prüfmittel_Nr = " & [Meßwerte.Prüfmittel Nr] & ";"
dbs.Execute strSQL, dbFailOnError

desweiteren prüfe bitte mal ob [Meßwerte.Prüfmittel Nr] stimmt und da nicht
ebenfalls ein Unterstrich zwischen Prüfmittel und Nr rein muss.

HTH, Gruss Olly
Sven
2003-11-25 10:07:24 UTC
Permalink
Post by Oliver Schreiner
Hi Sven,
Post by Sven
Fehler #3061
1 Parameter wurden erwartet, aber es wurden zu wenig Parameter
übergeben.
ich weiss zwar nicht ob das Dir letzlich hilft, aber ich meine gehört zu
haben, dass Access immer ein Semikolon am Ende eines SQL-Befehls haben will.
strSQL = "INSERT INTO Archiv " & "SELECT Meßwerte.* " & "FROM Meßwerte "
& "WHERE Meßwerte.Prüfmittel_Nr = " & [Meßwerte.Prüfmittel Nr] & ";"
dbs.Execute strSQL, dbFailOnError
strSQL = "DELETE Meßwerte.* " & "FROM Meßwerte " & "WHERE
Meßwerte.Prüfmittel_Nr = " & [Meßwerte.Prüfmittel Nr] & ";"
dbs.Execute strSQL, dbFailOnError
desweiteren prüfe bitte mal ob [Meßwerte.Prüfmittel Nr] stimmt und da nicht
ebenfalls ein Unterstrich zwischen Prüfmittel und Nr rein muss.
HTH, Gruss Olly
Hallo zusammen

Bin kurz vorm verzweifeln.Probier mir mit Möglichkeiten den Wolf und
komm nicht weiter.(Kann es sein das das leerzeichen in Prüfmittel Nr
auch probleme verursacht.Soll ich das abändern?)
Hat jemand eine getestete, funktionierende Lösung wie ich den
kompletten Datensatz der in einem Formular geöffnet ist in eine Andere
Tabelle verschieben kann?

Bin für Hilfe sehr Dankbar

Loading...