mulla on nytten tietokanta jossa on asiakastaulu. taulussa on asiakas id ja asiakkaan nimi kenttä. ja nytten pitäs saada haettua asiakkaan tiedot joko asiakas id:llä tai asiakkaan nimellä. Sql:llä se pitää ilmeisesti hakea? nyt sitten kysyisin että miten se toteutetaan käytännössä?
kiitoksia vastauksista!
t:mmikko
eli vb6 toteutan tuota...
eikö kukaan osaa avittaa mua pikkusen tuossa?
Hei mmikko!
Voisitko antaa hieman lisävalaistusta...elikä onko kyseessä mahdollisesti MS Access tietokanta ja mitä
mahdollisia ActiveX-komponentteja käytät tetokantayhteyden luomiseen..? Jos pelkkä SQL-syntaksi riittää niin...esim.
SELECT * From taulu Where nimi = "mmikko"
hakee taulusta nimeltä taulu sarakenimen nimi perusteella kaikki tietueet joissa nimi-sarakkeen kentässä lukee mmikko
Jos taas kaipaat hieman enemmän valaistusta asiaan niin...
Lisää ensimmäiseksi projektiisi referenssi Microsoft DAO x.x Object Library ja lisää sitten vaikka moduuliin seuurava rivi:
Global dbs As Database
Oletetaan, että sulla on vaikka kolme tekstiruutua, yksi komentopainike sekä yksi valintaruutu objekti sun fomilla...Lisää komentopainikkeen click tapahtumaan seuraavaa:
Private Sub Command1_Click()
Set dbs = OpenDatabase("Polku\Tietokanta.mdb")'ja näin olet luonut yhteyden tietokantaan nimeltä Tietokanta.mdb
Dim rst As Recordset
Set rst = dbs.OpenRecordset("taulu", dbOpenSnapshot)'avaa recordset objektin taulukossa 'taulu'
If Not rst.RecordCount = 0 Then rst.MoveFirst 'siirtää kursorin ensimmäiseen tietueeseen mikäli taulussa on tietueita
Select Case Check1.Value
Case 0 'haku nimen perusteella
Do While Not rst.EOF
If rst!nimi = Text1.Text Then
Text2.Text = rst!nimi: Text3.Text = rst!asiakas_id: Exit Do
End If
rst.MoveNext 'siirtää kursorin seuraavaan tietueeseen
Loop
If rst.NoMatch Then msg& = MsgBox("Nimeä ei löytynyty", vbOKOnly, "MsgBox")
Case 1 'haku asiakasnumeron perusteella
Do While Not rst.EOF
If rst!asiakas_id = Val(Text1.Text) Then
Text2.Text = rst!nimi: Text3.Text = rst!asiakas_id: Exit Do
End If
rst.MoveNext
Loop
If rst.NoMatch Then msg& = MsgBox("Asiakanumeroa ei löytynyt", vbOKOnly, "MsgBox")
End Select
Set rst = Nothing: Set dbs = Nothing 'suljetan recordset objekti sekä yhteys tietokantaan
End Subkiitos nea! tää auttoi jo paljon. eli kyseessä todellakin on access tietokannat, unohin mainita sen tuossa viestissä.
en ole vielä ihan varma millä komponentilla luon nyt sen lopullisen yhteyden tietokantaan. Suositteletko jotain erityisesti?
Hei mmikko!
Tykkään käyttää VB6:ssa DataEnvironment Designer'ia, mutta Adodc + MSHFlexGrid controll yhdistelmä toimii myös ihan mukavasti.
Kannattaa mieluummin käyttää muotoa 'Seek', kuin että tarkastellaan koko taulukko yksitellen..
Set rs = DB.OpenRecordset("Table1", dbOpenTable)
rs.Index = "PrimaryKey"
rs.Seek "=", Id
If rs.NoMatch Then
I = MsgBox("Ei löytynyt:", vbCritical)
Else
Nimi = rs!Nimi
End Iftai vaihtoehtoisesti SQL:ää
Set rs = dbs.OpenRecordset("select * from Table1 where Nimi = " & Nimi)
Value = rs!id
'tai
Set rs = dbs.OpenRecordset("select * from Table1 where Id = " & Id)
Value = rs!NimiAihe on jo aika vanha, joten et voi enää vastata siihen.