Gå til innhold

Anbefalte innlegg

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? :innocent:

 

Tusen takk for all hjelp :)

Lenke til kommentar
Videoannonse
Annonse

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

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:

 

Reference_DAO_in_VB.jpg

Lenke til kommentar

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! :D

 

Edit: Jeg får ikke noen feilmld, men bare blanke felt! :hmm:

Endret av RuZleBIFf
Lenke til kommentar

Husker ikke hvem feilmld jeg fikk, men satte inn koden din på nytt, og da fikk jeg ikke noen feilmld i den delen! :blush:

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! :cry:

Håper du kan hjelpe meg! Tusen Takk! :D

 

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 av RuZleBIFf
Lenke til kommentar

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

Tusen takk! :D det funker knall bra! :D

Håper jeg får lov til å spørre om en liten ting til :innocent:

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! :D

Lenke til kommentar

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

Nå funker programmet kjempe bra! :D

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! :innocent::D

Lenke til kommentar

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

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!!! :p

sånnt frustrerer meg skikkelig! :p

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! :p

 

edit: leif

Endret av RuZleBIFf
Lenke til kommentar
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 av aadnk
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...