06. oktober 2003 - 13:09Der er
22 kommentarer og 1 løsning
Opdatere ACSESS tabel fra EXCEL
Hej igen,
Jeg stillede spørgsmålet tidligere..prøvede nogle af de løsningsforslag der kom, men jeg kan ikke få det rigtigt til at virke.
Mit probelem !
Jeg har et excel regneark som bruger skal udfylde, dataerne skal så automatisk overføres til access via et script. Når det er en kursist som oprettes er der ingen problemer. MEN hvis jeg vil opdatere kursistdata fra excel, så siger den, at den ikke kan opdatere, pga. dubletter.
Min nøgle i access tabellen er "fdato", den er sat til at være indexseret og tillade dubletter. scriptet som jeg bruge i excel ser sådan ud:
Hvordan kan jeg programmere det, således at tabellen i access bliver opdateret med de rigtige data fra excel??
Private Sub CommandButton1_Click() On Error GoTo Err_commandbutton1_Click
Dim stAppName As String Dim db As Database Dim rs As Recordset Dim rs1 As Recordset mydate = Date 'Åbn et link til accessdatabasen Set db = OpenDatabase("C:\kursistadm\data.mdb") 'åbn kanal til tabellen testtabellen Set rs = db.OpenRecordset(Name:="bruger", Type:=dbOpenDynaset) 'indsæt With rs If Range("C4").Value = "x" Then .AddNew .Fields![Fornavn] = Range("H10").Value .Fields![efternavn] = Range("Z10").Value .Fields![brugerident] = Range("AW19").Value .Fields![arbssted] = Range("J16").Value .Fields![Fdato] = Range("J8").Value .Update
End If
If Range("C5").Value = "x" Then .Edit .Fields![Fornavn] = Range("H10").Value .Fields![efternavn] = Range("Z10").Value .Fields![brugerident] = Range("AW19").Value .Fields![Fdato] = Range("J8").Value .Update
Din nøgle i Access må vel ikke tillade dubletter. Hvis der er to eller flere med samme fødslesdato i Access tabellen, ved den ikke hvilken af dem det er, der skal opdateres.
Hvis jeg laver fdato om til en entydig nøgle ?, har du en ide hvordan jeg så får access til at finde den bestemte post, og give mig lov til at rette i oplysningerne?
Looking at the fields I would guess that "brugerident" is the primary key in the table "bruger". If that is correct then you first need to check IF that user alreday exists. You could maybe do this something like this.
SET rs1 = db.OpenRecordset "SELECT Count(*) as cnt from bruger where brugerident = " & Range("AW19").Value
If rs!cnt = 0 Then
'ADD record
Else 'Update record Endif
NOTE>This is only to give you an idea, I have NOT checked a thing!
Hvis FDATO er entydig kan den direkte opdatere som den er. Hvis du har/laver et andet entydigt felt, skal det selvfølgelig tilføjses til opdateringskoden.
len-> FDATO kan pr. definition ikke være primærnøgle, hvis den ikke er entydig. Det er nemlig et krav til en primærnøgle. Derimod kan den godt være indekseret.
terry->det vil jeg prøve. har du en programkode der checker om nøglem findes i forvejen og hvis den gør det - updatere data. Det vil være en megahjælp.
Your problem here is that although you are selecting from a table (arbssted) which contains the fields fornav, stilling, arbssted, fdato and efternavn. Then uou are only getting ONE field in the recordset (rs3)! This is because you are selcting count(*) (cnt). If you selected only some of the fields from the table then it is only these fields you can update/add.
So you need to use two recordsets, one for count and then another for the actual update/add.
Jeg tro jeg har løst det. Fandt noget herinde som jeg byggede videre på.
If Range("Q5").Value = "x" Then rs.MoveFirst Max = rs.RecordCount For i = 1 To Max If rs("fdato") = Range("J8").Value Then MsgBox "Vil du opdatere oplysningerne i databasen!", vbOKOnly rs.Edit rs("Fornavn") = Range("H10").Value rs("Efternavn") = Range("Z10").Value rs.Update End If rs.MoveNext Next i End If
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.