16. januar 2011 - 18:27Der 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
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
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
Synes godt om
Ny brugerNybegynder
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.