18. april 2011 - 09:50
Der er
9 kommentarer og 1 løsning
VBA Excel og Database.
Ja, så er den gal igen. Kan nogen se hvad der går galt i denne makro: Hjælp og forslag modtages med takhånd. :-) Public Sub Hent_Fakturanum_Valg() ' Declares variabels Dim Sheetname As String Dim Betalt As Boolean Dim Fakturanummer As integer Dim cn As ADODB.Connection, rs As ADODB.Recordset ' Uses actual sheet for the data Sheetname = ActiveSheet.Name 'Searches for "fakturanummer" If Fakturanummer = 0 Then Exit Sub ' Fakturanummer comes from the form "FakturaBetalinger" ' Opens the database Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\faktura_Salg\fakturaer.mdb;" ' Opens the recordset. Set rs = CreateObject("ADODB.Recordset") ' Ask the user if he is sure to make the change to the database Answer = MsgBox("Are you sure?", vbOKCancel) If Answer = vbCancel Then Exit Sub ' Searches in the database, for selected "fakturanummer" strSQL = "SELECT * From Betaling WHERE ((Betaling.FakturaNr) like 'Fakturanummer');" rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic, adCmdText ' Uses the found record from Fakturaer.mdb table "Betaling", and changes boolean value ' in Database colum "Betalt" From not paid to paid. With rs .Fields("Betalt") = -1 .Update End With ' Ends and closes the recordset, and the connection. rs.Close Set rs = Nothing cn.Close Set cn = Nothing ' Stays on current sheet. Set CurrentChart = Sheets(Sheetname) Sheets(Sheetname).Select End Sub
Annonceindlæg fra HP
18. april 2011 - 10:35
#1
Hvordan viser "problemet" sig?
18. april 2011 - 10:46
#2
Hej "Supertekst", jo ser du, jeg får fejlmeddelse Either BOF or EOF o.s.v. og er endvidere ikke sikker på formatet, når jeg ønsker at opdatere i databasen. Ved ikke om forespørgslen mister scope, elelr hvad der reelt sker, men har forsøgt at sætte en MsgBox (Fakturanummer) og den returnerer korrekt værdi, før forespørgslen, har ikke testet efter, da der jo komemr fejl der.
18. april 2011 - 10:57
#3
et hurtigt bud er at den læser fakturenummer som tekst og ikke som den variabel som du gerne vil have. prøv at skrive "SELECT * From Betaling WHERE ((Betaling.FakturaNr) like " & Fakturanummer & ");" istedet
18. april 2011 - 10:58
#4
du kan jo prøve at msgbox din sql inden den sender til databasen og se om den ser korrekt ud.
18. april 2011 - 11:06
#5
Hej madiedk kommer jo an på om access 'ser' yes/no værdien som tekst eller tal ? men prøver selvfølgelig. okay med msgbox den må prøves :-)
18. april 2011 - 11:17
#6
Hej igen Madiedk Denne streng gjorde det : "SELECT * From Betaling WHERE ((Betaling.FakturaNr) like '" & Fakturanummer & "');" Det var MsgBox (strSql), (Fakturanummer) der "røbede" fejlen Tak for hjælp, nu virker den. Indsætter lige makroen for hjælp til andre: Public Sub Hent_Fakturanum_Valg() ' Declares variabels Dim Sheetname As String Dim Betalt As Boolean Dim Fakturanummer As integer Dim cn As ADODB.Connection, rs As ADODB.Recordset ' Uses actual sheet for the data Sheetname = ActiveSheet.Name 'Searches for "fakturanummer" If Fakturanummer = 0 Then Exit Sub ' Fakturanummer comes from the form "FakturaBetalinger" ' Opens the database Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\faktura_Salg\fakturaer.mdb;" ' Opens the recordset. Set rs = CreateObject("ADODB.Recordset") ' Ask the user if he is sure to make the change to the database Answer = MsgBox("Are you sure?", vbOKCancel) If Answer = vbCancel Then Exit Sub ' Searches in the database, after "fakturanummer" strSQL = "SELECT * From Betaling WHERE ((Betaling.FakturaNr) like '" & Fakturanummer & "');" rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic, adCmdText ' Uses the found record from Fakturaer.mdb table "Betaling", and changes boolean value ' in Database colum "Betalt" From not paid to paid. With rs .Fields("Betalt") = -1 .Update End With ' Ends and closes the recordset, and the connection. rs.Close Set rs = Nothing cn.Close Set cn = Nothing ' Stays on current sheet. Set CurrentChart = Sheets(Sheetname) Sheets(Sheetname).Select End Sub Madiedk, læg et svar, så får du point :-)
18. april 2011 - 12:16
#7
Svar det var godt, tak.
18. april 2011 - 12:21
#8
Jeg accepterer, men har kun et kort spørgsmål på falderebet, håber du kan hjælpe. Jeg får kun lov til at gøre det een gang, anden gang er tabellen skrivebeskyttet. hvis jeg forlader excel og starter op igen, kan jeg gøre det igen kun 1 gang. Virker som om databasen ikke lukkes ordentligt eller ?
19. april 2011 - 19:38
#9
lav det som en transaktion. med "begintrans" og "committrans" på database forbindelse. bare google det der er masser eksempler.
20. april 2011 - 10:34
#10
Tak for info :-)
Kurser inden for grundlæggende programmering