ja taas ongelma. tarkoitus olisi etsi tiekokannasta tietueita tietyillä hakuehdoilla. tietokantana käytän acces 2000. olen toteuttamassa sitä tähän tyyliin:
hakusana = InputBox("Kirjoita haluttupaikka", "hakusana") Data1.Recordset.FindFirst "paikka =`" & hakusana & "´"
lopputulos on kuitenkin virheilmoitus:
missing ), ], or item expression.
jostain ilmeisesti puuttu sulku yms... mutta mistä ?
Edit2: Tarkempi tarkastelu sai miettimään että käytätkö tarkoituksella tuossa haussa `´-merkkejä vai pitäisikö ne olla '-merkki? (Edelliset BackSpacen vieressä kun taas jälkimmäinen on Entterin ja Ä:n välissä.) `´ väärin, kun taas ' on oikein.
[Vanhoja horinoita]Käytkö recordsetin lopussa tutustumassa tietoihin (Miten populate suomentuu?)?
Muutenkin jos haet teksti-tietoa, niin kannattaa käyttää ennemmin Like-hakua, kuin antaa tarkka ehto = -merkillä.
Seuraavaan esimerkkiin toimii haut *- ja ?- jokerimerkeillä. Esim A*, ?a*, *A* jne.
Private Sub Command1_Click() Dim abu As String, haku As String, loyto As String Dim MyBookMark As Variant abu = InputBox("Anna Ehto:", "Haku") If abu = "" Then Exit Sub 'kohdistimen paikka talteen paluuta varten MyBookMark = Data1.Recordset.Bookmark 'Populate recordset Data1.Recordset.MoveLast haku = "Name Like '" & abu & "'" Data1.Recordset.FindFirst haku If Data1.Recordset.NoMatch Then MsgBox "Ei löytynyt mitään ehdolla " & haku & "." Data1.Recordset.Bookmark = MyBookMark Exit Sub End If loyto = Data1.Recordset!Name Do While True Data1.Recordset.FindNext haku If Data1.Recordset.NoMatch Or Data1.Recordset.EOF Then Exit Do loyto = loyto & vbCrLf & Data1.Recordset!Name Loop Data1.Recordset.Bookmark = MyBookMark MsgBox abu & " löytyi näistä" & vbCrLf & _ String(Len(abu & " löytyi näistä"), "-") & vbCrLf & loyto End Sub
Edit: Lisätty esimerkkiin Bookmarkin käyttö palauttamaan kohdistin sinne minne viimeksi on selailtu.[/Vanhoja horinoita]
kiitos jälleen kerran avusta, on se helppoa kun sen osaa !
(ehkä minäkin vielä joskus)
niin mietin vielä, onko mahdollista saada vb:llä tehdyssä ohjelmassa toimimaan windowsin oma haku, siis tarkoitan "ctrl+f" hakua ?
En tiedä mitä tarkoitat tuolla "windowsin oma haku", mutta voit koodata ohjelmaasi ominaisuuden, että itse tekemäsi haku käynnistyy Ctrl+F:llä. Laittaa vain Formin KeyPreview päälle (True) ja KeyDown:in seuraava koodi.
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) 'Shift = 1 Shift 'Shift = 2 Ctrl 'Shift = 4 Alt 'Shift = 6 Ctrl+Alt jne. If Shift = 2 And KeyCode = vbKeyF Then Call MunOmaHaku End If End Sub
mutta onko mahdollista hakea niin että:
- valitaan ensikisi "kenttä" minkä tiedoilla haetaan
- painetaan esim: ctrl+f, ja kirjoitetaan hakukriteeri ja ok
haku aukaisee haetun tietueen tai siis ensimmäisen johon haku osuu.
näin toimii ainakin acces 2000 ohjelmassa.
kiitos kuitenkin tuosta aikaisemmasta, kommentista. siitäkin apua jatkossa.
TJR kirjoitti:
mutta onko mahdollista hakea niin että
Tottakai on, koodaat sen vaan niin.
lainaus:
näin toimii ainakin acces 2000 ohjelmassa.
Niin, kun Accessin (kaks ässää) tekijät koodasivat siihen niin.
Sen hakudialogin saattaa saada jollain APIlla, mutta itse etsiminen pitää koodata itse.
Eli hakea gridistä tai vastaavasta? Ei valmista, mutta äkkiä koodaat MunOmaHaku-aliohjelman... ;)
Nyt menee taas vaikeaksi, tuolla esimerkillä sain haun jopa toimimaan mutta, onko mahdollista muokata haun tuloksia vielä vähän. esimerkki: tietokannassa auton merkki, malli ja väri erikseen. haen auton merkillä ja msgboxiin tulisi haun tuloksena malli ja väri peräkkäin.
Me.Data1.Recordset.FindFirst "Merkki = Helkama" If Not Me.Data1.Recordset.NoMatch Then 'Muutat vain tämän palautuksen... MsgBox Me.Data1.Recordset!Merkki 'Muotoon... MsgBox Me.Data1.Recordset!Malli & "/" & _ Me.Data1.Recordset!Vari, vbInformation, "Tulos" End If
Mikäli data-kontrollisi viittaa koko tauluun pelkän sarakkeen sijaan (Query tms.), niin pystyt viittaamaan samalla rivillä oleviin tietoihin aivan normaalisti, kun sen kerran olet Find:lla löytänyt.
kun ei vaan ymmärrys riitä, tein haun tuolla aikaisemmin näyttämälläsi koodilla ja se toimii hyvin. ainoastaan haun tulokseen haluaisin enemmän tietoja ( väri ja malli )
voiko tuohon aikaisempaa esimerkkiä muokata niin että se toisi lisää tietoa haku tulokseen. ( saattaa olla vastaus jo tuossa aikaisemmassa mallissa, mutta en saa toimimaan )
Tuo aikaisempi esimerkkini hakee kuvakannasta kuvien nimiä. Muutetaanpa sitä hieman, että se palauttaa nimen lisäksi kuvan koonkin. Data1-objektimme viittaa koko Pictures-tauluun (jossa on sarakkeet ID, Picture, Name, Size), eli Data1.RecordSource = "Pictures".
'Vanha löytö 'loyto = Data1.Recordset!Name loyto = Data1.Recordset!Name & ":" & Data1.Recordset!Size Do While True Data1.Recordset.FindNext haku If Data1.Recordset.NoMatch Or Data1.Recordset.EOF Then Exit Do 'loyto = loyto & vbCrLf & Data1.Recordset!Name loyto = loyto & vbCrLf & Data1.Recordset!Name _ & ":" & Data1.Recordset!Size Loop
Eli jos kerran haet koko taulusta jostain sarakkeesta tietoa ja jos se löytyy, niin silloin vastauksena saat myös muut tiedot samalta riviltä.
kiitos jälleen
Aihe on jo aika vanha, joten et voi enää vastata siihen.