• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Kopieren recordset

Status
Niet open voor verdere reacties.

nasdreas

Gebruiker
Lid geworden
19 mei 2016
Berichten
21
Beste allemaal,

Op dit moment maak ik gebruik van de volgende code om gegevens in een Access database te verwijderen zodra er op delete wordt geklikt:
Code:
Private Sub cmdDelete_db_Click()

Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim dbPath As String
Dim i As Integer
Dim x As Integer

On Error GoTo errHandler:
    If Me.Delete0.Value = "" Then
        MsgBox "Unknown ID number. Unable to delete without ID", _
        vbOKOnly Or vbInformation, "Insufficent data"
        Exit Sub
    End If
    
    If MsgBox("Deleting a record can not be reversed" _
    & vbCrLf & "do you want to proceed?", vbYesNo + vbCritical, "Confirm action") = vbNo Then Exit Sub
    
dbPath = "A:\Desktop\XXXXXXXXXX.accdb"

Set cnn = New ADODB.Connection

cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath

Set rs = New ADODB.Recordset
    
rs.Open "SELECT * FROM Access_Database " & _
    "WHERE ID = " & CLng(Me.Delete0), ActiveConnection:=cnn, _
    CursorType:=adOpenDynamic, LockType:=adLockOptimistic, _
    Options:=adCmdText

    If rs.EOF And rs.BOF Then
        rs.Close
        cnn.Close
        Set rs = Nothing
        Set cnn = Nothing
        Application.ScreenUpdating = True
        MsgBox "The record isn't found. Process canceled.", vbCritical, "No Records"
        Exit Sub
    End If
'Hier vindt het verwijderen plaats. Eigenlijk zou ik willen dat eerst rs gekopieerd wordt naar een andere tabel in dezelfde database (tabel: Access_database2) alvorens de record verwijderd wordt. 
rs.Delete

For x = 0 To 14
    Me.Controls("Delete" & x).Value = ""
Next

rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing

Application.ScreenUpdating = True
ImportFromAccess
Me.lstDataFromAccess.RowSource = "DataAccess"
MsgBox "Data has been deleted", vbInformation, "Deletion successful"

On Error GoTo 0
Exit Sub
errHandler:
'clear memory
Set rs = Nothing
Set cnn = Nothing
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure cmdDelete"

End Sub

De code staat geplaatst in een Userform in Excel.
Is het mogelijk om de record die verwijderd wordt eerst te kopiëren (of verplaatsen) naar een andere tabel (met dezelfde structuur) in dezelfde database?
Ik dacht zelf aan de insert into SQL statement maar ik weet niet of ik goed zit en hoe ik dat goed kan toepassen.
Is er iemand die mij hier mee verder zou kunnen helpen?

Wordt zeer gewaardeerd!
 
Je kunt op dezelfde manier een recordset openen en alle velden één-op-één vullen in dat nieuwe record. Mits de backup tabel exact dezelfde velden structuur heeft is dat met een simpele loop op basis van rs.Fields.Count makkelijk te doen.
 
Even een dummy voorbeeldje gemaakt:
Code:
    Set rs2 = New ADODB.Recordset
    rs2.Open "SELECT * FROM Access_Database2 "
    rs2.AddNew
    For i = 0 To rs.Fields.Count - 1
        rs2.Fields(i).Value = rs.Fields(i).Value
    Next i
    rs2.Update
    rs2.Close
    rs.Delete
 
@OctaFish de structuur is hetzelfde dus veld voor veld hoeft niet.
Als ik je goed begrijp moet ik RS.Open nog een keer laten uitvoeren ?
 
Het is gelukt!


Bedankt. Het zat hem dus gewoon in het opnieuw definieren van een recordset connectie.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan