Update Tabelle1 in Tabelle2

mikel

Aktiver Benutzer
Beiträge
38
Hallo zusammen,
ich neu in diesem Forum und ich hoffe Ihr könnt mich bei meinem Anliegen etwas unterstützen.

Ich möchte in Access per VBA (button drücken) aus Tabelle A Werte in die Tabelle B updaten.
Nun bin ich in VBA nicht gerade der Spezialist aber ich habe mit hier schon mal zusammengeschnipselt. Allerdings funktioniert das ganze nicht
Code:
Private Sub Befehl0_Click()
' Daten aus Eröffnungsbilanz in Buchungstabelle kopieren
 If vbYes = MsgBox("Sind Sie sicher, dass Sie die Testdaten übertragen möchten?", vbYesNo, "Löschvorgang") Then
      
       Dim db As DAO.Database
       Dim rst As DAO.Recordset
       Set db = CurrentDb
       db.Execute "UPDATE tbl_test1 SET kontenid, Wert SELECT * FROM tbl_test2"
            
  
  End If
End Sub

Kann mjemand mir dabei helfen?
 
Werbung:
UPDATE tbl_test1 SET kontenid, Wert SELECT * FROM tbl_test2
Die Abfrage ist nicht ok.

Du kannst das erstmal ohne Button machen und einfach eine Aktualisieren Abfrage schreiben, solange bis sie läuft.
Die musst Du dann nur in deinen VBA Code einbauen.

Grundlagen:
1. ein Update benötigt meist ein Zuordnungskriterium / Schlüsselfelder für die Zeilen, die aktualisiert werden sollen. Das kommt in Deinem Statement gar nicht vor, nennt sich "WHERE Clause"
2. Vielleicht möchtest Du gar kein Update, sondern ein Insert (Hier: schreibe alle Daten aus Tabelle tbl_test2 in tbl_test1), das benötigt keine Where Clause und kommt dem was Du da oben geschrieben hast etwas näher.
3. * in einem Select Statement ist meistens schlecht, außer man weiß genau was man tut. Wenn Du die Felder kontenid und Wert befüllen möchtest, dann selektiere auch genau die 2 passenden Felder namentlich.
 
Hallo zusammen,
ich habe mir ein Buch gekauft zum Thema VBA für Access. Nun habe ich einen VBA Code der "FAST" so funktioniert wie ich es gerne haben möchte.

Der Code besteht darin:
1. Lese aus tabelle1 alle 6 Werte aus und schreibe die Daten in eine variable
2. Lösche alle Werte in Tabelle2
3. Füge die Werte von Tabelle1 in Tabelle 2 ein.

Mit einem Wert funzt es. Wie bekomme ich da Ganze mit einer Schleife in den Insert Bereich?

Code:
Private Sub Datenkopieren_Click()
Dim rstDaten As DAO.Recordset
Dim strSql As String
Dim rstinsert As String
Dim delstr As String
Dim SQLStr As String


' Zuerst Fragen ob das o.k. ist!
 If vbYes = msgBox("Sind Sie sicher, dass Sie die Daten übertragen möchten?", vbYesNo, "Daten übertragen") Then


'Datensätze aus Tabelle 1 auslesen
strSql = "Select Wert1, Wert2, Wert3 FROM tabelle1"
Set rstDaten = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)

With rstDaten
    .MoveFirst
    Do Until .EOF
     Wert1 = .Fields("Wert1")
     Wert2 = .Fields("Wert2")
     Wert3 = .Fields("Wert3")
    
    .MoveNext
    Loop
    .Close
End With

'Daten in Tabelle 2 auf null setzen
delstr = "DELETE FROM Tabelle2"
  CurrentDb.Execute delstr, dbFailOnError
  Me.Requery
 
'Daten aus Tabelle1 in Tabelle 2 einfügen alle 6 Werte
 SQLStr = "INSERT INTO tabelle2 (tab2_id, Wert1, Wert2, Wert3) VALUES(1,'" & Wert1 & "'," & Wert2 & ",'" & Wert3 & "' )"
    CurrentDb.Execute SQLStr, dbFailOnError
End If
   msgBox "Die Daten wurden Übertragen", vbOKOnly, "ELKA 2023"
  
End Sub

Wäre Toll wenn Ihr mir den letzten Gniff noch geben könntet.
 
Hallo, was du machst ist so in der Art - "Mit der Kirche ums Dorf laufen".

1) Daten in Tabelle2 löschen
2) Daten von Tabelle 1 direkt in 2 schreiben

1) "DELETE FROM Tabelle2"
2) INSERT INTO Tabelle2 (tab2_id, Wert1, Wert2, Wert3) SELECT 1,'" & Wert1 & "'," & Wert2 & ",'" & Wert3 & "' FROM Tabelle1 WHERE ..."

Wenn du das ganze auf einen kleineren Bereich eingrenzen willst machst du das ganz normal mit dem WHERE Kriterium, ansonsten wirst mit der ID in Tabelle 2 voraussichtlich ein Problem haben.

Gruß MDD
 
Ich verstehe nicht wofür VBA gebraucht wird außer vielleicht noch für den Button an sich. Der Rest ist reines SQL.
 
Technisch gesehen kann man das in Access auch mit Markos machen.
Ist eine Frage der Arbeitstechnik, Vorliebe, ...
Aber tut der ganzen Sache weder Abbruch noch hängt es mit der Frage des TO zusammen.
 
Danke für Eure Antwort.
Die ID in Tabelle 2 setze ich eh bei dem Insert wieder auf 1. Somit dürfte es evtl. keine Probleme geben.

MDD Dein Beispiel ist natürlich etwas schlanker als mein Code. Wenn ich jetzt Dein Vorschlag so übernehme werden dann alle Datensätze, Sprich 6 aus Tabelle ein in Tabelle 2 übernommen?

Ja ich weiß dass der Rest reines SQL ist. Allerdings unterscheidet sich VBA in machnen Dingen mit PHP. Das ist mein Problem.

Trotzdem Danke für Eure Hilfe
 
Auch wenn ich Access nicht kenne oder gar nutze, aber:

  • man verarbeitet Daten nicht in Schleifen
  • man braucht zur Verarbeitung kein VBA, PHP oder anderes Gedöhns
  • ID-Spalten dienen der eindeutigen Kennzeichnung eines jeden Datensatzen. Sie muß eindeutig sein, und sie verändert sich für einen konkreten Datensatz nicht.
 
Wenn ich jetzt Dein Vorschlag so übernehme werden dann alle Datensätze, Sprich 6 aus Tabelle ein in Tabelle 2 übernommen?

Ohne "WHERE" Filter werden alle Zeilen aus Tabelle1 in Tabelle2 geschrieben, außer sie fallen irgendeiner Indexeinschränkung zum Opfer.

Nur so nebenbei, wozu schreibst du Werte von einer Tabelle in eine andere?
 
Sorry das ich noch einmal nachfragen muss.

Ich habe jetzt das von MDDaniel so umgestzt. Allerdings habe ich in der Tabelle1 5 unterschiedliche Datensätze.
Eingefügt in Tabelle2 wird aber nur der erste Datensatz.

Code:
Dim strSql As String
Dim rstinsert As String
Dim delstr As String



' Zuerst Fragen ob das o.k. ist!
 If vbYes = msgBox("Sind Sie sicher, dass Sie die Daten übertragen möchten?", vbYesNo, "Daten übertragen") Then


'Daten in Tabelle 2 auf null setzen
delstr = "DELETE FROM Tabelle2"
  CurrentDb.Execute delstr, dbFailOnError
  Me.Requery

'Datensätze aus Tabelle 1 auslesen
strSql = "INSERT INTO Tabelle2 (tab2_id, Wert1, Wert2, Wert3) SELECT tab1_id,'" & Wert1 & "'," & Wert2 & ",'" & Wert3 & "' FROM Tabelle1"
CurrentDb.Execute strSql, dbFailOnError

Wie bekomme ich alle Datensätze rüber?

Möchtse unbedingt VBA und SQL lernen!
 
VBA ist eine ganz andere Geschichte, ich kann das nicht wirklich. Ich sehe aber kein Grund warum nicht jeder Datensatz aus Tabelle 1 auch in Tabelle 2 angekommen sollte.

Warum baust du den String so komisch zusammen? Müsste nicht
Code:
strSql = "INSERT INTO Tabelle2 (tab2_id, Wert1, Wert2, Wert3) SELECT tab1_id,'" & Wert1 & "'," & Wert2 & ",'" & Wert3 & "' FROM Tabelle1"
eigentlich das gleiche sein wie
Code:
strSql = "INSERT INTO Tabelle2 (tab2_id, Wert1, Wert2, Wert3) SELECT tab1_id,Wert1,Wert2,Wert3 FROM Tabelle1"
?
 
Habe das Ganze jetzt so gelöst:

Code:
Dim rstDaten As DAO.Recordset
Dim strSql As String
Dim rstinsert As String
Dim delstr As String
Dim SQLStr As String
Dim Einnahmen As Double


' Zuerst Fragen ob das o.k. ist!
 If vbYes = MsgBox("Sind Sie sicher, dass Sie die Eröffnungsbilanz übertragen möchten?", vbYesNo, "Daten übertragen") Then

'Daten in Tabelle 2 auf null setzen
delstr = "DELETE FROM tbl_buchungstabelle"
  CurrentDb.Execute delstr, dbFailOnError
  Me.Requery

'Datensätze aus Tabelle 1 auslesen
strSql = "Select kontenklassenid, kontenid, Kontobezeichnung, Kontoopen FROM tbl_eroeffnungsbilanz"
Set rstDaten = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)

With rstDaten
    .MoveFirst
    Do Until .EOF
     Kontenklasse = .Fields("kontenklassenid")
     konten = .Fields("kontenid")
     bezeichnung = .Fields("kontobezeichnung")
     Einnahmen = .Fields("Kontoopen")
     Debug.Print Einnahmen
    
    'Daten aus Tabelle1 in Tabelle 2 einfügen alle 6 Werte
     SQLStr = "INSERT INTO tbl_buchungstabelle (kontenklassenid, kontenid, Einnahmen) VALUES(" & Kontenklasse & "," & konten & "," & Einnahmen & " )"
      CurrentDb.Execute SQLStr, dbFailOnError
    .MoveNext
    Loop
    .Close
End With
End If
   MsgBox "Die Daten wurden Übertragen", vbOKOnly, "ELKA 2023"
 
End Sub

Ist mit Sicherheit nicht perfekt, aber es funzt!

Danke
 
Werbung:
Zurück
Oben