in excel record verwijderen deze oprdacht ook in access uitvoeren.

Status
Niet open voor verdere reacties.

Peer44

Gebruiker
Lid geworden
25 jan 2008
Berichten
224
Hallo,

Dagelijks wordt een excelbestand (productieplanning) gekopieerd en hernoemd naar de datum van de productiedag.
deze productieplanning wordt weggeschreven naar een Access database, deze is gekoppeld aan labelsoftware.

wanneer er nu op de productieplanning in excel een record wordt verwijderd gebeurd dit niet in access, hier worden alleen de nieuwe waarde weggeschreven.

hoe kan ik ervoor zorgen dat als ik in excel een productieorder verwijder dit ook in access gebeurd?

voor de gegevens weg te schrijven naar access gebruik ik onderstaande code:
Code:
Option Explicit

Sub DB_Insert_via_ADOSQL()
'Author       : Ken Puls (www.excelguru.ca)
'Macro purpose: To add record to Access database using ADO and SQL
'NOTE:  Reference to Microsoft ActiveX Data Objects Libary required

    Dim cnt As New ADODB.Connection, _
            rst As New ADODB.Recordset, _
            dbPath As String, _
            tblName As String, _
            rngColHeads As Range, _
            rngTblRcds As Range, _
            colHead As String, _
            rcdDetail As String, _
            ch As Integer, _
            cl As Integer, _
            notNull As Boolean

    Blad12.Activate
    'Set the string to the path of your database as defined on the worksheet
    dbPath = "Y:\labels\labels gekoppeld aan database voor etiketeermachine\Databestanden\Database bestand Access\Backend\productieplanning DB.accdb"
    tblName = "productieplanning"
    Set rngColHeads = ActiveSheet.Range("tblHeadings")
    Set rngTblRcds = ActiveSheet.Range("tblRecords")

    'Concatenate a string with the names of the column headings
    colHead = " ("
    For ch = 1 To rngColHeads.Count
        colHead = colHead & rngColHeads.Columns(ch).Value
        Select Case ch
            Case Is = rngColHeads.Count
                colHead = colHead & ")"
            Case Else
                colHead = colHead & ","
        End Select
    Next ch

    'Open connection to the database
    cnt.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & dbPath & ";"

    'Begin transaction processing
    On Error GoTo EndUpdate
    cnt.BeginTrans

    'Insert records into database from worksheet table
    For cl = 1 To rngTblRcds.Rows.Count

        'Assume record is completely Null, and open record string for concatenation
        notNull = False
        rcdDetail = "('"

        'Evaluate field in the record
        For ch = 1 To rngColHeads.Count
            Select Case rngTblRcds.Rows(cl).Columns(ch).Value
                    'if empty, append value of null to string
                Case Is = Empty
                    Select Case ch
                        Case Is = rngColHeads.Count
                            rcdDetail = Left(rcdDetail, Len(rcdDetail) - 1) & "NULL)"
                        Case Else
                            rcdDetail = Left(rcdDetail, Len(rcdDetail) - 1) & "NULL,'"
                    End Select

                    'if not empty, set notNull to true, and append value to string
                Case Else
                    notNull = True
                    Select Case ch
                        Case Is = rngColHeads.Count
                            rcdDetail = rcdDetail & rngTblRcds.Rows(cl).Columns(ch).Value & "')"
                        Case Else
                            rcdDetail = rcdDetail & rngTblRcds.Rows(cl).Columns(ch).Value & "','"
                    End Select
            End Select
        Next ch

        'If record consists of only Null values, do not insert it to table, otherwise
        'insert the record
        Select Case notNull
            Case Is = True
                rst.Open "INSERT INTO " & tblName & colHead & " VALUES " & rcdDetail, cnt
            Case Is = False
                'do not insert record
        End Select
    Next cl

EndUpdate:
    'Check if error was encounted
    If Err.Number <> 0 Then
        'Error encountered.  Rollback transaction and inform user
        On Error Resume Next
        cnt.RollbackTrans
        MsgBox "Er is iets misgegaan  Database niet bijgewerkt! controleer of er nergens geen ### staan, dit eerst oplossen", vbCritical, "Error!"
    Else
        On Error Resume Next
        cnt.CommitTrans
    End If

    'Close the ADO objects
    cnt.Close
    Set rst = Nothing
    Set cnt = Nothing
    On Error GoTo 0
    
        'database wordt geopend, zit autorun macro in die de dubbele waarde verwijderd.
        With GetObject("Y:\labels\labels gekoppeld aan database voor etiketeermachine\Databestanden\Database bestand Access\Backend\productieplanning DB.accdb")
     
         End With
  
Blad11.Activate

End Sub
 
Access zou leading moeten zijn voor je Excel systeem, en niet andersom. Dus eigenlijk zou je records moeten beheren in Access, en m.b.v. een query-koppeling je gegevens in Excel verder bekijken. De manier waarop je records toevoegt zal wel werken, maar is ook bepaald niet optimaal.

Een oplossing zou kunnen zijn dat je in je Access database een koppeling naar het Excel bestand maakt (als de Mohammed niet naar de berg komt....) en middels een verwijderquery de ontbrekende waarden verwijdert. Die query kun je dan ook in je AutoExec macro laten draaien.
 
Ben het eens dat Access leading zou moeten zijn, als ik nog eens veel tijd heb wil ik alles gaan omzetten....

de koppeling leggen naar excel vanuit access zal vrees ik niet gaan werken omdat voor iedere dag een nieuwe document wordt aangemaakt.
de verwijderquery gebruik ik wel al via een autoexec. om duplicaten te verwijderen.
 
Ik heb me nog een keer op dit vraagstuk gestort en heb een theoretische oplossing

vanuit excel worden de gegevens weggeschreven naar de accesstabel, het excel document is altijd voor 1 dag.
om te zorgen dat ik in access altijd de actuele data heb moet ik voordat de data wordt weggeschreven eerst alles wissen in de database met de productiedatum van de gegevens die ik weg ga schrijven.

bijvoorbeeld ik ga 20 regels wegschrijven met productiedatum 24-10-2012,
eerst moet in de database alles worden verwijderd met productiedatum 24-10-2012 daarna kunnen de 20 regels worden toegevoegd.

hoe kan ik dit technisch oplossen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan