Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Tietokannasta hakeminen

mmikko [06.06.2006 15:24:23]

#

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

mmikko [18.06.2006 14:51:39]

#

eli vb6 toteutan tuota...
eikö kukaan osaa avittaa mua pikkusen tuossa?

neau33 [18.06.2006 21:29:43]

#

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 Sub

mmikko [19.06.2006 15:43:52]

#

kiitos 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?

neau33 [19.06.2006 18:35:02]

#

Hei mmikko!

Tykkään käyttää VB6:ssa DataEnvironment Designer'ia, mutta Adodc + MSHFlexGrid controll yhdistelmä toimii myös ihan mukavasti.

JoreSoft [24.06.2006 12:50:19]

#

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 If

tai 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!Nimi

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta