Avatar billede Voyager57 Nybegynder
16. januar 2011 - 18:27 Der er 10 kommentarer og
1 løsning

Kontrol af, om data er tilstede i Access database..

Hej med jer, jeg slås lige med et problem, som jeg håber i kan hjælpe med.

Jeg vil kontrollere en database, for om et fakturanummer allerede er i databasen, før jeg tillader skrivning til databasen.
Det er en ret simpel database, hvor nøglen er fakturanummer.
Jeg kan sagtens skrive til databasen, men ville gerne lave den kontrol, inden der skrives nye data i databasen.

Her er hvad jeg har:

Sub Makro1()
' Makro1 Makro
' Udskriver og laver '.PDF fil, samt skriver i database "fakturaer.mdb"

Dim vInput
Dim bTal As Boolean
' Eksporterer aktivt regneark til database
'
Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
'
    ' forbinder til Access database
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source=C:\faktura\fakturaer.mdb;"
' Denne er placeringen af databasefilen

    ' åbner recordset
    Set rs = New ADODB.Recordset


    On Error GoTo ErrorHandle:

    'Denne stædige inputbox popper op igen
    'og igen, til brugeren skriver en talværdi.

Do Until bTal = True
        vInput = InputBox("Angiv fakturanummer: (skal være unikt)")
'      Her skal der checkes i database om fakturanummer allerede findes.

        If IsNumeric(vInput) Then bTal = True
       
Loop

    'skriver fakturanummer i celle L14
    Range("L16").Value = vInput
'
' Apostrof skal fjernes, før den skriver ud på printer.
'    ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
' Denne laver en PDF fil af aktivt regneark
'
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\faktura\" _
      + vInput + ".pdf", Quality:=xlQualityStandard _
        , IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False
' Åbner databse og skriver værdierne fra aktivt regneark.
'
        rs.Open "Belob", cn, adOpenKeyset, adLockOptimistic, adCmdTable
    ' all records in a table
        With rs
            .AddNew
' opretter ny record
' Tilføjer værdierne i hvert enkelt record.
            .Fields("Dato") = Range("C16").Value
            .Fields("FakturaNr") = Range("L16").Value
            .Fields("ExMoms") = Range("L57").Value
            .Fields("Moms") = Range("L58").Value
            .Fields("Total") = Range("L59").Value
            .Fields("Typ") = Range("A18").Value
            .Update ' stores the new record
        End With
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
    Exit Sub
ErrorHandle:
    MsgBox Err.Description & " Procedure BedOmEtTal"
End Sub

Nogle idéer ??

Voy
Avatar billede kabbak Professor
16. januar 2011 - 18:43 #1
Prøv med Dmax, den skal kunne finde den næste

DMax(Expr, Domain, Criteria)

vInput = Dmax("[FakturaNr]","Belob")+1
Avatar billede Voyager57 Nybegynder
17. januar 2011 - 10:59 #2
Hej kabbak tak for svaret.

Har prøvet, men kan ikke lige se hvor den skal stå i min kode, any hints?

På for hånd tak.
Avatar billede kabbak Professor
17. januar 2011 - 17:11 #3
linjen

vInput = Dmax("[FakturaNr]","Belob")+1

skal erstatte

'Do Until bTal = True
        'vInput = InputBox("Angiv fakturanummer: (skal være unikt)")
'      Her skal der checkes i database om fakturanummer allerede findes.

        'If IsNumeric(vInput) Then bTal = True
     
'Loop

du kan bare udkommenterer dem mens du tester
Avatar billede Voyager57 Nybegynder
17. januar 2011 - 19:13 #4
Hej igen Kabbak :-)

1000 tak for at du gider hjælpe, det gør mig glad at nogen gider.
Har prøvet ovennævnte, men den skriver :

Sub or function not defined

og Dmax er indfarvet.

Tror du har gættet at jeg er en newbie ;-)
Avatar billede kabbak Professor
17. januar 2011 - 22:34 #5
kan du sende et kopi af databasen og regnearket, så kan jeg teste.

kabbak snapela vip dot cybercity dot dk
Avatar billede Voyager57 Nybegynder
17. januar 2011 - 22:46 #6
Ja, sender med det samme...
Avatar billede Voyager57 Nybegynder
19. januar 2011 - 09:52 #7
Hej Kabbak.
Fik du min mail?
Avatar billede kabbak Professor
19. januar 2011 - 16:33 #8
Nej der er intet kommet ;-((
Avatar billede Voyager57 Nybegynder
19. januar 2011 - 16:38 #9
Ok, prøver igen :-)
Avatar billede kabbak Professor
19. januar 2011 - 18:33 #10
koden rettet til

ub Makro1()
' Makro1 Makro
' Udskriver og laver '.PDF fil, samt skriver i database "fakturaer.mdb"

Dim vInput
' Dim bTal As Boolean
' Eksporterer aktivt regneark til database
'
Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
'
    ' forbinder til Access database
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source=C:\faktura\fakturaer.mdb;"
' Denne er placeringen af databasefilen
    ' åbner recordset
    Set rs = New ADODB.Recordset

    On Error GoTo ErrorHandle:


'
' Apostrof skal fjernes, før den skriver ud på printer.
'    ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
' Denne laver en PDF fil af aktivt regneark
'
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\faktura\" _
      + vInput + ".pdf", Quality:=xlQualityStandard _
        , IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False
' Åbner databse og skriver værdierne fra aktivt regneark.
'
        rs.Open "Belob", cn, adOpenKeyset, adLockOptimistic, adCmdTable
    ' alle records i tabellen
        With rs
            .AddNew
' opretter ny record
' Tilføjer værdierne i hvert enkelt record.
            .Fields("Dato") = Range("C16").Value
            .Fields("FakturaNr") = Range("L16").Value
            .Fields("ExMoms") = Range("L57").Value
            .Fields("Moms") = Range("L58").Value
            .Fields("Total") = Range("L59").Value
            .Fields("Typ") = Range("A18").Value
            .Update ' Gemmer den nye record.
        End With
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
    Exit Sub
'
ErrorHandle:
    MsgBox Err.Description & " Procedure BedOmEtTal"
End Sub



Public Sub Hent_Faktura_Nr()
Dim vInput
' Eksporterer aktivt regneark til database
'
Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
'
    ' forbinder til Access database
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source=C:\faktura\fakturaer.mdb;"
' Denne er placeringen af databasefilen
    ' åbner recordset
    Set rs = New ADODB.Recordset
        vInput = DMax("[FakturaNr]", "Belob") + 1
    'skriver fakturanummer i celle L16
    Range("L16").Value = vInput
      Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub
Avatar billede kabbak Professor
19. januar 2011 - 18:36 #11
det var ikke den rigtige, den er her

Sub Gem_Faktura()
' Makro1 Makro
' Udskriver og laver '.PDF fil, samt skriver i database "fakturaer.mdb"

    Dim vInput
    ' Dim bTal As Boolean
    ' Eksporterer aktivt regneark til database
    '
    Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
    '
    ' forbinder til Access database
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
            "Data Source=C:\faktura\fakturaer.mdb;"
    ' Denne er placeringen af databasefilen
    ' åbner recordset
    Set rs = New ADODB.Recordset

    On Error GoTo ErrorHandle:


    '
    ' Apostrof skal fjernes, før den skriver ud på printer.
    '    ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
    ' Denne laver en PDF fil af aktivt regneark
    '
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\faktura\" _
                                                            + vInput + ".pdf", Quality:=xlQualityStandard _
                                  , IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
                                    False
    ' Åbner databse og skriver værdierne fra aktivt regneark.
    '
    rs.Open "Belob", cn, adOpenKeyset, adLockOptimistic, adCmdTable
    ' alle records i tabellen
    With rs
        .AddNew
        ' opretter ny record
        ' Tilføjer værdierne i hvert enkelt record.
        .Fields("Dato") = Range("C16").Value
        .Fields("FakturaNr") = Range("L16").Value
        .Fields("ExMoms") = Range("L57").Value
        .Fields("Moms") = Range("L58").Value
        .Fields("Total") = Range("L59").Value
        .Fields("Typ") = Range("A18").Value
        .Update    ' Gemmer den nye record.
    End With
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing


    ' her kan du bede om det næste faktura nr, ved at skrive
    Call Hent_Faktura_Nr
    ' så er den klar til næste gang
    'du burde også lave en kode der tømmer faktura arket, så det er klar til en ny.

    Exit Sub
    '
ErrorHandle:
    MsgBox Err.Description & " Procedure BedOmEtTal"

End Sub



Public Sub Hent_Faktura_Nr()
    Dim vInput
    ' Eksporterer aktivt regneark til database
    '
    Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
    '
    ' forbinder til Access database
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
            "Data Source=C:\faktura\fakturaer.mdb;"
    ' Denne er placeringen af databasefilen
    ' åbner recordset
    Set rs = New ADODB.Recordset
    vInput = DMax("[FakturaNr]", "Belob") + 1
    'skriver fakturanummer i celle L16
    Range("L16").Value = vInput
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub
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