Verversen data in een tabel

Status
Niet open voor verdere reacties.

patricw

Gebruiker
Lid geworden
27 mei 2009
Berichten
229
Beste allemaal,

Ik gebruik een excel file als input voor mijn database (de excel file wordt met data gevuld door externe partijen en mijzelf).

Nu heb ik een query die mijn bestaande, geimporteerde tabel vergelijkt met de gelinkte excel file en de records die zijn veranderd eruit haalt.

Deze veranderde records wil ik in de bestaande tabel zetten, dit kunnen dus nieuwe records zijn of bestaande die veranderd zijn (maar de primary key is niet veranderd uiteraard).

Met een append query lukt het me niet want bestaande records worden niet overschreven ivm de primary key.

Dus ik dacht dan delete ik eerst de records die veranderd zijn (op basis van de gevonden veranderde records) en voeg ze daarna weer toe.

En de delete actie krijg ik niet voor mekaar.

Hoe kan ik dus de veranderde records (gevonden met de find unmatched records query) in mijn bestaande tabel deleten?

Alvast dank,

groet, patric
 
Kun je niet beter een bijwerk query gebruiken voor de bestaande records? Of heb je dat al geprobeerd?

Michel
 
Code:
Dim Aantal_1 As Integer
Dim Aantal_2 As Integer

Dim ws As Workspace
Dim Db As Database
Dim strConnection As String

Dim rs1 As Recordset
Dim rs2 As Recordset

Private Sub Form_Close()
ws.Close
End Sub

Sub Form_Load()

Set ws = DBEngine.Workspaces(0)
Let strConnection = "ODBC;Description=Access_Crontroll;DRIVER=SQL Server;SERVER=TEST\WIN;APP=Microsoft Data Access Components;WSID=NBMHOB-001;DATABASE=werknemer_registratie"
Set Db = ws.OpenDatabase("", False, False, strConnection)
'verbinding is gelegt

Aantal_1 = 0
Me.TimerInterval = 2500


End Sub


Sub Form_Timer()
        Dim stDocName As String
                stDocName = "Live_scherm"
        
Aantal_2 = 0
Set rs2 = Db.OpenRecordset("SELECT Tijd FROM server_gegevens")
Do While Not rs2.EOF
Aantal_2 = Aantal_2 + 1
  rs2.MoveNext
Loop

If Aantal_1 <> Aantal_2 Then
Aantal_1 = Aantal_2
DoCmd.ShowAllRecords
End If

rs2.Close
Set rs2 = Nothing

If Format(Now(), "HH:mm:ss") = "12:15:30" Then
DoCmd.Close

DoCmd.OpenForm stDocName
End If

End Sub
 
Laatst bewerkt:
Als in een bijwerk (update) query gebruik kan ik dan velden aanwijzen die bijgewerkt moeten worden met waarden uit mijn find unmatched query resultaat? Dat had ik namelijk ook bedacht, maar kon niet zo vinden of dat gaat.
 
Dat is geen enkel probleem; zal zelfs moeten! Je moet namelijk aangeven welk veld in welk veld moet worden gewijzigd. Access zal overigens velden die dezelfde naam hebben al gelijk voor je selecteren, dus het kan zinvol zijn, als je dit vaak moet doen, om de veldnamen in de verschillende tabellen/excel bestanden gelijk te houden.

Mocht je hier hulp bij nodig hebben, kun je dan een voorbeeldje posten?

Michel
 
Het is me gelukt met de update query, moest alleen zelf nog in het "update to" veld de find unmatched query invullen. Dat kun je niet kiezen uit een lijstje, blijkbaar.

Maar nu zijn er behalve veranderde records ook nieuwe, en die worden in de update niet meegnomen. Hoe los ik dit dan op? Via de join lukt dit niet want het primary key veld staat nog niet in de doel tabel.


Thnx! :thumb:

P.S. Het wordt een database met 6 tabellen (6 excel tabbladen) waarbij de excel file eens per week met Japan wordt uitgewisseld. Dus een stukje automatisering is hier wel gewenst :D
 
Laatst bewerkt:
Dat wordt een Toevoegquery, waarbij je een criterium moet gebruiken om te voorkomen dat een record tweemaal wordt toegevoegd.
Het criterium ziet er ongeveer zo uit:

WHERE (T_Klant_Temp.[K_ID] Not In (SELECT [K_ID] FROM T_Klant));

Vertaling: selecteer uit de tijdelijke tabel alle klanten op basis van K_ID die niet in de tabel T_Klant zitten.

Een toevoegquery kan overigens niet lekker uit de voeten met autonummervelden, gesteld dat je die gebruikt als ID. Maar die zul je denk ik niet hebben in de geïmporteerde tabellen.

Dus: een bijwerkquery gebruiken voor bestaande records, gekoppeld op KlantID, en een toevoegquery voor nieuwe records, waarbij je de bestaande KlantID's uitsluit met een criterium!

Michel
 
Klopt, zover was ik ook. Ik heb een append query ook op basis van mijn find unmatched query, dan krijg ik ook geen dubbele invoer. Wordt trouwens toch niet toegestaan door de primary key die ik gedefinieerd heb.


Bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan