12. september 2004 - 20:04Der er
47 kommentarer og 1 løsning
Opdatere hentede data fra Access
Hej
Jeg har i Excel kontrueret en userform der henter data fra en Access-database når den initieres. Der ved kan jeg se hvilke data der mangler at blive udfyldt. Herefter vil jeg gerne opdatere ændringerne (textbox, combobox, checkbox) eller det udfyldte. Jeg har forsøgt at anvende insert into men den går ikke idet der derved bliver dubletter af "Nøglen" - HCV. Hvordan gøres det? Jeg har også forsøgt med UPDATE - uden succes :0(
Følgende kode eksekveres når man trykker på knappen (gem): (Den fungerer selvfølgelig ikke)
Private Sub CommandButton2_Click()
Dim HCVno As String
Application.ScreenUpdating = False
With ActiveWorkbook.Sheets("Ark1") HCVno = ActiveCell.Value End With
Dim conn As ADODB.Connection Set conn = New ADODB.Connection conn.Provider = "Microsoft.Jet.OLEDB.4.0" Dim Rs As Recordset
Hej bak Tak fordi du gad kigge på det. Jeg har faktisk prøvet updat men jeg fik hele tiden en meddelelse om at den funktion ikke understøttes (i min connectionstring). Jeg er spændt på at prøve dette men må desværre først passe mit arbejde - jeg tror der bliver tid sidst på formiddagen :0) vh teen
ADOConnection.Execute RecordsAffected:=lRecordsAffected, Options:=adCmdText Or adExecuteNoRecords ' Check for errors. Only one record should have been affected. If lRecordsAffected <> 1 Then Err.Raise Number:=vbObjectError + 1024, _ Description:="Error executing UPDATE statement."
rsData.Close Set rsData = Nothing
Dim ctl As Control For Each ctl In Me.Controls If TypeName(ctl) = "TextBox" Then ctl = "" Next
ja, det forstår jeg godt... Jeg har alt for meget gammelt snask med :-)
Private Sub CommandButton2_Click() Dim objCommand As ADODB.Command Dim lRecordsAffected As Long Dim szConnect As String lRecordsAffected = 1 szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=d:\database\HCV.mdb;" objCommand.ActiveConnection = szConnect objCommand.CommandText = "UPDATE [Kartotek 2003] SET([Årstal] =" & TxtÅrstal & ", [Henvist] =" & TxtHenvist & ", [Angina] =" & ComboBox6 & " WHERE [HCV] =" & TxtHCV & ";"
objCommand.Execute Recordsaffected:=lRecordsAffected, Options:=adCmdText Or adExecuteNoRecords ' Check for errors. Only one record should have been affected. If lRecordsAffected <> 1 Then Err.Raise Number:=vbObjectError + 1024, _ Description:="Error executing UPDATE statement."
Dim ctl As Control For Each ctl In Me.Controls If TypeName(ctl) = "TextBox" Then ctl = "" Next End Sub
Hej igen Jeg får følgende Run-time error: Datatyperne stemmer ikke overens i kriterieudtrykket. Gul ved: ObjCommand.Execute.
Her er hele koden for at være sikker på at jeg har gjort det rigtigt:
Private Sub CommandButton2_Click() 'Dim objCommand As ADODB.Command Dim objCommand As New ADODB.Command Dim lRecordsAffected As Long Dim szConnect As String lRecordsAffected = 1 szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=d:\database\HCV.mdb;" objCommand.ActiveConnection = szConnect objCommand.CommandText = "UPDATE [HCV præ-per] SET [Årstal] =" & TxtÅrstal & ", [Henvist] =" & TxtHenvist & " WHERE [HCV] =" & TxtHCV & ";"
objCommand.Execute RecordsAffected:=lRecordsAffected, Options:=adCmdText Or adExecuteNoRecords ' Check for errors. Only one record should have been affected. If lRecordsAffected <> 1 Then Err.Raise Number:=vbObjectError + 1024, _ Description:="Error executing UPDATE statement."
Dim ctl As Control For Each ctl In Me.Controls If TypeName(ctl) = "TextBox" Then ctl = "" Next End Sub
bak ...kan du overskue hvorfor den igen skriver st der er en syntaksfejl i UPDATE-sætningen (ADVARSEL den er ekstrem lang) vh Steen
Private Sub CommandButton2_Click() 'Dim objCommand As ADODB.Command Dim objCommand As New ADODB.Command Dim lRecordsAffected As Long Dim szConnect As String lRecordsAffected = 1 szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=d:\database\HCV.mdb;" objCommand.ActiveConnection = szConnect
objCommand.Execute RecordsAffected:=lRecordsAffected, Options:=adCmdText Or adExecuteNoRecords ' Check for errors. Only one record should have been affected. If lRecordsAffected <> 1 Then Err.Raise Number:=vbObjectError + 1024, _ Description:="Error executing UPDATE statement."
Dim ctl As Control For Each ctl In Me.Controls If TypeName(ctl) = "TextBox" Then ctl = "" Next End Sub
umiddelbart kan jeg ikke se en fejl, men der kan jo være et felt der er stavet forkert eller et komma der mangler. der skal jo ikke meget til i en sql-sætning. Jeg kender ikke størrelsesbgrænsningen af en sql-sætning men du er jo oppe på en 14-1500 karakterer :-), Prøv at lave den som nedenstående så er det måske nemmere at se fejl.
Det var faktisk en rigtig god måde at gøre det på. Det andet bliver utrolig uoverskueligt. Jeg tror også at det med de kantede parenteser gør en forskel. Nu har jeg desværre den run-time error: At datatyperne ikke stemmer overens i kriterieudtrykket! Får det da ingen ende med fejlmulighederne. Jeg gik desværre kun på Matematisk linie i gymnasiet og da betød tegnsætningen ikke så meget men SQL kan da tage livet af enn vh Steen
At datatyperne ikke stemmer overens i kriterieudtrykket! Som den er sat op nu, forventer den alle alle felterne er tekst. Har du nogle der ikke er tekst i databasen (ja/nej, Tal, dato eller andet) ???
Nu lykkedes det vist dog fortæller den at feltet: "Andre sygdomme" ikke må indeholde værdien nul. Kan det ændret for det skal være muligt IKKE at udfylde alle felter.
Hov og lige en anden ting (undskyld de mange spørgmål - du må sige til hvis det kniber med tiden og tålmodigheden): Ved Comboboxe: skriver den IKKE værdien men kun det valgte nummer 0,1,2 etc
Shit min skyld (igen). I access var databasen sat til ikke at acceptere nulværdier i de omtalte felter - UNDSKYLD! Ryger?? Pas nu på at du ikke en dag ender her hos os (selvom vi da er nogle rare personer og bedre til at behandle kirurgiske hjertesygdomme end til at programmere) ;0) Men igen tusinde tak for hjælpen - som sædvanligt en uovertrufen hjælp vh Steen
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.