Gå til innhold

Anbefalte innlegg

Jeg trenger hjelpe til koden for å knytte et form opp mot en database.

 

Har et skjema der jeg vil vise postene jeg har liggende i databasen.

 

Feltene i databasen består av Navn, Alder og Telefonnummer

 

Klarer ikke dette med å opprette koblingen mellom VB og databasen.

 

Fint om noen kan lage et enkelt eksempel til meg, helst med hele koden.

Lenke til kommentar
Videoannonse
Annonse

Du har ikke sakt hvilket navn skjemaet som inneholder all data heter, så jeg har kalt den for Personer.

 

For å hente data fra en Access database kan du bruke flere metoder. Jeg bruker for det meste DAO, ettersom det er etter min mening det enklest å bruke med VB.

 

Hvis databasen befinner seg i samme mappe som programmet, kan du bruke denne koden:

 

Dim DAO As Object
Dim tblPersoner As Object
Dim DB As Object

Set DAO = CreateObject("DAO.DBEngine.36")
Set DB = DAO.OpenDatabase(App.Path & "\Test.mdb")
Set tblPersoner = DB.OpenRecordset("Personer")

Me.AutoRedraw = True

Do Until tblPersoner.EOF
   Me.Print tblPersoner!Navn & ", " & tblPersoner!Alder & ", " & tblPersoner!Telefonnummer

   tblPersoner.MoveNext
Loop

 

Late-bound, som dette kalles, er også mye brukt i VB-script og ASP sider. Men ytelsen blir dårligere når du bruker denne framgangsmåten, så hvis du ønsker det kan du også referere filene direkte til prosjektet. Dette gjør du ved å velge Project -> References og så legge til Microsoft DAO 3.6 Object Library (hvis du ikke har denne kan du legge til en lavere versjon).

Etter dette skulle følgende kode fungere:

 

Dim tblPersoner As Recordset
Dim DB As Database

Set DB = OpenDatabase(App.Path & "\Test.mdb")
Set tblPersoner = DB.OpenRecordset("Personer")

Me.AutoRedraw = True

Do Until tblPersoner.EOF
   Me.Print tblPersoner!Navn & ", " & tblPersoner!Alder & ", " & tblPersoner!Telefonnummer

   tblPersoner.MoveNext
Loop

Lenke til kommentar
Du har ikke sakt hvilket navn skjemaet som inneholder all data heter, så jeg har kalt den for Personer.

 

For å hente data fra en Access database kan du bruke flere metoder. Jeg bruker for det meste DAO, ettersom det er etter min mening det enklest å bruke med VB.

 

Hvis databasen befinner seg i samme mappe som programmet, kan du bruke denne koden:

 

Dim DAO As Object
Dim tblPersoner As Object
Dim DB As Object

Set DAO = CreateObject("DAO.DBEngine.36")
Set DB = DAO.OpenDatabase(App.Path & "\Test.mdb")
Set tblPersoner = DB.OpenRecordset("Personer")

Me.AutoRedraw = True

Do Until tblPersoner.EOF
   Me.Print tblPersoner!Navn & ", " & tblPersoner!Alder & ", " & tblPersoner!Telefonnummer

   tblPersoner.MoveNext
Loop

 

Late-bound, som dette kalles, er også mye brukt i VB-script og ASP sider. Men ytelsen blir dårligere når du bruker denne framgangsmåten, så hvis du ønsker det kan du også referere filene direkte til prosjektet. Dette gjør du ved å velge Project -> References og så legge til Microsoft DAO 3.6 Object Library (hvis du ikke har denne kan du legge til en lavere versjon).

Etter dette skulle følgende kode fungere:

 

Dim tblPersoner As Recordset
Dim DB As Database

Set DB = OpenDatabase(App.Path & "\Test.mdb")
Set tblPersoner = DB.OpenRecordset("Personer")

Me.AutoRedraw = True

Do Until tblPersoner.EOF
   Me.Print tblPersoner!Navn & ", " & tblPersoner!Alder & ", " & tblPersoner!Telefonnummer

   tblPersoner.MoveNext
Loop

Supert !

Det fungerte med en gang.

 

Har et par andre spørsmål som det hadde vært fint å få svar på :

 

Ser i koden hvis man klikker på en "tom/blank" form at det kommer opp

noe som heter Load_Form(). Hva brukes det til ?

 

Hvordan lager jeg en form som har de feltene jeg har tabellen Personer.

Feltene må vell knyttes opp mot hver sin Label eller tekstboks.

Ønsker å kunne bla fra post til post og ha mulighet for å redigere eller slette.

Lenke til kommentar

All kode som skrives inn i Load_Form() vil kjøres med en gang programmet starter. Setter du MsgBox "Hello world!" inn der, vil altså denne meldingsboksen dukke opp i oppstartsprosessen, t.o.m før formen er synlig. Du kan f.eks bruke denne hendelsen (Event) til å åpne access databasen, slik at du unngår å gjøre dette flere ganger.

 

Det er egentlig ikke så vanskelig å knytte forskjellige kontroler til Access databasen din. For å vise dette slengde jeg sammen et lite prosjekt:

 

Database2.zip

 

Lykke til!

Lenke til kommentar

Jeg går videre med mine foreløpige små kunnskaper i VB.

Er det noen som kan hjelpe meg med de problemstillinger jeg omtaler i

koden nedenfor :

 

 

 

'Dette skal bli et vedlikeholdsprogram som verkstedleder i vedlikeholdsavdelingen

'skal bruke. I korte trekk skal systemet kunne registrere en ny vedlikeholdsjobb.

'Dette skal gjøres via Fil-menyen og Ny Jobb (se under mnuNyJobb).

 

'Deretter når jobben er utført skal verkstedleder gå inn på Rediger-menyen og Jobb.

'Han skal så fylle inn resterende felter (Bemerkning, Reparatør, Ferdig dato og Intervall dato).

 

'Skal også knytte opp noen rapporter for historikk (kunne se på tidligere utførte vedlikeholdsjobber,

'fremtidige intervalljobber osv.'

'Hvordan disse rapportene skal være er ikke tenkt ut ennå.

'Tenker meg også en varslingsrutine på intervalljobbene, dvs. at verkstedleder kan automatisk få

'en mail eller annen form for varsling når dato for intervalljobben er nådd.

 

 

 

Dim tblJobber As Recordset

Dim DB As Database

 

Private Sub Form_Load()

Set DB = OpenDatabase("c:\VB\Verksted.mdb")

Set tblJobber = DB.OpenRecordset("Jobber")

End Sub

 

Private Sub mnuNyJobb_Click() 'Åpner formen for registrering av ny vedlikeholdsjobb

 

MsgBox ("Skal åpne en ny form der ny vedlikeholdsjobb skal registreres (se i kode hvilke felt) : ")

 

' Følgende felt skal det registreres data i :

' - Dato (gis automatisk dagens dato)

' - Tid (gis automatisk klokkeslett)

' - Objekt (skal tastes inn)

' - Objektsted (skal tastes inn)

' - Innmeldt av (skal tastes inn)

' - Prioritering (fint med nedtrekksmeny og velge mellom (1. Høy, 2.Middels, 3.Lav)

' - Feilens art (fint med nedtrekksmeny og velge mellom (1.Mekanisk, 2.Elektrisk, 3. Annet)

' - Beskrivelse (en stort tekstboks/notat felt ---> Bør kunne inneholde 2-3 setninger med tekst.

End Sub

 

 

Private Sub mnuFilAvslutt_Click() 'Avslutter programmet

End

End Sub

 

 

Private Sub mnuRedigerJobb_Click() 'Åpner formen for å redigere en vedlikeholdsjobb

MsgBox ("Skal åpne en form der vedlikeholdsjobber skal redigeres (se i kode hvilke felt) : ")

 

'Ønsket funksjonalitet er :

' Nedtrekksmeny i feltet for Objekt. Når man så velger et Objekt må det kjøres en

' spørring i databasen som trekker ut bare de jobbene som berører det valgte objektet.

' Det kan være flere poster. Videre er det ønskelig at man skal kunne ha nedtrekksmeny

' i feltet for Objektsted. De valgte objekt postene kan ha forskjellige Objekt steder

' slik at når man velge Objektsted også skal man sitte igjen men bare de postene som

' gjelder det man har valgt som Objekt og Objektsted. Disse postene skal man så via knapper

' kunne bla seg frem og tilbake i, kunne redigere, slette og lagre.

 

'I tillegg til feltene som er nevnt over (ny vedlikeholdsjobb)

'skal følgende felter kunne legges data inn i :

' - Bemerkning (tilsvarende felt omtrent som feltet Beskrivelse (se ny vedlikeholdsjobb)

' - Reparatør (navnet på den som har utført reparasjonen

' - Ferdig dato (helst tilgang på en kalender (klikke på et lite ikon og få opp en kalender

' hvor man klikker på ønsket valg.

' - Intervall (samme som ferdig dato). Dette feltet skal brukes i de tilfeller der det er en jobb

' som skal gjentas f.eks om tre måneder. Man klikker seg da frem til datoen om tre måneder

' og denne dato legges inn i dette feltet.

 

' - Jeg har definert alle felt i databasen som tekst felt. Er det greit mht.

' til feltene for dato og klokkeslett, samt feltene for Beskrivelse og Bemerkning ?

 

End Sub

Lenke til kommentar

Nedtreksmenyer er i bruk svært lik tekstbokser, og jeg tror du lett vil greie implimere dem i programmet. Du legger ganske lett inn en, setter Style til 2, og så legge data inn ved å skrive tekst i List. Etter du har gjort dette, skal Text egenskapen gi deg den markerte teksten.

 

Når det gjelder kalender er jeg sikker på du klarer å finne fram noe. Det skal være en inkludert kalender OCX (ActiveX kontrol, legges til i Component (CTRL+T)) i Windows, men en google søk på calendar vb skulle vel også hjelpe endel.

 

Er det noe mer du lurer på, må du bare spørre.

Lenke til kommentar
Nedtreksmenyer er i bruk svært lik tekstbokser, og jeg tror du lett vil greie implimere dem i programmet. Du legger ganske lett inn en, setter Style til 2, og så legge data inn ved å skrive tekst i List. Etter du har gjort dette, skal Text egenskapen gi deg den markerte teksten.

 

Når det gjelder kalender er jeg sikker på du klarer å finne fram noe. Det skal være en inkludert kalender OCX (ActiveX kontrol, legges til i Component (CTRL+T)) i Windows, men en google søk på calendar vb skulle vel også hjelpe endel.

 

Er det noe mer du lurer på, må du bare spørre.

Hvordan lager man kobling til en ny form fra en meny ?

Lenke til kommentar

Da må du lage en meny array. Dette kan du gjøre ved å sette Index til 0 på et element, hvor du så lager meny objektene dynamisk med Load og Unload.

 

Dim Tell&, Cnt&

tblPersoner.MoveFirst

Do Until tblPersoner.EOF

   If Tell > mnuPersoner.Count - 1 Then
       Load mnuPersoner(Tell)
   End If

   mnuPersoner(Tell).Caption = tblPersoner!Navn

   Tell = Tell + 1
   tblPersoner.MoveNext
Loop

For Cnt = Tell To mnuPersoner.Count - 1
   Unload mnuPersoner(Tell)
Next

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...