Avatar billede Voyager57 Nybegynder
23. april 2011 - 16:41 Der er 5 kommentarer og
1 løsning

Kan kun skrive ændring i database 1 gang.

Hej med jer experter :-)

Kan nogen sige mig hvad der går galt i denne subroutine?
Den virker perfekt men kun 1 gang, når brugeren vælger et nyt fakturanummer, er databasen skrivebeskyttet. Jeg er tabt på denne, og en anden bruger har foreslået noget med "begintrans" og "committrans" har googlet det, og kan ikke få puslespillet til at gå op. Nogen med lysten til at kigge på det ?

Meget gerne med forslag til ny programkode.

Her er min kode:

Public Sub Hent_Fakturanum_Valg()


' Deklarerer variabler

    Dim Sheetname As String
    Dim Conn As ADODB.Connection
    Dim Rst As ADODB.Recordset
   
    On Error GoTo Errorhandler
   
    ' Bruger det aktuelle Ark til dataene
   
    Sheetname = ActiveSheet.Name
   
    If Fakturanummer = 0 Then Exit Sub

    ' Fakturanummer kommer fra Formularen "FakturaBetalinger"
   
    ' Spørger brugeren om han er sikker på sit valg.
   
    Answer = MsgBox("Er du sikker på, at du vil sætte fakturanummer " & Fakturanummer & " som ""Betalt""?", vbOKCancel)
    If Answer = vbCancel Then Exit Sub

    ' Åbner database
   
    Set Conn = New ADODB.Connection
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\faktura_Salg\fakturaer.mdb;"

    Set Rst = CreateObject("ADODB.Recordset")
   
    ' Søger i database, efter det valgte fakturanummer fra formularen
   
    strsql = "SELECT * From Betaling WHERE ((Betaling.FakturaNr) like '" & Fakturanummer & "');"
   
    Rst.Open strsql, Conn, adOpenKeyset, adLockOptimistic, adCmdText
   
    ' Finder første macth.

    Rst.MoveFirst

    ' Sætter match som værende betalt 

    With Rst
   
      .Fields("Betalt") = -1
      .Update
   
    End With

    ' Afslutter og lukker database og recordset
   
    Rst.Close
    Set Rst = Nothing
    Conn.Close
    Set Conn = Nothing


    Set CurrentChart = Sheets(Sheetname)
    Sheets(Sheetname).Select


ExitHere:
    Set Conn = Nothing

    Exit Sub
   
Errorhandler:
    MsgBox Err.Description
    Resume ExitHere
   
End Sub



Mange hilsener
Voyager
Avatar billede kjulius Novice
24. april 2011 - 18:07 #1
Dette er kun et skud i tågen, men er der en primary key på tabellen? For at kunne opdatere en tabel skal man kunne identificere en enkelt record entydigt. I de fleste databaser sikres dette ved at bruge den primære nøgle. I dit tilfælde kunne det være enten et autonummeret Id felt (som Access automatisk foreslår), men det kunne f.eks. også være dit faktura-nummer felt, hvis det er entydigt.
Avatar billede Voyager57 Nybegynder
24. april 2011 - 18:15 #2
Hej Kjulius.

Ja, der er primary key på Fakturanummeret, som er entydigt i tabellen. altså ingen dubletter tilladt... Er ellers et godt skud :-)
Avatar billede kjulius Novice
24. april 2011 - 21:46 #3
Endnu et skud i tågen:

Prøv at indsætte et

Conn.Mode = 3    '3 = adModeReadWrite

før din Conn.Open
Avatar billede Voyager57 Nybegynder
24. april 2011 - 23:17 #4
Hej igen Kjulius.

Nej, den gjorde det ikke, desværre ellers også et rigtigt godt skud :-)

Har endda prøvet at lave den efter Conn.Open
Avatar billede Voyager57 Nybegynder
24. april 2011 - 23:33 #5
Har lige opdaget følgende ;

Så længe jeg IKKE opdaterer tabellerne på mit regneark med denn makro, kan jeg blive ved med at ændre, altså ingen "enkeltskud".

Denne makro gør eet eller andet så tabeller er skrivebeskyttet:
(Bliver kaldt med en knap).


Sub Opdater_Tabeller()

    ActiveWorkbook.RefreshAll
'
End Sub
Avatar billede Voyager57 Nybegynder
26. april 2011 - 11:41 #6
Problemet løst.

Løsningen er at manuelt overføre data fra tabeller, i stedet for at bruge den indbyggede funktion.
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