ois jees jos joku osais vastata miksi datakombo ei osaa valita jos listassa on kaksi täsmälleen samaa nimeä? Lista täytetään SQL kyselyllä access tietokannasta nimillä ja boundcolumn:iksi tulee tunnus. kun listasta valitaan click-proseduurilla nimi ja pitäisi hakea tietokannasta nimeen kuuluvat tiedot, (SQL lauseessa hakuehtona on se boundtextinä oleva tunnus), niin vb ei osaa valita kumpi samannimisistä valitaan, vaan hakee molemmilla niin kauan että ohjelma kaatuu. jos jollakin on ajatuksia tai kysymistä, voin antaa lisäinfoa. Tunteja on tapellessa mennyt.
datakombo ei osaa valita
peki
7374
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 7
Vanhimmat
Jos combossa on kaksi samaa nimeä niin kysely palauttaa kaksi tietuetta
select * from henkilot where Sukunimi='Meikäläinen'
palauttaa 3 tietuetta
select * from henkilot where Etunimi='Mikko'
palauttaa 2 tietuetta
select * from henkilot where Sukunimi='Meikäläinen' and Etunimi='Matti'
palauttaa 2 tietuetta
Etunimi|Sukunimi |Ikä
=======|===========|===
Matti |Meikäläinen|36
Mikko |Teikäläinen|26
Maija |Meikäläinen|35
Mikko |Meikäläinen| 5
Lisää rajoittavia hakutekijöitä
Sulla on kyllä jokin muukin virhe sillä SQL-lause joko palauttaa tietueita, ei palauta tietueita, keskeytyy timeouttiin mutta ei saa kaataa ohjelmaa.
Debuggaa miltä se SQL-lause näyttää jolla kysely ajetaan.
tässä pätkä koodista. SQL lause on kait asiallinen. Itseasiassa ohjelma ei aina kaadu joskus se selviää kun vain odottaa. kaatumisen syy on pinon täyttyminen.
'DataCombosta luetaan BoundText -arvo
If IsNumeric(cbonimi.BoundText) Then
intTunnus = cbonimi.BoundText
Else
intTunnus = 0
End If
Set rstiedot = New Recordset
'Sql-kysely tietietojen hakemiseksi
strsql = "SELECT * " & _
" FROM tiedot " & _
" WHERE tunnus =" & intTunnus
'Suoritetaan em. sql-kysely
rstiedot.Open strsql, DataEnvironment.cnntietokanta, adOpenStatic, adLockReadOnly
Minua kummastuttaa miksi se ei osaa valita kun haku tapahtuu nimeen kuuluvalla tunnuksella. tunnuksia ei ole kahta samaa. msgbox tulostuksella olen SQL lausetta tutkinut, se on jees ja toimii muissa yhteyksissä ihan oikein, kuten myös ohjelman toimintaa ja se näyttää hakevan silmukassa. ps. onko sulla ylimääräisiä käämejä, mulla on omat kärähtäny!
ois jees jos joku osais vastata miksi datakombo ei osaa valita jos listassa on kaksi täsmälleen samaa nimeä?
Lista täytetään SQL kyselyllä access tietokannasta nimillä ja boundcolumn:iksi tulee tunnus.
=================================================
Olis pitäny lukee tuo eka viesti kunnolla.
Datacompo pitää täyttää
SELECT DISTINCT NIMI FROM TAULU WHERE ...
näin tuplat tippuu pois siitä combosta sillä eihän ole tarkoitus että siinä näkyy tuplia?
uutta viikkoa vaan kaikille. palatakseni asiaan. datakompoon tarvitaan kyllä samoja nimiä sillä voihan kahdella eri henkilöllä olla sama nimi mutta eri tunnus.
laitanpa koodin kompon täyttämiseks
strSql2 = "SELECT tunnus, nimi " & _
" FROM tiedot " & _
" ORDER BY nimi"
Set rstunnus2 = New Recordset
rstunnus2.Open strSql2, DataEnvironment.cnntietokanta, adOpenStatic, adLockReadOnly
With cboY
Set .RowSource = rstunnus2
.BoundColumn = "tunnus"
.ListField = "nimi"
End With
Yllä oleva on modulissa. eikös tämä ole niinkuin pitää? On mielessä likkunut sellainen ajatus että onko click-metodi liian "herkkä", että se suorittaisi subin jotenkin uudelleen ennen vnhan valmistumista.
Itse en ole DataComboa käyttänyt mutta löytämieni esimerkkien perusteella näyttäisi siltä että olet ymmärtänyt sen käyttötarkoituksen väärin (tai sitten minä).
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/DBList98/html/vbctldatacombocontrol_x.asp
Itse tekisin homman näin
Valitaan ensin menusta
Project
References
ruksi Microsoft ActiveX Data Objects 2.5 Library
Tietokanta=ODBC nimellä koe
Työntekijät taulussa Id,Sukunimi,Etunimi,Ika
'Ladataan Combo
Private Sub Form_Load()
Dim Rs As ADODB.Recordset
Set Rs = New ADODB.Recordset
Dim Conn As String
Dim Query As String
Conn = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=Koe"
Query = "select id,sukunimi from tyontekijat"
Rs.Open Query, Conn
Rs.MoveFirst
While Not Rs.EOF
Combo1.AddItem Rs!sukunimi
Combo1.ItemData(Combo1.NewIndex) = Rs!id
Rs.MoveNext
Wend
Rs.Close
End Sub
'Muodostetaan toinen select
Private Sub Combo1_Click()
Query2="select * from xxx where id=" & Combo1.ItemData(Combo1.ListIndex)
End Sub
Esimerkissä käytin tavallista comboa
suuret kiitokset vinkeistäsi. tein ohjeidesi mukaan ja homma toimii loistavasti. on se mukava kun vanne poistuu puristamasta päätä.