RuZleBIFf Skrevet 1. mars 2005 Del Skrevet 1. mars 2005 God morgen Dim strSøk As String strSøk = txt_navn_søk.Text Criteria$ = "navn = """ & strSøk & """" dt_elever.Recordset.findfirst Criteria$ Den kodebiten der funker meget fint til å søke med når jeg har koblet VB opp mot en Access-database. Men jeg skulle gjerne hatt en litt bedre søkefunksjon, en som søker etter kun deler av ord. Er det noen snille sjeler der ute som kan hjelpe meg med dette? Tusen takk for all hjelp Lenke til kommentar
aadnk Skrevet 1. mars 2005 Del Skrevet 1. mars 2005 Vel, du kan jo alltids benytte følgende funksjon: Public Function SearchInNames(Recordset As Recordset, sField As String, sText As String, Optional bMoveFirst As Boolean = True, Optional Compare As VbCompareMethod = vbTextCompare) As String Dim sCompare As String ' Flytt til første rad dersom dette er angitt If bMoveFirst Then Recordset.MoveFirst End If ' Gå gjennom alle radene Do Until Recordset.EOF ' Hent feltet sCompare = Recordset.Fields(sField).Value ' Dersom strengen befinner seg i "navn", returner If InStr(1, sCompare, sText, Compare) <> 0 Then ' Returner felt SearchInNames = sCompare Exit Function End If Recordset.MoveNext Loop End Function Da kan du eksempelvis søke etter tekst således: Dim sNavn As String sNavn = SearchInNames(dt_elever.Recordset, "navn", "deltekst du søker etter") MsgBox sNavn & " er " & dt_elever.Recordset!Alder & " år." Lenke til kommentar
RuZleBIFf Skrevet 4. mars 2005 Forfatter Del Skrevet 4. mars 2005 Compile Error: User-defined type not defined Får feil i "Public Function"-linja! Er det noen lett løsning på dette? Har ikke jobbet så veldig masse med funksjoner, så klarer ikke finne feilen! Lenke til kommentar
aadnk Skrevet 4. mars 2005 Del Skrevet 4. mars 2005 Har du referert DAO til prosjektet ditt, eller bruker du kan hende ikke dette i det hele tatt? Koden min er i hvert fall utformet med DAO i tankene, og vil følgelig ikke fungere ved eksempelvis ADOB, oleDB, mySQL. Men, dersom du kun ønsker å finne ut hvordan man kan søke i en Access database, kan du likegreit refere DAO til prosjekte, hvilket gjøres således: Trykk først på menyelementet "Project" Velg deretter "Refrerences ..." og rull nedover listen inntil du finner "Microsoft DAO 3.6 Object Library" Marker dernest dette elementet, og trykk så på OK. Operasjonen er for øvrig også vist på følgende bilde: Lenke til kommentar
RuZleBIFf Skrevet 7. mars 2005 Forfatter Del Skrevet 7. mars 2005 (endret) Nå har jeg sitti i 5 timer å sliti med detta! håper noen kan gi meg en hjelpende hånd..!? Har bytta til en film-database! (dt_filmutleie) og skal søke i feltet som heter "Filmtittel" Prøvde sånn her jeg: Private Sub cmd_søk_Click() Dim strSøk As String Dim sNavn As String strSøk = txt_navn_søk.Text sNavn = SearchInNames(dt_filmutleie.Recordset, "Filmtittel", "strSøk") End Sub Public Function SearchInNames(Recordset As Recordset, sField As String, sText As String, Optional bMoveFirst As Boolean = True, Optional Compare As VbCompareMethod = vbTextCompare) As String Dim sCompare As String ' Flytt til første rad dersom dette er angitt If bMoveFirst Then Recordset.MoveFirst End If ' Gå gjennom alle radene Do Until Recordset.EOF ' Hent feltet sCompare = lbl_navn.Caption ' Dersom strengen befinner seg i "navn", returner If InStr(1, sCompare, sText, Compare) <> 0 Then ' Returner felt SearchInNames = sCompare Exit Function End If Recordset.MoveNext Loop 'dt_filmutleie.Recordset.Fields(sField).Value End Function Jeg satte inn "sCompare = lbl_navn.caption" fordi jeg fikk feil på det som stod der før! veit ikke om dette er riktig da!? lbl_navn er en label som viser filmtittel som programmet står på! (ga det mening?) Håper noen kan hjelpe meg! Edit: Jeg får ikke noen feilmld, men bare blanke felt! Endret 7. mars 2005 av RuZleBIFf Lenke til kommentar
aadnk Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 Nei, denne endringen du gjorde vil neppe fikse problemet. Slik koden er nå, vil den ikke lese noen elementer fra databasen, hvilket således gjør søkefunkjonen ubrukelig. Men hvilken feilmelding fikk du? Lenke til kommentar
RuZleBIFf Skrevet 7. mars 2005 Forfatter Del Skrevet 7. mars 2005 (endret) Husker ikke hvem feilmld jeg fikk, men satte inn koden din på nytt, og da fikk jeg ikke noen feilmld i den delen! Private Sub cmd_søk_Click() Dim sNavn As String sNavn = SearchInNames(dt_filmutleie.Recordset, "filmtittel", "deltekst du søker etter") MsgBox sNavn & " er " & dt_filmutleie.Recordset!filmtittel & " sjanger." End Sub Prøvde jeg med nå, men får en feilmld i MsgBox-linja. "Ingen Gjeldende Post" Har prosjekt på skolen serru! Og jeg FÅR DET IKKE TIL! Håper du kan hjelpe meg! Tusen Takk! Edit: Forandret til dette: Private Sub cmd_søk_Click() Dim sNavn As String sNavn = SearchInNames(dt_filmutleie.Recordset, "filmtittel", "deltekst du søker etter") MsgBox sNavn & " er " & Recordset!Filmtittel & " Sjanger." End Sub Altså bare satte står bokstav på Filmtittel og Sjanger i msgbox-linja! Nå får jeg "Object required" i msgbox-linja! Edit2: Skal jeg skrive noe istedenfor "deltekst du søker etter"?? når jeg prøvde med "txt_navn_søk" som er tekstboksen hvor jeg skriver søkeordet, får jeg den samme feilmlda! Endret 7. mars 2005 av RuZleBIFf Lenke til kommentar
aadnk Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 Jeg antar du må gjøre det på følgende måte: Private Sub cmd_søk_Click() Dim sNavn As String sNavn = SearchInNames(dt_filmutleie.Recordset, "Filmtittel", txt_navn_søk.Text) MsgBox sNavn & " er " & sNavn & " Sjanger." End Sub Men jeg har riktignok ikke sett databasen og dens oppbygning, så jeg er ikke sikker. Lenke til kommentar
RuZleBIFf Skrevet 8. mars 2005 Forfatter Del Skrevet 8. mars 2005 Tusen takk! det funker knall bra! Håper jeg får lov til å spørre om en liten ting til Er det en mulighet jeg kan bruke .FindNext på? Si databasen har 2xKill Bill, og den ene er utleid. Når jeg da søker så får jeg opp den som er utleid, også vil jeg vise neste. Håper du kan hjelpe meg med dette og! Igjen: TUSEN TAKK! Lenke til kommentar
aadnk Skrevet 8. mars 2005 Del Skrevet 8. mars 2005 Jada, det er fult mulig. Jeg implementerte nemlig en sådan funksjonalitet i denne prosedyren. Du kan eksempelvis gjøre det som følger: Private Sub cmd_søk_Click() Dim sNavn As String ' Finn første treff sNavn = SearchInNames(dt_filmutleie.Recordset, "Filmtittel", txt_navn_søk.Text) MsgBox sNavn & " er " & sNavn & " Sjanger." ' Ikke finn dette feltet (dette må du legge inn før du kaller neste søk) dt_filmutleie.Recordset.MoveNext ' Finn neste treff sNavn = SearchInNames(dt_filmutleie.Recordset, "Filmtittel", txt_navn_søk.Text, False) MsgBox sNavn & " er " & sNavn & " Sjanger." ' Du kan også eventuelt benytte en DO-LOOP som fortsetter helt inntil EOF er True for å søke gjennom alle resultatene. End Sub Lenke til kommentar
RuZleBIFf Skrevet 14. mars 2005 Forfatter Del Skrevet 14. mars 2005 Nå funker programmet kjempe bra! Nesten! jeg søker og alt går fint, og blar videre i postene så det suser. Men hvis jeg trykker på knappen nok ganger får jeg en blank post. Og her blir det komplikasjoner. Når alle feltene er blanke får jeg ikke lov til å verken gå til første eller siste! Jeg får "Runtime error '3426': Handlingen ble avbrutt av et tilknyttet objekt." Jeg søkte litt rundt på google, men jeg fikk ikke noe nyttig ut av dette. Er det noen som har en forklaring på dette? Og en løsning hadde heller ikke vært å forrakte! Lenke til kommentar
aadnk Skrevet 14. mars 2005 Del Skrevet 14. mars 2005 Jeg kan ikke påpeke sikkert hva som ligger til grunn for denne feilmeldingen hos akkurat deg, men i hvert fall tror jeg det vil hjelpe en smule å lese hva Microsoft har å si om saken, samt denne linken. Dersom dette ikke fører til noe, kan det jo hende feilkilden ligger i selve utformingen av databasen - prøvd således med en annen database og sjekk om du får samme feilmelding da. Lenke til kommentar
RuZleBIFf Skrevet 14. mars 2005 Forfatter Del Skrevet 14. mars 2005 (endret) Okå... jeg tok en titt på programmet her nå, og detta var litt psycho: Der hvor jeg søker etter kunder (de som har leid film) så får jeg feilmld'a jeg nevnte istad, mens der jeg søker etter filmer så funker den 100% like koden helt glatt! (utenom hvilke tabell jeg leiter i da) Mens på den hvor jeg søker etter filmer funker det helt glatt! der hopper den til første post ved .EOF. HELVETE!!! sånnt frustrerer meg skikkelig! Og en bitteliten ting til.. hehe.. Er det en måte å sjekke om det står mer enn ett tegn i en teksboks?? for søkefunksjonen går helt i ball hvis man bare søker på en bokstav! edit: leif Endret 14. mars 2005 av RuZleBIFf Lenke til kommentar
aadnk Skrevet 14. mars 2005 Del Skrevet 14. mars 2005 (endret) Er det en måte å sjekke om det står mer enn ett tegn i en teksboks? Ikke umulig det. Benytt Len-funksjonen til å telle antall karakterer i en streng: ' Dersom søkestrengen er større enn èn bokstav If Len(txt_navn_søk.Text) > 1 Then ' Begynn søkeprosessen End if Endret 14. mars 2005 av aadnk Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå