[VB6] Uit Database in ListBox / Var in andere form

Pagina: 1
Acties:
  • 254 views sinds 30-01-2008
  • Reageer

  • iAR
  • Registratie: November 2000
  • Niet online
1. hoe kan ik de inhoud van een kolom uit een access database in een listbox of combobox krijgen?! ik weet hoe je een 'gewoon' ascii bestand uit kan lezen en in een listbox kan zetten, maar niet hoe dit moet met een database. ik gebruik voor database toegang/koppeling het adodc element.

2. hoe kun je in een webbrouwsertje (een form in je project) een url mee geven, die bestaat uit een variabele!? Ik heb het nu zo gebruikt: brwBrouwser.Navigate "http://www.imdb.com/" & frmMovie.txtImdb.Text. Alleen blijkt dit niet te werken... Zoals je begrijpt staat in txtImdb.Text het imdb nummer wat achter de slash moet komen en die pagina moet geladen worden.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:40

Crazy D

I think we should take a look.

1. hmm bekende vraag: vb access database weergeven in listbox

2. doe een breakpuntje zetten op de regel waar je de .Navigate aannroept, en bekijk eens goed in de debug-window wat de string zou zijn zoals je die aan de browser control meegeeft... of in een msgbox oid. Het probleem ligt in ieder geval niet in de manier waarop je de string wilt toekennen... misschien is de form waar de txtbox opstaat al ge-unload?

Exact expert nodig?


  • iAR
  • Registratie: November 2000
  • Niet online
Op woensdag 20 juni 2001 23:11 schreef Crazy_D het volgende:
1. hmm bekende vraag: vb access database weergeven in listbox
uhhu, uhhu... oke de rotzooi staat nu met wat geklooi in een listbox (en combobox). brengt gelijkt het volgende probleem zich aan, dat als je een item selecteerd (onchange in combo neem ik aan) dan moet hij de andere velden erbij pakken. Maar ik weet dus niet hoe ik daar bij kan komen (wel hoe ik ze eruit haal), maar niet uit welke rij zegmaar. :)
Euhm, dus: hoe weet uit welke rij je de rest van de gegevens moet halen als je een item uit de combo selecteerd... :?

Verwijderd

[code]
dim dbs as database
dim rs as recordset
dbs.opendatabase("c:\database.mdb")
set rs = dbs.execute ("SELECT * FROM tblTabel Where Tekst = '" &listbox.List(listbox.Listindex) &"'")

do while not rs.EOF
listbox2.additem rs("veldnaam")
rs.movenext
loop

rs.close
set rs = nothing
dbs.close
set dbs = nothing

  • iAR
  • Registratie: November 2000
  • Niet online
Op zondag 24 juni 2001 12:29 schreef KixAss456 het volgende:
[code]
set rs = dbs.execute ("SELECT * FROM tblTabel Where Tekst = '" &listbox.List(listbox.Listindex) &"'")
Hmm... door de boompjes begin ik het bos een beetje kwijt te raken... in de form staat deze code:

Option Explicit
Dim rsMovie As New ADODB.Recordset
Dim cnnMovie As New ADODB.Connection
Dim cmdMovie As New ADODB.Command

Private Sub cboTitle_Change()
'Check this... hoe haal ik waarden op bij selectie in combo?
txtYear.Text = GetValue(rsMovie!Year)
txtGenre.Text = GetValue(rsMovie!Genre)
End Sub

Private Sub lstTitle_ItemCheck(Item As Integer)
'Check this... hoe haal ik waarden op bij selectie in list?
txtYear.Text = GetValue(rsMovie!Year)
txtGenre.Text = GetValue(rsMovie!Genre)
End Sub


Private Sub Form_Load()
cnnMovie.Provider = "Microsoft.Jet.OLEDB.4.0"
cnnMovie.ConnectionString = dbase
cnnMovie.Open
cmdMovie.ActiveConnection = cnnMovie
cmdMovie.CommandText = "SELECT * FROM films"
rsMovie.CursorLocation = adUseClient
rsMovie.CursorType = adOpenDynamic
rsMovie.LockType = adLockPessimistic
rsMovie.Open cmdMovie

Do While Not rsMovie.EOF
lstTitle.AddItem rsMovie("title")
cboTitle.AddItem rsMovie("title")
rsMovie.MoveNext
Loop
End Sub

Oftewel: er word connectie gemaakt, en de titles worden in de combo en list box ingelezen.
Nu moet er dus als er een item in cbo of lst wordt geselecteerd dus die SQL query uitgevoerd worden... zodat het
jaar en het genre van de geselecteerde titel in de txt boxen komen.
Ik snap de SQL-query, maar "set rs = dbs.execute" niet. Niet waar dit stukje opslaat en niet waar deze nu geplaatst moet worden...
May sound stupid but it's the way it is... :(

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:40

Crazy D

I think we should take a look.

Als je de query snapt dan voer je die toch gewoon lekker uit op de 'gewone' manier (zoals je altijd een query doet dus...)...

Exact expert nodig?


  • iAR
  • Registratie: November 2000
  • Niet online
laten we het er op houden dat ik een newbie ben wat betreft visual basic... so: get my point?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:40

Crazy D

I think we should take a look.

Op maandag 25 juni 2001 01:25 schreef zerosignal het volgende:
laten we het er op houden dat ik een newbie ben wat betreft visual basic... so: get my point?
Dan zou ik zeggen, kijk eerst naar de code die je hebt en probeer te begrijpen wat er gebeurt, voordat je meteen 'een hele app' in elkaar wilt draaien... Dan gebeurt er straks van alles in je programma alleen begrijp je zelf niet wat, da's niet handig...

Exact expert nodig?


  • iAR
  • Registratie: November 2000
  • Niet online
duh... bespeur ik nu enige irritatie?! :+ je zou eens moeten weten wat er al wel gedaan is... ben alleen niet zo'n held met databases e.d.
je moet toch ergens je kennis opdoen toch?

maar goed... :(

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:40

Crazy D

I think we should take a look.

Op maandag 25 juni 2001 11:01 schreef zerosignal het volgende:
duh... bespeur ik nu enige irritatie?! :+ je zou eens moeten weten wat er al wel gedaan is... ben alleen niet zo'n held met databases e.d.
je moet toch ergens je kennis opdoen toch?

maar goed... :(
Oh nee hoor, maar ik bedoel meer, we kunnen hier wel de code neerzetten waarmee je bekijkt welk item in de listbox is geselecteerd, en de query die je nodig hebt, maar dan snap je er net zoveel van als nu...

Als je de code in de form_load bekijkt, en je begrijpt wat er gebeurt, dan is het een heel klein stapje om de query aan te passen naar iets anders.
Uitlezen van een geselecteerd item uit de listbox, heb je de .listindex property en de .list functie nodig.
Dat bij elkaar heb je eigenlijk alles wat je nodig hebt.

Welk deel precies snap je dan niet/lukt niet?

Exact expert nodig?


  • iAR
  • Registratie: November 2000
  • Niet online
je doelt waarschijnklijk op dit stukje:

cmdMovie.CommandText = "SELECT * FROM films"


ik heb die ook al aangepast, ik heb veel meer geprobeert, maar ik krijg veelal foutmeldingen... en omdat ik de msdn niet heb, is het iet wat lastig... :(

just a bit tricky....

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:40

Crazy D

I think we should take a look.

Dat blokje code ja, dus ook de regels die erna komen (oa recordset.open commandobject)
Dat is (idd) de query, die kun je dus aangepast gebruiken. Sowieso wel handig als je er nog niet zoveel ervaring mee hebt, daar gewoon ff mee te spelen, ff een dummy button, eventueel ff een textboxje voor de selectiecriteria.
Een (de?) query die je kunt gebruiken heeft KixAss456 al gepost...

Lukte vraag 2 trouwens wel? (webbrowser control)

Overigens is msdn ook online te vinden... http://msdn.microsoft.com

En post even specifiek wat nu je probleem is. Ik wil je met alle plezier helpen, maar ik ga niet een lap code voor je typen... vertel ff waar je nu precies tegen aan loopt.

Exact expert nodig?


  • iAR
  • Registratie: November 2000
  • Niet online
het specifieke probleem:

ik heb een listboxgevult met de eerste kolom uit de database, gesorteerd en ik heb een textbox.
als ik op een van de items in de listbox klik, dan moet de bijbehorende waarde in de textbox
verschijnen (is dus kolom twee in de database).
maar als ik op een item klik in de listbox dan moet er dus in de database gezocht worden naar
die rij, en daarbij de waarde (maar dan uit kolom 2) in de textbox zetten.

wat ik dus wel snap is dat als je een item selecteerd in de listbox dat dat item een nummer heeft
(listbox.listindex) en een inhoud (listbox.text). ik weet ook dat ik moet zijn in pivate sub:
listboxClick(), ik weet ook hoe ik de waarde in een textbox krijg (textbox.text), ook weet ik dat
ik de database heb "geopend" met cnnMovie.open en dat in cmdMovie.CommandText de SQL query staat...
dus opzich blijft er dan over: hoe match ik de waarde in de listbox met die in de database en krijg
ik dus de bijbehoorde waarde (kolom2) in de tekstbox.

komt erop neer dat je geen programma voor me hoeft te schrijven... toch?! :)

web ding doet het min of meer... :) ik krijg een website, moet nog ff wat aan gebeuren, maar ben eigenlijk alleen hier nog maar mee bezig geweest... :)

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:40

Crazy D

I think we should take a look.

hoe match ik de waarde in de listbox met die in de database en krijg ik dus de bijbehoorde waarde (kolom2) in de tekstbox.
Dat valt wel mee ;)
Da's eigenlijk niet meer dan een stukje standaart sql query...
select * from tabelletje where numeriek_veld = 6
of
select * from tabelletje where string_veld = 'text'

Dus zal dat iets worden als
cmd.CommandText = "SELECT * FROM tabelletje WHERE string_veldje='" & List1.List(List1.ListIndex) & "'"
Da's dus eigenlijk wat KixAss456 ook al zei :)

Overigens heeft de listbox ook nog een handig andere property, de .ItemData. Ideaal voor als je een text wilt laten zien aan de gebruiker, maar intern een numeriek ID wilt gebruiken. Als ik eerdere posts zie, heb je dus een lijst met filmtitels, en als je op de titel klikt, moet het id in de textbox komen, zodat je vervolgens daar wat mee kunt doen (naar de website dus). Als dat een gewoon numerieke waarde is, is de itemdata daar erg goed voor.
Zoiets dus:
code:
1
2
3
4
5
6
Do While Not rsMovie.EOF
    lstTitle.AddItem rsMovie("title")
    lstTitle.ItemData(lstTitle.ListCount-1) = rsMovie("movieid")  ' of iets dergelijks
    cboTitle.AddItem rsMovie("title")
    rsMovie.MoveNext
Loop

En om de geselecteerde uit te lezen:
lstTitle.ItemData(lstTitle.ListIndex)

Exact expert nodig?


  • iAR
  • Registratie: November 2000
  • Niet online
* iAR wordt ondertussen gek ;)

aha! .itemdata is zegmaar de onzichtbare tweede (nummerieke) rij binnen de listbox en is dus in de form_load al geladen.
daarvoor heb je dus geen aangepaste query voor nodig, zo blijkt. dat zou ook niet lukken als ik die huidige query zou veranderen
in de nieuwe (met where), want als hij bij rsMovie.Open cmdMovie komt is er nog helemaal niks in de listbox... dus kan hij die
query niet uitvoeren. Erna kan niet omdat rsMovie.Open eerst moet! :)

en ik heb dus ook tekst en een combo box (die dus beide niet .itemdata compatible zijn). in het voorbeeld had ik twee kolommen
maar dat was om het wat te vereenvoudigen...

want om dan dus bij het selecteren van een item in de lst of cbo box moet wél die query uitgevoerd worden om daarna de items in de text box te lezen met txtCast.Text = rsMovie("cast")
maar dan dus de vraag: hoe voer je die query zo "ff" uit? wat is daar de syntax van?

volg jij hem nog? ik wel (i hope)! :)

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:40

Crazy D

I think we should take a look.

Op maandag 25 juni 2001 21:22 schreef zerosignal het volgende:
* Crazy D wordt ondertussen gek ;)
:P
aha! .itemdata is zegmaar de onzichtbare tweede (nummerieke) rij binnen de listbox en is dus in de form_load al geladen.
Uhmm ja 't is inderdaad eigenlijk een 2e .List array... Hij wordt nu niet automatisch gevuld in de form_load (tenzij je de code ondertussen hebt aangepast dat 'ie dat wel doet natuurlijk ;) )
daarvoor heb je dus geen aangepaste query voor nodig, zo blijkt. dat zou ook niet lukken als ik die huidige query zou veranderen
in de nieuwe (met where), want als hij bij rsMovie.Open cmdMovie komt is er nog helemaal niks in de listbox... dus kan hij die
query niet uitvoeren. Erna kan niet omdat rsMovie.Open eerst moet! :)
Uhmm in de form_load, of waar dan ook, zeg maar de 1e keer dat je de list vult, moet je natuurlijk geen where gebruiken. Nou ja in ieder geval niet een where die z'n criteria uit de listbox haalt... (en waarschijnlijk geen enkele where, tenzij je bepaalde titels niet wilt laten zien).
en ik heb dus ook tekst en een combo box (die dus beide niet .itemdata compatible zijn). in het voorbeeld had ik twee kolommen
maar dat was om het wat te vereenvoudigen...

want om dan dus bij het selecteren van een item in de lst of cbo box moet wél die query uitgevoerd worden om daarna de items in de text box te lezen met txtCast.Text = rsMovie("cast")
maar dan dus de vraag: hoe voer je die query zo "ff" uit? wat is daar de syntax van?
Ik dacht dat de combobox ook een itemdata heeft (maar moet je wel wat hebben om erin te proppen). Zonder te checken, is het uitlezen hetzelfde als de listbox.
Maar uhmm zo te zien vul je zowel de listbox als de combobox met filmtitels. Dan zijn ze dus van allebei hetzelfde eigenlijk. Zie eerdere reactie dus.
volg jij hem nog? ik wel (i hope)! :)
Mwah... ondanks de hoeveel wiet lukt het nog een beetje...

Exact expert nodig?


  • iAR
  • Registratie: November 2000
  • Niet online
hmmm, toch maar wat minder wiet dan want je leest over het belangrijkste heen...
ik citeer: "en ik heb dus ook tekst" en "de vraag: hoe voer je die query zo "ff" uit? wat is daar de syntax van?"
dit alles de 4e quote van jou laatste post...

:)

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:40

Crazy D

I think we should take a look.

Op dinsdag 26 juni 2001 13:48 schreef zerosignal het volgende:
hmmm, toch maar wat minder wiet dan want je leest over het belangrijkste heen...
Welk normaal mens zit er dan ook om 1 uur 's nachts te VB-en :P
ik citeer: "en ik heb dus ook tekst" en "de vraag: hoe voer je die query zo "ff" uit? wat is daar de syntax van?"
dit alles de 4e quote van jou laatste post...
:)
Oh uhmm je moet dus op een tekst gaan query-en.... select * from tabelletje where tekstveldje='blah', dus zal iets worden als
"select * from jouwtabel where dat_veld = '" & combobox & "'"
waarbij combobox dus uiteraard de selected item moet zijn... stringveld moet dus tussen '' (2 x ') staan.

Exact expert nodig?


  • iAR
  • Registratie: November 2000
  • Niet online
euhm... hallo?

ik weet nu wel hoe die SQL query er uit komt te zien (die staat in zijn geheel in een string (sqlq))
en ik weet ook waar hij moet komen (als je een item selecteerd) maar niet hoe je hem "activeerd"?!
als je namelijk rsMovie.Open sqlq doet dan miept ie over dat de database al is geopend als je hem eerst sluit
en dan zo opent dan pakt ie um niet... (BOF / EOF fout).
vraag is dus : Hóe start je een SQL query die in een string staat? :)

*sugt* ;)

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:40

Crazy D

I think we should take a look.

Ahhhh kijk nou snap ik je vraag ;) Weinig slaap, en warm weer maken m'n hersentjes week ;)

Openen is simpel:
recordset.Open sqlquery, connectieobject

Dat connectieobject open je normaal gesproken in de form_load, en sluit je in de form_unload (begin en eind programma zeg maar).

In je huidige form_load (zoals ie een zooitje posts geleden er dus stond...) wordt er nog een commandobject gebruikt, daar wordt de activeconnection gezet, en daarom kun je daarna de recordset openen als
recordset.open commandobject

Als je zonder het commandobject werkt (wat ik meestal doe trouwens) moet je bij het openen van de recordset nog een connectie meegeven.

Dusse...
rsMovie.Open sqlstring, cnnMovie

That should do the trick :)

(Goh, uitleggen is toch lastig als dat soort dingen automatisch doet, moet je opeens nadenken over wat je nou eigenlijk doet... ;)

Exact expert nodig?


  • iAR
  • Registratie: November 2000
  • Niet online
leuk truukje dus... :(

ik krijg dus eerste de melding dat dat ding niet uitgeveord kan worden als het object al geopend is (logisch: 2 keer openen kan niet).

als ik hem eerst sluit (rsMovie.Close) en dan dus open (rsMovie.Open sqlstring cnnMovie) dan zeurt ie over dat BOF/EOF waar is en dat hij een record nodig heeft...
ram ik op de debug knop dan maakt ie dit voor me geel: txtCast.Text = rsMovie("cast")
dit komt na die rsMovie.Open sqlString

duss...
ergens vergeet ik iets of vergeet jij iets... of bijde... :(

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:40

Crazy D

I think we should take a look.

Wel de nodige controles inbouwen ;) (If Not rs.EOF Then ....)
Maar de foutmelding zegt het op zichzelf al, BOF of EOF is True. Geen records dus, dus ergens gaat er iets fout. Handigste is om ff de inhoud van sqlstring in de debugwindow te gooien nadat de voorwaarde gezet is, zodat je ff kan kijken of die query zelf wel goed is.

Exact expert nodig?

Pagina: 1