Avatar billede Voyager57 Nybegynder
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
Avatar billede supertekst Ekspert
18. april 2011 - 10:35 #1
Hvordan viser "problemet" sig?
Avatar billede Voyager57 Nybegynder
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.
Avatar billede madiedk Nybegynder
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
Avatar billede madiedk Nybegynder
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.
Avatar billede Voyager57 Nybegynder
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 :-)
Avatar billede Voyager57 Nybegynder
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 :-)
Avatar billede madiedk Nybegynder
18. april 2011 - 12:16 #7
Svar

det var godt, tak.
Avatar billede Voyager57 Nybegynder
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 ?
Avatar billede madiedk Nybegynder
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.
Avatar billede Voyager57 Nybegynder
20. april 2011 - 10:34 #10
Tak for info :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester