Avatar billede Slettet bruger
21. august 2003 - 04:35 Der er 14 kommentarer og
1 løsning

Hent linje fra database

Hej!

Jeg har en række label'er hvis caption skal komme fra en database.
I label 1 skal første linje fra databasen stå og i label 2 næste linje osv.

Er der en der kan hjælpe med dette problem.

T2C
Avatar billede vbcoder Nybegynder
21. august 2003 - 08:03 #1
Skal dit spørgsmål forstås sådan at du vil hente en tabels feltnavne så din forms data afspejler tabellen i databasen ?

eller

Skal det forstås sådan at du har label navne i en tabel hvorfra de læses og sættes på formen ?

//vbcoder
Avatar billede martin_moth Mester
21. august 2003 - 12:27 #2
Prøv at søg lidt på eksperten - der er 1000-vis af spørgsmål om hvordan man læser fra en database (og det er vel egentligt det du spørger om)
Avatar billede Slettet bruger
21. august 2003 - 13:12 #3
vbcoder>>>Ja det skal forstås sådan at jeg har en database der hedder vogndata i den en tabel der hedder vognnr og i den et felt der hedder nummer:
05 skal i label 1
08 skal i label 2
osv.

Håber dette uddyber det lidt.

Martin>>>Jeg syntes ikke jeg kunne finde et svar der passede til mit spm.

T2C
Avatar billede martin_moth Mester
21. august 2003 - 18:21 #4
Hvis du har lavet dine labels som et kontrolarray, så du f.eks. kan skrive til label nummer 0 således: Label(o).Caption = "Label nummer 0" osv...

  Dim m_DB as database
  Dim RecVogn as Recordset
  Dim i as integer 
  Set recVogn = m_DB.OpenRecordset _
    ("SELECT vognnr FROM vogndata", dbOpenSnapshot)
   
  'Der loopes gennem Recordsettet og skrives til labels
  i=0
  Do While Not recVogn.EOF
    label(i).Caption = recVogn!vognnr
    recVogn.MoveNext
    i = i + 1
  Loop

Kopieret fra www.eksperten.dk/spm/225965og rettet til :o)
Avatar billede Slettet bruger
22. august 2003 - 05:51 #5
Martin>>>Nu er jeg jo ret grøn i vb, så hvis du kunne fortælle lidt mere om hvad et array er og hvordan det virker så ville det være fint. Min kode til de labels ser sådan her ud:

If t1.Caption = "" Then
frmSplash.k1.Visible = False
frmSplash.p1.Visible = False
frmSplash.v1.Visible = False
frmSplash.Height = 375
Label1.Caption = "Databasen er tom"
GoTo 10
End If
If t2.Caption = "" Then
frmSplash.k2.Visible = False
frmSplash.p2.Visible = False
frmSplash.v2.Visible = False
frmSplash.Height = 975
GoTo 10
End If
If t3.Caption = "" Then
frmSplash.k3.Visible = False
frmSplash.p3.Visible = False
frmSplash.v3.Visible = False
frmSplash.Height = 1335
GoTo 10
End If
osv....

T2C
Avatar billede martin_moth Mester
22. august 2003 - 06:56 #6
Et array er en tabel af variable.
Et Controlarray er en "tabel" af kontroller.

Hvis du smider en label på din form, og kopiere den, spørger VB dig om du vil oprette et kontrolarray. Svarer du ja, får du to labels der hedder det samme, men med forskellige index (label1(0) og label1(1)). Sådan kan man oprette en masse kontroller der hedder det samme, men med forskellig index, og det kan være smart nogen gange.

Men for at gøre koden mere simpel, så henter jeg nu kun de første 3 poster i databasen og sætter dem som captions:


  Dim m_DB as database
  Dim RecVogn as Recordset
  Dim i as integer 
  Set recVogn = m_DB.OpenRecordset _
    ("SELECT vognnr FROM vogndata", dbOpenSnapshot)
   
  t1.Caption = recVogn!vognnr
  recVogn.MoveNext
  t2.Caption = recVogn!vognnr
  recVogn.MoveNext
  t3.Caption = recVogn!vognnr
  recVogn.MoveNext
 
  recVogn.Close 'Husk at lukke dit recordset
  Set m_DB = Nothing 'Hust at nedlægge objektet
Avatar billede martin_moth Mester
22. august 2003 - 06:57 #7
PS: Forsøg at undgå GoTo (kan måske "tillades" under On Error GoTO), da det generelt betegnes som "dårlig" programmering...
Avatar billede vbcoder Nybegynder
22. august 2003 - 08:05 #8
programmering i vb generelt

i modsætning til tidligere tides basic programmering hvor programmet skulle fortælles hvor det skulle springe i koden er vb 'event' styret.

dvs at goto sætninger ikke bruges

kode bliver kun udført når brugeren udfører en handling.

eneste undtagelser for goto er - som angivet - fejlhåndtering

fejlhåndtering kan endda laves mere elegant da man kan bruge error.raise og med sine egne fejlnumre lave den håndtering der skal til.

//vbcoder
Avatar billede Slettet bruger
28. august 2003 - 21:12 #9
Martin>>>Nu har jeg endelig fået tid til at afprøve dine svar.
Jeg bliver ved med at få en fejl:
Object variable Or With block variable not set:
Set RecVogn = m_DB.OpenRecordset _
    ("SELECT vognnr FROM vogndata", dbOpenSnapshot)

Jeg har lagt en database ind i formen der hedder Data1, er det her det går galt?

T2C
Avatar billede Slettet bruger
28. august 2003 - 21:13 #10
Martin>>>P.S. Jeg har brugt dit første svar med kontrolarray da jeg har oprettet dem.

T2C
Avatar billede martin_moth Mester
28. august 2003 - 23:13 #11
Har du husket at dim'me dine variabler?
Avatar billede Slettet bruger
29. august 2003 - 06:17 #12
Martin>>>Jeg har taget en kopi af det du skrev:

Dim m_DB As Database
  Dim RecVogn As Recordset
  Dim i As Integer
  Set RecVogn = m_DB.OpenRecordset _
    ("SELECT vognnr FROM vogndata", dbOpenSnapshot)
   
  'Der loopes gennem Recordsettet og skrives til labels
  i = 0
  Do While Not RecVogn.EOF
    t1(i).Caption = RecVogn!vognnr
    RecVogn.MoveNext
    i = i + 1
  Loop

If t1(0).Caption = "" Then
frmSplash.k1.Visible = False
frmSplash.p1.Visible = False
frmSplash.v1.Visible = False
frmSplash.Height = 375
Label1.Caption = "Databasen er tom"
GoTo 10
End If
If t1(1).Caption = "" Then
frmSplash.k2.Visible = False
frmSplash.p2.Visible = False
frmSplash.v2.Visible = False
frmSplash.Height = 975
GoTo 10
End If

osv....

T2C
Avatar billede martin_moth Mester
29. august 2003 - 07:09 #13
Hmm - det brude virke. Måske fordi du mangler at afkrydse en reference til noget ADO - har ikke VB her, så kan ikke lige forklare nærmere. Men du kan se, at mit svar til dig er principielt identisk med http://www.eksperten.dk/spm/234231, og det virker...
Avatar billede martin_moth Mester
29. august 2003 - 07:11 #14
Fandt lige et 3. spørgsmål hvor jeg har svaret på det samme, og af det fremgår "fejlen":

Citat: "Gå til Project - References og afkryds MicroSoft DAO 3.xx Object Library." Citeret fra http://www.eksperten.dk/spm/225965
Avatar billede martin_moth Mester
01. december 2004 - 12:43 #15
Lukketid, her inden vi går ind i 2005 ;o)
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