28. januar 2004 - 08:36Der er
22 kommentarer og 4 løsninger
Opdatering af Access DB fra Excel
Hej
Jeg har et Excel regneark med følgende data:
Dato Medarbejdernr Navn opgaveart1 (antal færdige) opgaveart2 (do) opgaveart3 (do) opgaveart4 (do)
Jeg har oprettet en tilsvarende Access DB som ligger på et fællesdrev og denne ønsker jeg opdateret. Opdatering skal kunne gøres fra Excel-arket, ved at brugeren trykker på knappen "opdater database"
Hej Terry Jeg kopieret koden i første eksempel og rettet den til efter min egen database. Jeg får fejlen "compile error: user type not defined" her er min kode:
* * * start kode * * *
Private Sub CommandButton4_Click()
On Error GoTo Err_commandbutton4_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:\temp\statistik.mdb") 'åbn kanal til tabellen tabelstatistik Set rs = db.OpenRecordset(Name:="tabelstatistik", Type:=dbOpenDynaset) 'indsæt With rs If Range("e3").Value = "x" Then .AddNew .Fields![dato] = Range("b4").Value .Fields![ugenr] = Range("a7").Value .Fields![medarbejderNavn] = Range("b7").Value .Update
what line of code is giving the problem? You may need a reference to DAO (Microsoft DAO 3.X) ro something like that. Not sure how you do that in Excel!
Det havde jeg ikke, men har tilføjet det nu (Microsoft 2.5/3.5 Compatability Lib.) Nu får jeg en anden fejl (det bliver sjovere og sjovere) : Run-time error '3343': Databaseformatet "c:\temp\statistik.mdb" kan ikke genkendes
I dont know much about Excel but if you have an access 2000 dB then I think you will need DAO 3.6! So you may need to update! You will need to download a newer version of MDAC from Microsoft.
Sub HENFraExcelTilAccess() ' eksporter data fra det aktive worksheet til en tabel i en Access database
Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long 'Husk at sætte en referece til ADO objectet under funktioner: 'Microsoft ActiveX Data Objects 2.5 Object Library.
' Lav en forbindelse til Access databasen Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _ "Data Source=G:\INGRISKM\5-Egne-udviklede-Programmer\tarifdata\tarif_data.mdb;" ' Åben et recordset Set rs = New ADODB.Recordset rs.Open "tbltest", cn, adOpenKeyset, adLockOptimistic, adCmdTable ' alle records i en tabel
'eksempel på brug r = 3 ' start række i et worksheet Do While Len(Range("A" & r).Formula) > 0 ' Fosæt indtil første tomme celle i kolonne A With rs .AddNew ' tilføj ny record ' tilføj værdier til hvert felt i recorden .Fields("felt1") = Range("A" & r).Value .Fields("felt2") = Range("B" & r).Value .Fields("felt3") = Range("C" & r).Value ' tilpas til aktuel tabel .Update ' gen den nye record End With r = r + 1 ' næste række Loop rs.Close ' luk skidtet Set rs = Nothing cn.Close ' også her Set cn = Nothing ' slut prut finale End Sub
with rs .open "tbl where ID = xxx" ...... if .eof .addnew .fields("ID") = range("B7").value end if .fields("Dato") = range("b4").value .fields("ugenr") = range("a7").value .... .update .close end with ....
Undskyld hnteknik, men jeg er altså en newbie hvad VBA angår, nedenfor ser du min kode som du,terry mfl. har hjulpet mig frem til. Som den er nu, får jeg lagt værdien af celle B7 over i tabellen som den skal. Hvordan får jeg rettet til med dit sidste indlæg? jeg forstår ikke helt ".open "tbl where ID =xxx"
* * * Code start * * *
Private Sub CommandButton4_Click() ' exports data from the active worksheet to a table in an Access database ' this procedure must be edited before use Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long ' connect to the Access database Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _ "Data Source=C:\temp\kvaks_statistik.mdb;" ' open a recordset Set rs = New ADODB.Recordset rs.Open "tabelstatistik", cn, adOpenKeyset, adLockOptimistic, adCmdTable
' Denne henter medarbejdernavn r = 7 ' the start row in the worksheet Do While Len(Range("B" & r).Formula) > 0 ' repeat until first empty cell in column B With rs .AddNew ' create a new record ' add values to each field in the record .Fields("medarbejdernavn") = Range("B" & r).Value ' add more fields if necessary... .Update ' stores the new record End With r = r + 1 ' next row Loop
rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub
Glem det for .... r next er kun et eksempel Jeg går ud fra at din tabel har en nøgleID som enten skal rettes eller oprettes. Hvis du søger på nøglen og intet finder noget .eof, så må du oprette en ny .add new
' Lav en forbindelse til Access databasen Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _ "Data Source=" & DataSti & ";" ' Åben et recordset Set rs = New ADODB.Recordset rs.Open "tblxxx where RSnr = '" & RSnr & "'", cn, adOpenKeyset, adLockOptimistic, adCmdTable ' alle records i en tabel
With rs If .EOF Then .AddNew ' tilføj ny record .Fields("RSnr") = RSnr ' dette er typisk nøglefeltet End If
End With rs.Close ' luk skidtet Set rs = Nothing cn.Close ' også her Set cn = Nothing ' slut prut finale
de forskellige variable er bare nogle range values: Range("L44").Value, _ Range("L56").Value, _ Range("L70").Value, _ Range("L76").Value, _ Range("L105").Value, _
Hej Jeg var for hurtig ude, det virker ikke alligevel, jeg forsøger at opdatere min database med medarbejdernavn fra celle B7 og dato fra celle b4, men får en run-time error om at der ikke er angivet nogen værdi for en eller flere krævede parametre, se min kode, hvad har jeg gjort forkert :-(
Private Sub knapTestOpdater_Click() ' Lav en forbindelse til Access databasen Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _ "Data Source=C:\temp\kvaks_statistik.mdb;" ' Åben et recordset Set rs = New ADODB.Recordset rs.Open "tabelstatistik where RSnr = '" & RSnr & "'", cn, adOpenKeyset, adLockOptimistic, adCmdTable ' alle records i en tabel
With rs If .EOF Then .AddNew ' tilføj ny record .Fields("ID") = ID ' dette er typisk nøglefeltet End If
' tilføj værdier til hvert felt i recorden .Fields("medarbejdernavn") = Range("B7").Value .Fields("dato") = Range("b4").Value
' tilpas til aktuel tabel .Update ' gem den nye record
End With rs.Close ' luk skidtet Set rs = Nothing cn.Close ' også her Set cn = Nothing ' slut prut finale
Du skal tilrette din funktion, så alle poster i databasen får en værdi. Mit gæt er, at du ikke har tilrettet den kode, jeg har lagt ind efter din tabel:
Fejlkilder her:
.Fields("ID") = ID --> ID er ikke defineret hos dig tabelstatistik where RSnr = '" & RSnr --> RSnr er ikke defineret hos dig. hvis du skal have en ny værdi hver gang så er følgende nok:
rs.Open "tabelstatistik", cn, adOpenKeyset, adLockOptimistic, adCmdTable .... .AddNew ' tilføj ny record .... .Fields("medarbejdernavn") = Range("B7").Value .Fields("dato") = Range("b4").Value .Fields("ugenr") = range("a7").value ..... Henrik
Jeg fornemmer, at du ikke er helt stiv i vb programmering, så her er et testeks.: Sub test()
Datasti = "C:\temp\test.mdb" ' Lav en forbindelse til Access databasen Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _ "Data Source=" & Datasti & ";" ' Åben et recordset Set rs = New ADODB.Recordset rs.Open "tblstat", cn, adOpenKeyset, adLockOptimistic, adCmdTable ' alle records i en tabel
With rs
.AddNew ' tilføj ny record
' tilføj værdier til hvert felt i recorden .Fields("medarbejdernavn") = Range("B7").Value .Fields("dato") = Range("b4").Value .Fields("ugenr") = Range("a7").Value
' tilpas til aktuel tabel .Update ' gem den nye record
End With rs.Close ' luk skidtet Set rs = Nothing cn.Close ' også her Set cn = Nothing ' slut prut finale
End Sub
data overført er :
medarbejdernavn dato ugenr henrik nielsen 01-01-2004 47 Søren spætte 09-01-2004 34
Hej hnteknik Du har ret jeg er total newbie hvad angår VB, men jeg har masser af visioner og en chef der belønner gode ideer :-) Så jeg er glad for at der er et forum som dette. Endnu en gang tak. Mit næste projekt er at få tilføjet et "er du sikker?" til min "opdater database" knap
Synes godt om
Ny brugerNybegynder
Din løsning...
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.