Avatar billede syscom Nybegynder
19. marts 2001 - 15:12 Der er 14 kommentarer og
1 løsning

Select fra 2 tabeller i samme db, og vise listen over indholdet i en list

Hej

Hvordan får jeg VB til at vise indholdet over 2 tabeller i en db, som derved lister resultaterne i en listview.

Hvordan gør jeg det?
Avatar billede proaccess Nybegynder
19. marts 2001 - 15:18 #1
Hvis du har adgang til selve DB\'en, kan du oprette en forespørgsel dér, som du bruger i stedet for en tabel. Ellers er du nødt til at skrive en SQL-string som rækkekilde for din listboks.

HDH
ProAccess
Avatar billede syscom Nybegynder
19. marts 2001 - 15:27 #2
det skal være en sql string!
Avatar billede proaccess Nybegynder
19. marts 2001 - 15:45 #3
Så er du nødt til at angive din sql som recordsource til din data-kontrol.

Data1.RecordSource=\"SELECT T1.Felt1, T2.Felt2 FROM Tabel1 AS T1, Tabel2 AS T2 WHERE T1.ID = T2.fID;\"

Selvfølgelig med dine relevante tabeller og felter...
Avatar billede syscom Nybegynder
20. marts 2001 - 10:44 #4
Jeg skal have alle kolonne fra de to tabeller;


Tabel 1: TypeVand
Tabel 2: TyepEl

De indeholder begge, Id, Apparat, Forbrug, Brugstid, Pris

Og de kommer igennem en løkke der viser alle resultaterne fra db\'n...
men hvis jeg bruger følgende så sker der fejl:

strSelect = \"SELECT T1.*, T2.* FROM TypeVand AS T1, TypeEl AS T2 WHERE T1.ID = T2.fID\"

Avatar billede syscom Nybegynder
20. marts 2001 - 10:46 #5
Den siger jeg har \"too few parameters. expected 3\"
Avatar billede proaccess Nybegynder
20. marts 2001 - 10:52 #6
Du skal fjerne f\'et i det sidste ID
Avatar billede syscom Nybegynder
20. marts 2001 - 10:54 #7
virker stadig ikke... har fjernet det, den siger stadig det samme
Avatar billede syscom Nybegynder
20. marts 2001 - 10:55 #8
strSelect = \"SELECT T1.*, T2.* FROM TypeVand AS T1, TypeEl AS T2 WHERE T1.ID = T2.ID\"

nu siger den expected 1

havde glemt at udskifte t1.felt1 med t1.*
Avatar billede kedde65 Praktikant
20. marts 2001 - 11:34 #9
Jeg er meget sikker på at det er der hvor du laver din connection til din database. Prøv at vise koden hvor du laver connection til databasen. For selve SQLSætningen er rigtig nok.

Kedde
Avatar billede proaccess Nybegynder
20. marts 2001 - 11:35 #10
Relation mellem dine tabeller:

Hvad er det, som \"binder\" tabellerne sammen, eller rettere ER der noget, som binder dem sammen?


Avatar billede kedde65 Praktikant
20. marts 2001 - 14:22 #11
SQLSætningen er fuldstændig ligeglad med hvordan relationerne er strikket sammen. Ihvertfal sålænge du laver det på denne her måde.

kedde
Avatar billede proaccess Nybegynder
20. marts 2001 - 14:31 #12
Jeg fik bare lige pludselig indskydelsen, at der måske var tale om en UNION-Query:

SELECT \'El\' AS Type, TypeEl.* FROM TypeEl UNION SELECT \'Vand\', TypeVand.* FROM TypeVand

ProAccess
Avatar billede syscom Nybegynder
20. marts 2001 - 16:39 #13
Public Function DatabaseReload(strSelectOption As Integer)
Dim rsTemp As Recordset
Dim strSelect As String
Dim tempvalue As Integer

If strSelectOption = 0 Then
  strSelect = \"SELECT * FROM TypeEl,TypeVand\"
ElseIf strSelectOption = 1 Then
  strSelect = \"SELECT * FROM TypeVand\"
ElseIf strSelectOption = 2 Then
  strSelect = \"SELECT * FROM TypeEl\"
Else
  MsgBox (strSelectOption)
  MsgBox (\"fejl i databasereload\")
End If

Set rsTemp = dBase.OpenRecordset(strSelect)

frmMain.listItems.listItems.Clear

  If rsTemp.EOF Or rsTemp.BOF Then
    MsgBox (\"fejl kald i database reload!\")
  Else
    Do Until rsTemp.EOF
      If frmMain.listItems.listItems.Count = 0 Then
        tempvalue = 1
      Else
        tempvalue = frmMain.listItems.listItems.Count + 1
      End If
     
      frmMain.listItems.listItems.Add tempvalue, , rsTemp!Apparat
      frmMain.listItems.listItems.Item(tempvalue).ListSubItems.Add 1, , rsTemp!Forbrug
      frmMain.listItems.listItems.Item(tempvalue).ListSubItems.Add 2, , rsTemp!Brugstid
      frmMain.listItems.listItems.Item(tempvalue).ListSubItems.Add 3, , \"kr \" & rsTemp!Pris & \",00\"
      rsTemp.MoveNext
    Loop
    rsTemp.Close
  End If
End Function



Det er i linien hvor den add\'er flere records til listview-dimsen, at den f.eks. med \"rsTemp!\" siger der er fejl.
Avatar billede syscom Nybegynder
20. marts 2001 - 16:42 #14
sætter hele tiden den forkerte ind...


If strSelectOption = 0 Then
  strSelect = \"SELECT T1.*, T2.* FROM TypeVand AS T1, TypeEl AS T2 WHERE T1.ID = T2.ID\"
ElseIf strSelectOption = 1 Then
  strSelect = \"SELECT * FROM TypeVand\"
ElseIf strSelectOption = 2 Then
  strSelect = \"SELECT * FROM TypeEl\"
Else
  MsgBox (strSelectOption)
  MsgBox (\"fejl i databasereload\")
End If


og VB melder ud med fejl i

Set rsTemp = dBase.OpenRecordset(strSelect)
Avatar billede kedde65 Praktikant
20. marts 2001 - 21:36 #15
Du bruger så vidt jeg kan se ADO recordset, har du husket at sætte en reference til det runtime library, der indeholder ADODB?

Hvor stammer DBase fra, det har jeg ikke lige hørt om.

dBase.OpenRecordset(strSelect)

Kedde
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