Avatar billede access-idiot Nybegynder
19. november 2001 - 11:27 Der er 25 kommentarer og
2 løsninger

Søg i Access

Okay, nu bliver det sjovt – jeg skal til at søge.

Jeg har en formular hvor der bliver indtastet en masse data om ure… Fabrikant, Model, Årgang, Fab Nr. mm.

Så skal jeg ha’ lavet en ny formular som jeg kan bruge til at søge i den anden formular med. Jeg skal f.eks. kunne skrive ”1985” i tekstboksen med ”Årgang”, og skrive Ramber i tekstboksen ”Model”

Når jeg så trykker på søg, vises alle de Reg nr.(autonummerering) som både indeholder 1985+Ramber i en tekstboks…

Hjælp ! 
Avatar billede terry Ekspert
19. november 2001 - 11:30 #1
19. november 2001 - 11:32 #2
Du skriver at du vil have resuatet i en tekstboks! Hvorfor vil du ikke bare vise de aktuelle poster i formularen?
Det nemmeste er at bruge Filter-metoden på formularen.

Avatar billede terry Ekspert
19. november 2001 - 11:32 #3
19. november 2001 - 11:55 #4
Hvis du har din tekstboks (her kaldet txtResultat) kan du lægge følgende kode på din søg-knap:

Dim SQLStr as String, Resultat as String
Dim rs as DAO.Recordset
If Me!Årgang<>\"\" then
  SQLStr = \"Årgang = \" & Me!Årgang
end if
if Me!Model<>\"\" then
  if Len(SQLStr) > 0 then SQLStr = SQLStr & \" And \"
  SQLStr = SQLStr & \"Model = \'\" & Me!Model & \"\'\"
end if
If Len(SQLStr) = 0 then
  Me!txtResultat = \"Der er ingen ure, som matcher kriterierne!\"
else
  Set rs = Currentdb.Openrecordset(\"Select * From Ure Where \" & SQLStr, dbopensnapshot)
  do until rs.EOF
    Resultat = Resultat & rs![Reg Nr] & vbnewline
    rs.movenext
  loop
  Me!txtResultat = Resultat
end if

Visse felt- og tabelnavne skal sikkert tilpasses.
19. november 2001 - 11:56 #5
glemte lige at sige at koden benytter DAO, så hvis du bruger Access 2000 eller XP skal du lave en reference til \"Microsoft DAO 3.x Object Library\" i Tools->References fra VBA-editoren.
Avatar billede terry Ekspert
19. november 2001 - 12:01 #6
Thomas, an easy way to get around having to test for Len(SQLStr) > 0 is to start with SQL = \"1 \"

and then everything is \"AND .....\"

which is the same as \"SELECT 1 AND ....\"
Avatar billede terry Ekspert
19. november 2001 - 12:02 #7
which is the same as \"SELECT 1 AND ....\"
=
which is the same as \"SELECT * WHERE 1 AND ....\"
Avatar billede terry Ekspert
19. november 2001 - 12:04 #8
and obviously the FROM :o)
19. november 2001 - 12:08 #9
haha, yeah, I was wandering what kind of SQL, you were talking about - I had some problems recognizing the syntax ;o)

But, you are right. I just like to keep my SQL as clean as possible. In this case I wouldn\'t gain very much, but if I had more cirteria-fields, your suggestion is good. I will keep it in mind, thx ;o)
Avatar billede terry Ekspert
19. november 2001 - 12:28 #10
Place this function in a module:
Function fldIsEmpty(fld As Variant)
   
    If IsNull(fld) Or fld = \"\" Or IsNull(Len(fld)) Then
        fldIsEmpty = True
    Else
        fldIsEmpty = False
    End If
   
End Function


Then you could have this code in a buttons on click event.
For each field you want to search you have to have similar lines as these>

For numeric fields>
    If Not fldIsEmpty(Me!TheField) Then
        sWhere = sWhere & \" AND FieldInTable = \" & Me!TheField
    endif

For text fields>
    If Not fldIsEmpty(Me!TheField) Then
        sWhere = sWhere & \" AND FieldInTable = \'\" & Me!TheField & \"\'\"
    endif

Example:
Dim sWhere as String

    sWhere = \"1 \"

    If Not fldIsEmpty(Me!Årgang) Then
        sWhere = sWhere & \" AND Årgang = \" & Me!Årgang
    endif

    If Not fldIsEmpty(Me!Model) Then
        sWhere = sWhere & \" AND Model = \'\" & Me!Model & \"\'\"
    endif

    If Not fldIsEmpty(Me!Fabrikant) Then
        sWhere = sWhere & \" AND Fabrikant = \'\" & Me!Fabrikant & \"\'\"
    endif

    If sWhere = \"1 \" Then sWhere = \"\"

    DoCmd.OpenForm \"ResultForm\", , ,sWhere

Avatar billede access-idiot Nybegynder
19. november 2001 - 12:29 #11
Til ThomasJepsen> Har prøvet lidt med din kode, men kan ik rigtig få den til at virke, så har lige nogle spørgsmål til den. Hvordan ved min søgeknap, som befinder sig i formularen \"Søg\" at den skal søge i felterne som er i formularen \"Indtastning af ure\". I formularen \"Søg\" har jeg nogle bokse som matcher dem i \"Indtastning af ure\" bare med den forskel af man indtaster det den skal søge efter under dem i \"Søg\". Altså hvis jeg indtaster 1985 i boksen årgang i formularen \"Søg\" skriver den Reg. nr. 2 fordi jeg har et ur med årgang 1985 i indtastning nr. 2 i min formular med \"indtastning af ure\"

Tror at jeg fik det forklaret lidt bedre denne gang, ellers også er alle bare faldet fra :s :) 
Avatar billede terry Ekspert
19. november 2001 - 12:30 #12
This opens the result form showing only the records you are interested in.
Note: The result forms records source MUST contain the fields you are searching on.
Avatar billede access-idiot Nybegynder
19. november 2001 - 12:33 #13
Det forstår jeg ikke meget af Terry. Som sagt er jeg ikke godt til Access. Jeg bliver nødt til at have et rigtigt eksemple...
19. november 2001 - 12:34 #14
I mit eksempel er det sådan set ligegyldigt hvilke felter der er på de andre formulare. Jeg kigger kun på den aktuelle formular (søg-formularen) og derefter direkte i tabellen.

Du har en tekstboks på Søgformularen, som hedder txtresultat, ikk\'? Det er jo her resultatet vises.

Hvad sker der, når du prøver? Hvilken fejl får du?
Avatar billede terry Ekspert
19. november 2001 - 12:36 #15
It is a RIGTIG example!
OK, if you cant understand that then you can send me the DB and I will take a look.
dkTeBrSa@Europe.lego.com
Avatar billede access-idiot Nybegynder
19. november 2001 - 12:42 #16
Jo, jeg har en txtresultat...
Jeg får denne fejl: \"Der er en syntakstfejl i FROM-delsætningen\" ----------------
Set rs = CurrentDb.Openrecordset(\"Select * From Indtastning af Ure Where \" & SQLStr, dbopensnapshot)
19. november 2001 - 12:46 #17
Prøv:
Set rs = CurrentDb.Openrecordset(\"Select * From [Indtastning af Ure] Where \" & SQLStr, dbopensnapshot)

Access er nemlig ikke så glad for mellemrum i felt- og tabelnavne!
Avatar billede terry Ekspert
19. november 2001 - 12:51 #18
access-idiot> Do you want to see the result of your search in another formular or what?
Avatar billede access-idiot Nybegynder
19. november 2001 - 12:52 #19
ThomasJepsen> Nu får jeg bare en ny fejl, jeg må ikke prøve at sende databasen til dig, og du så tager et look på den ?
19. november 2001 - 12:54 #20
jo da: tj@makeiteasy.dk

/Thomas
Avatar billede terry Ekspert
19. november 2001 - 12:54 #21
access-idiot> Se mine kommentar 12:36:231
Du kan godt send databasen til mig!
Avatar billede access-idiot Nybegynder
19. november 2001 - 12:59 #22
Sorry Terry, det havde jeg ikke set...
Avatar billede terry Ekspert
19. november 2001 - 12:59 #23
no probelm :o)
Avatar billede terry Ekspert
19. november 2001 - 13:00 #24
probelm  = problem
Avatar billede terry Ekspert
19. november 2001 - 13:27 #25
mange tak, men for hvad?
Avatar billede access-idiot Nybegynder
19. november 2001 - 13:27 #26
Til Terry. Tak for dit tilbud om at jeg kunne sende til dig, men har selv fået løst det ved hjælp af ThomasJepsen\' svar...
Avatar billede terry Ekspert
19. november 2001 - 13:28 #27
OK :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester