Avatar billede rusti Nybegynder
23. maj 2005 - 17:25 Der er 38 kommentarer og
1 løsning

hjælp til løn program

Hej jeg har lavet et lille lønprogram i visual basic men mangler at oprette en lønseddel ud fra nogle data jeg har i en database. nogen der har et forslag til hvordan jeg nemmest kan oprette en lønseddel.
Avatar billede martin_moth Mester
23. maj 2005 - 18:25 #1
Skal den blot vises på skærmen, eller gemmes i en fil?
Avatar billede rusti Nybegynder
23. maj 2005 - 18:42 #2
den skal gemmes i en fil som skal printes ud på et A4 ark
Avatar billede rusti Nybegynder
23. maj 2005 - 18:44 #3
hvis det er nemmere at lave en som ikke skal gemmes men bare kan printes med det samme er det også ok
Avatar billede nielle Nybegynder
23. maj 2005 - 20:01 #4
Hvis den skal gemmes som en fil, der senere skal kunne printes ud, så vil jeg foreslå at du simpelthen udskriver den som en html-fil. Så kan du relativt let sætte den op sådan at det ser pænt ud. Desuden kan lønseddelen efterfølgende udskrives via din foretrukne browser.
Avatar billede rusti Nybegynder
23. maj 2005 - 20:08 #5
oki men er det svært at lave den i Word
Avatar billede nielle Nybegynder
23. maj 2005 - 20:23 #6
Det har jeg desværre ingen anelse om. :^|
Avatar billede rusti Nybegynder
23. maj 2005 - 20:36 #7
oki hvordan laver jeg det så den kan udskrive det som en html-fil
Avatar billede nielle Nybegynder
23. maj 2005 - 20:57 #8
Hvis du ved hvordan man skriver til en tekst fil så skriver du simpelthen bare din html-kode på denne måde. Eller er problemet at du ikke er vildt meget inde i html?
Avatar billede rusti Nybegynder
23. maj 2005 - 22:12 #9
lige nu skriver jeg til en word-fil men er det næsten det samme som at skrive til en html-fil. jeg har ikke arbejdet ret meget med html men det går nok må jo bare sætte mig mere ind i det.
Avatar billede nielle Nybegynder
23. maj 2005 - 22:52 #10
Hvis du allerede ved hvordan du skriver til Word eller som html (om end det så kræver noget øvelse) så er jeg ikke helt sikker på at jeg har forstået hvad det er du egentlig spørger om?
Avatar billede rusti Nybegynder
23. maj 2005 - 23:44 #11
jeg skriver til word det har jeg først lige fundet ud af at gøre. men vil gerne hvis det kunne gøres nemmere med excel foreksempel. men jeg prøver mig frem
Avatar billede martin_moth Mester
24. maj 2005 - 08:21 #12
Men nu du kan skrive til word fra vb6, og det er det du helst vil, har du så ikke selv løst dit problem - eller hvad spørger du evt. videre om?
Avatar billede rusti Nybegynder
24. maj 2005 - 12:36 #13
jeg ville da gerne hvis det er muligt at skrive til excel istedet for. For så kan jeg sætte excel til at lave alt regne arbejdet istedet og så er det jo meget nemmere og der er ikke så meget der skal føres over som der er i word
Avatar billede rusti Nybegynder
24. maj 2005 - 16:26 #14
er der slet ingen der ved hvordan man skriver til excel istedet for word
Avatar billede martin_moth Mester
24. maj 2005 - 17:29 #15
Du bruger excel.application i stedet for word.application

fx. Indsæt værdien 100 i celle A1 :

Dim oExcelApp As Object
    Dim NyTekst As String
    Set oExcelApp = CreateObject("excel.Application")
    oExcelApp.Workbooks.Open ("F:\1.xls")
    NyTekst = "Ib Petersen"
    oExcelApp.Visible = True
    oExcelApp.range("A1").Value = 100
'...
'...
'Og så hust at sæt dine objekter = nothing efter endt brug
    oExcelApp = nothing
Avatar billede rusti Nybegynder
24. maj 2005 - 21:56 #16
oki men jeg vil have nogle bestemte felter i en database lagtsammen og resultatet skal overføres til excel.

eks. jeg har en textbox hvor jeg skriver et medarbejder nummer og og et felt hvor jeg skriver en dato hvor måneden starter og et felt hvor jeg skriver en dato hvor måneden slutter og så skal den gå ned i databasen og hente de tal der står i de felter hvor det Medarbejder nummer og de datoer der ligger fra og til de 2 indtastede datoer står foran og lægge dem sammen og så overføre resultatet til excel.
Kan man det.?

Jeg har et felt der hedder Dato og et der hedder medarbejder nummer samt et felt der hedder indkørt i min database
Avatar billede martin_moth Mester
25. maj 2005 - 06:14 #17
ja. Hvordan har du connected til din database?
Avatar billede nielle Nybegynder
25. maj 2005 - 06:48 #18
Jeg troede at du vlle lade Excel om at klare selve regnearbejdet?
Avatar billede rusti Nybegynder
25. maj 2005 - 12:18 #19
jeg bruger dette til at åbne databasen med

'Åbner databaserne
denAnsatte.conAnsatte.Open "Provider=Microsoft.Jet.OLEDB.4.0;;Persist Security Info=False;Data Source=" + App.Path + "\Databaser\Oplysninger.mdb"
denIndkort.conIndkort.Open "Provider=Microsoft.Jet.OLEDB.4.0;;Persist Security Info=False;Data Source=" + App.Path + "\Databaser\Indkørt.mdb"
'Åbner Tabellerne
denAnsatte.rscomAnsatte.Open "SELECT * FROM Oplysninger"
denAnsatte.rscomFirma.Open "SELECT * FROM Firma"
denIndkort.rscomIndkort.Open "SELECT * FROM Indkørt"
Avatar billede rusti Nybegynder
25. maj 2005 - 12:22 #20
og det ligger i Private Sub Form_Load() så databasen hele tiden er åben

Nielle jeg skal have excel til at lave hele regnestykket men jeg skal jo kun bruge nogle enkelte data fra hele tabellen og dem skal jeg have taget ud og lagt sammen inden jeg overføre det til excel
Avatar billede nielle Nybegynder
25. maj 2005 - 19:26 #21
Måden til at få databasen til at lægge tal sammen er:

SQL = "SELECT sum(*) AS totalen FROM tabelNavn WHERE ..."

Uden at kende nærmere til dine tabeller så kan jeg ikke sige noget om hvad det er for en tabel og hvad der skal i WHERE-delen.
Avatar billede rusti Nybegynder
25. maj 2005 - 22:18 #22
jeg har en tabel der hedder førernr og en der hedder indkørt samt en der hedder dato jeg skal have nogle beløb trukket ud af tabellen indkørt og det skal kun være dem med det førernr jeg har indtastet i feltet førernr i mit program og med de datoer der ligger fra og til de datoer jeg har skrevet i felterne fra og til.

Et sted i programmet bruger jeg denne sætning til at lægge hele tabellen kilometer sammen. denIndkort.rscomIndkort.Open "SELECT SUM(Kilometer) AS sumkm FROM Indkørt"

Så Det må være noget i stil med
denIndkort.rscomIndkort.Open "SELECT sum(*) AS totalen FROM indkørt WHERE ..."
men hvad skal der så stå efter WHERE

Nielle hvis du kan hjælpe mig er jeg selvfølgelig villig til at give dig nogle point for det.
Avatar billede nielle Nybegynder
26. maj 2005 - 17:13 #23
Lad os kigge nærmere på det. :^)

Umiddelbart forstår jeg ikke hvorfor du nævner tabellerne "førernr" og "dato" (foruden tabellen "indkørt"). Er det ikke sådan at tabellen "indkørt" indeholder alle de data som du skal have trukket ud? Eller er der måske nogle relationer mellem "indkørt" og de to?

Det næste jeg gerne vil vide er hvordan du har defineret din "indkørt" tabel; Hvilke felter er der, og hvilke datatyper har de?
Avatar billede rusti Nybegynder
27. maj 2005 - 04:38 #24
Undskyld det er mig der har formuleret mig forkert.

Jeg har en tabel der hedder indkørt og under den har jeg felterne Førernr, Dato og Indkørt. Det jeg så gerne vil er at ud fra det førernr og de to datoer jeg indtaster skal den kunne lægge de tal som er under Indkørt sammen men kun dem der passer til det intastede førernr og de datoer der ligger fra og til de intastede datoer.

Alle mine felter i databasen er datatypen tekst og jeg har felterne Førernr, Dato, Indkørt samt kilometer men skal kun bruge de 3 førstnævnte.

Indtastningsfelterne i programmet hedder txtFørernrlønseddel, txtfralønseddel samt txttillønseddel.
Avatar billede nielle Nybegynder
27. maj 2005 - 17:31 #25
Du burde jo nok først overveje om dit dato-felt ikke skulle være af typen DATE. Det ville gøre noget nemmere.

Men eftersom at du nu har valgt at lave det som tekst, så skal jeg lige vide, hvordan du har valgt at skrive datoerne. Jeg gætter på formatet dd-mm-yyyy, men der er mange andre muligheder.
Avatar billede rusti Nybegynder
28. maj 2005 - 04:39 #26
dato typen er dd-mm-yyyy og når det er nemmere med typen DATE har jeg ændret typen til DATE og valgt dd-mm-yyyy.
Er det så ikke muligt at få programmet til at tjekke at der ikke står 00-00-0000 i feltet txtDatoindkørt lige nu tjekker jeg med en If sætning om der er intastet 8 tegn i feltet og hvis der ikke er, kommer den med en melding om at der ikke er intastet nogen dato i feltet.

Her er koden til min If sætning
If A <> 8 Then
MsgBox "Du har ikke indtastet nogen dato.", vbExclamation + vbOKOnly, "Indtast venligst en dato"
txtDatoindkørt.SetFocus
Exit Sub
End If
Avatar billede rusti Nybegynder
28. maj 2005 - 04:47 #27
har ændret If sætningen til at tjekke om der er indtastet 10 tegn og ikke 8
Avatar billede nielle Nybegynder
28. maj 2005 - 08:26 #28
Brug IsDate(...) til at validere datoen.
Avatar billede nielle Nybegynder
28. maj 2005 - 08:56 #29
Problemet med Access og danske datoformater er at Access internt bruger amerikansk datoformat: mm-dd-yyyy. Hvis du vil have samtlige poster for maj måned 2005, skal din SQL derfor se sådan her ud:

"SELECT * FROM indkørt WHERE #05-01-2005#<=dato AND dato<=#05-31-2005#"

(Læg i øvrigt mærke til at der er '#' tegn rundt om datoerne.)

Du skal derfor gøre en ekstraordinær indsats for at konvertere fra dit danske datoformat til det amerikanske før at du sammensætter din SQL-kommando.

Løsningen på dit problem kunne derfefter se nogenlunde sådan her ud:

"SELECT sum(indkørt) FROM indkørt WHERE #05-01-2005#<=dato AND dato<=#05-31-2005# AND førernr='Fører1234'"

- eller:

"SELECT sum(indkørt) FROM indkørt WHERE #05-01-2005#<=dato AND dato<=#05-31-2005# AND førernr=1234"

- alt efter om dit førernr er en tekst eller et tal.
Avatar billede nielle Nybegynder
28. maj 2005 - 08:58 #30
Hvis der ikke er nogen poster som svare til søgningen, bliver resultatet af sum(indkørt) lig med NULL - ikke 0.
Avatar billede rusti Nybegynder
28. maj 2005 - 15:10 #31
Nu har jeg prøvet at skrive sådan
"SELECT sum(Indkørt) as sumindkørt FROM Indkørt WHERE #05-01-2005#>=Dato AND Dato<=#05-31-2005# AND Førernr='1818'"
og det virker men jeg vil gerne selv indtaste førernummeret og datoerne i de 3 felter txtFørernr, txtTillønseddel og txtFralønseddel i programmet har prøvet at skrive følgende
denIndkort.rscomIndkort.Open "SELECT sum(Indkørt) as sumindkørt FROM Indkørt WHERE txtTillønseddel.Text>=Dato AND Dato<=txtFralønseddel.Text AND Førernr=txtFørernrlønseddel.Text"
men det virker ikke så skriver den bare 0 fordi jeg siger
If denIndkort.rscomIndkort.Fields("sumindkørt") > 0 Then
Indkørt = denIndkort.rscomIndkort.Fields("sumindkørt")
Else
Indkørt = sumindkørt
End If
Avatar billede rusti Nybegynder
28. maj 2005 - 15:34 #32
har lige siddet og leget lidt med det der sker en fejl hvis jeg ændre førernummeret fra 1818 til 1630 der har jeg 2 som tilsammen skal give 6045 men programmet siger 12125 men hvis jeg bruger 1818 hvor jeg har 5 som skal give 12891 så siger den det rigtige kan du forklare mig hvad der går galt.
Avatar billede rusti Nybegynder
28. maj 2005 - 16:00 #33
Fejlen sker også med førernr 1818 men har fundet fejlen.

når man skriver sådan WHERE #05-01-2005#>=Dato AND Dato<=#05-31-2005# så tager den både dem der ligger før datoen og efter datoen der er blevet angivet men hvorfor den gør det ved jeg ikke.
Avatar billede nielle Nybegynder
28. maj 2005 - 22:30 #34
Du har nu rent faktisk også fået vendt en af relationerne forkert. Prøv at rette:

... WHERE #05-01-2005#>=Dato AND Dato<=#05-31-2005#

- til:

... WHERE #05-01-2005#<=Dato AND Dato<=#05-31-2005#
Avatar billede rusti Nybegynder
29. maj 2005 - 14:24 #35
oki nu virker det ved ikke hvorfor jeg har vendt den ene forkert, men hvad skal jeg skrive når jeg vil bruge tekst boksene i programmet i stedet for de faste datoer. og er det muligt at få programmet til at vende datoerne fra dd-mm-yyyy til mm-dd-yyyy ved hjælp af en kode
Avatar billede nielle Nybegynder
29. maj 2005 - 15:49 #36
Det kunne se nogenlunde sådan her ud:

Dim StartDatoDk As String = txtTillønseddel.Text
Dim SlutDatoDk As String = txtFralønseddel.Text

Dim StartDatoUs As String = DateFormatDk2Us(StartDatoDk)
Dim SlutDatoUs As String = DateFormatDk2Us(SlutDatoDk)

"SELECT sum(indkørt) FROM indkørt WHERE #" & StartDatoUs & "#<=dato AND dato<=#" & SlutDatoUs & "# AND førernr=" & txtFørernrlønseddel.Text

- sammen med denne funktion:

function DateFormatDk2Us(ByVal DateDk As String)
    Dim DateParts() As String = Split(DateDk, "-")
    DateFormatDk2Us = DatePars(1) & "-" & DatePars(0) & "-" & DatePars(2)
end function
Avatar billede nielle Nybegynder
29. maj 2005 - 15:50 #37
Der forsvandt nogle t'er:

function DateFormatDk2Us(ByVal DateDk As String)
    Dim DateParts() As String = Split(DateDk, "-")
    DateFormatDk2Us = DateParts(1) & "-" & DateParts(0) & "-" & DateParts(2)
end function
Avatar billede rusti Nybegynder
30. maj 2005 - 13:56 #38
oki tak nu virker det som jeg gerne vil have det til har oprettet et spørgsmål på http://www.eksperten.dk/spm/621779 så kan du sende et svar så får du pointene. mange tak for hjælpen
Avatar billede nielle Nybegynder
30. maj 2005 - 18:01 #39
Cool, det gør jeg så. :^)
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