Avatar billede jih Nybegynder
01. september 2003 - 17:53 Der er 23 kommentarer og
1 løsning

hjælp til søgning

hey... jeg har lige lavet en database, med forskellige informationer.... og så har jeg lavet en form, som søger i den database... den her kode:

---

Private Sub item_search()
Dim search As String
End Sub



Private Sub Cmd_Click()
search = InputBox("Please enter the Item you wish to search for:")
Data1.Recordset.MoveFirst
Do Until Data1.Recordset.EOF
If Trim(UCase(Data1.Recordset.Fields("LastName"))) = Trim(UCase(search)) Then
Label1.Caption = "found LastName ''" & Trim(UCase(search)) & "''"
Else
End If
Data1.Recordset.MoveNext
Loop
End Sub

---

der hvor jeg har min "Label1.Caption = "found Last......"", vil jeg gerne have at det står alt hvad søgningen har fundet om den person... (fornavn, mobilnummer, email osv. osv. osv.. (som alt står i min tabel of course))... hvordan er det lige jeg gør det? og jeg vil gerne have at hvis den fx. søger efter "Novak", og den finder flere, med det efternavn, skal den ik kun skrive ét søgningsresultat ned.. men alle... hjælp?

//WebPsycho
Avatar billede -master-d- Nybegynder
01. september 2003 - 18:44 #1
Prøv med den her :

Private Sub Cmd_Click()
search = InputBox("Please enter the Item you wish to search for:")
Data1.Recordset.MoveFirst
Do Until Data1.Recordset.EOF
If Trim(UCase(Data1.Recordset.Fields("LastName"))) = Trim(UCase(search)) Then
Label1.Caption = Label1.Caption & Trim(UCase(search)) & "''"
Else
End If
Data1.Recordset.MoveNext
Loop
Label1.Caption = Label1.Caption & "found LastName ''"
End Sub
Avatar billede jih Nybegynder
01. september 2003 - 19:55 #2
det virker ik helt... jeg tror du har misforstået spørgsmålet... jeg vil gerne have, at hvis jeg fx søger efter "Hansen", finder den ALT om ALT der har Hansen som efternavn...

fx....
found LastName "HANSEN"
found FirstName "FirstName"
found PhoneNumber "(nummer)"
found Email "email@adresse.dk"
Avatar billede -master-d- Nybegynder
01. september 2003 - 20:08 #3
Private Sub Cmd_Click()
search = InputBox("Please enter the Item you wish to search for:")
Data1.Recordset.MoveFirst
Do Until Data1.Recordset.EOF
If Trim(UCase(Data1.Recordset.Fields("LastName"))) = Trim(UCase(search)) Then
Label1.Caption = Label1.Caption & "founc LastName" &Trim(UCase(search)) & "''"
Else
End If
Data1.Recordset.MoveNext
Loop
End Sub

Så skal den nok bare se sådan her ud.
Avatar billede mikker Nybegynder
01. september 2003 - 20:10 #4
Kan du ikke bruge InStr ? og så eventuelt en listbox eller lign ? :o)

- Mikker
Avatar billede -master-d- Nybegynder
01. september 2003 - 20:17 #5
mikker >> Det var da faktisk en rigtig god ide, det med listbox'en det andet kan jeg ikke se meningen i at bruge.
Avatar billede -master-d- Nybegynder
01. september 2003 - 20:19 #6
Hvis det nu var en listbox kunne det laves sådan her :

Private Sub Cmd_Click()
search = InputBox("Please enter the Item you wish to search for:")
Data1.Recordset.MoveFirst
Do Until Data1.Recordset.EOF
If Trim(UCase(Data1.Recordset.Fields("LastName"))) = Trim(UCase(search)) Then
List1.AddItem "founc LastName" & Trim(UCase(search)) & "''"
Else
End If
Data1.Recordset.MoveNext
Loop
End Sub
Avatar billede jih Nybegynder
01. september 2003 - 20:31 #7
hmmm..... du har faktisk givet mig det samme svar hver gang... alt giver det samme resultat... ok... hvad hvis jeg spørger sådan her.... er der en chance for at du kan finde FirstName, PhoneNumber og Email ved at skrive navnet på LastName??? fordi... det du giver mig, gør bare at "found LastName "HANSEN"" kommer frem igen og igen, hver gang du trykker på knappen... det er ikke det jeg spørger om... vil gerne vide, hvordan du skal gøre, hvis det skal være sådan, at når jeg trykker på Cmd-knappen, kommer der en besked, hvor der står at du skal indsætte efternavnet, du søger efter. og outputtet (det der kommer på den Label) skal være FirstName, PhoneNumber og Email... det er det jeg søger efter...
Avatar billede mikker Nybegynder
01. september 2003 - 20:59 #8
Med hensyn til InStr så misforstod jeg nok noget :o) Det var bare hvis man tastede HAN, så ville man finde alle der hed noget med HAN, så som HANSEN :o)

Men med hensyn til listboxen:

la = 15 - (Len(fornavn))
lb = 15 - (Len(efternavn))
ListBox1.AddItem UCase(fornavn) & Space(la) & UCase(fornavn) & Space(lb) & Ucase(adresse)

Ved ikke om du kan bruge det :o)

- Mikker
Avatar billede jih Nybegynder
01. september 2003 - 21:01 #9
har lavet lidt om på koden...

Private Sub Cmd_Click()
search = InputBox("Please enter the Last Name you wish to search for:")
Data1.Recordset.MoveFirst
Do Until Data1.Recordset.EOF
If Trim(UCase(Data1.Recordset.Fields("LastName"))) = Trim(UCase(search)) Then
Label1.Caption = "found LastName ''" & Trim(UCase(search)) & "''"
Else
End If
Data1.Recordset.MoveNext
Loop
End Sub

har lavet om på linien: search = ... (skrevet Last Name i stedet for Item)

men ja... jeg vil gerne have InStr, hvis I kan fortælle mig hvordan jeg gør det? og jeg prøver mikker's løsning nu...
Avatar billede mikker Nybegynder
01. september 2003 - 21:02 #10
Så kan du eventuelt bruge resultaterne således:


Private Sub ListBox1_Click()
TextBox1 = Trim(Mid(ListBox1.Text, 1, 15))
TextBox2 = Trim(Mid(ListBox1.Text, 15, 15))
End Sub
Avatar billede jih Nybegynder
01. september 2003 - 21:06 #11
koden:

la = 15 - (Len(fornavn))
lb = 15 - (Len(efternavn))
ListBox1.AddItem UCase(fornavn) & Space(la) & UCase(fornavn) & Space(lb) & Ucase(adresse)

gav ik noget resultat....... og jeg er nybegynder i VB, så jeg forstår ik hvad du mener med den sidste løsning? den med listbox1 textbox1 textbox2 osv..... uddyb? ;) og kan du ik lige skrive hvor de skal sættes ind henne? (det hele) (oz det du skrev sidst)
Avatar billede mikker Nybegynder
01. september 2003 - 21:07 #12
Private Sub Cmd_Click()
search = InputBox("Please enter the Last Name you wish to search for:")
Data1.Recordset.MoveFirst
Do Until Data1.Recordset.EOF
mypos = InStr(1, UCase(Data1.Recordset.Fields("LastName")), UCase(search), 1)
If mypos > 0 Then
la = 15 - (Len(fornavn))
lb = 15 - (Len(efternavn))
'herunder må du lige selv indsætte koderne for diverse felter :o)
ListBox1.AddItem UCase(fornavn) & Space(la) & UCase(fornavn) & Space(lb) & Ucase(adresse)
Else
End If
Data1.Recordset.MoveNext
Loop
End Sub


Private Sub ListBox1_Click()
TextBox1 = Trim(Mid(ListBox1.Text, 1, 15))
TextBox2 = Trim(Mid(ListBox1.Text, 15, 15))
End Sub


' ved ikke om du kan bruge det :o)
Avatar billede mikker Nybegynder
01. september 2003 - 21:11 #13
Det gælder om at holde tungen lige i munden :o) Men jeg har forsøgt at indsætte nogle databasefelter i mit forslag. Det er ikke en færdig løsning, men jeg håber du kan få en idé om hvar det er jeg vil hen ...

Private Sub Cmd_Click()
search = InputBox("Please enter the Last Name you wish to search for:")
Data1.Recordset.MoveFirst
Do Until Data1.Recordset.EOF
mypos = InStr(1, UCase(Data1.Recordset.Fields("LastName")), UCase(search), 1)
If mypos > 0 Then
la = 15 - (Len(Data1.Recordset.Fields("FirstName")))
lb = 15 - (Len(Data1.Recordset.Fields("LastName")))
'herunder må du lige selv indsætte koderne for diverse felter :o)
ListBox1.AddItem UCase(Data1.Recordset.Fields("FirstName")) & Space(la) & UCase(Data1.Recordset.Fields("LastName")) & Space(lb) & Ucase(Data1.Recordset.Fields("Address"))
End If
Data1.Recordset.MoveNext
Loop
End Sub

Private Sub ListBox1_Click()
TextBox1 = Trim(Mid(ListBox1.Text, 1, 15))
TextBox2 = Trim(Mid(ListBox1.Text, 15, 15))
End Sub


'Svært at teste når jeg ikke har din DB og derfor ikke kender navnene på dine felter.
'Det kræver naturligvis at du kan hente resultaterne fra din DB...

- Mikker
Avatar billede jih Nybegynder
01. september 2003 - 21:12 #14
hmmm.... hvad gør de TextBox'er der? og jeg fatter keine... :P altså... jeg har sat det ind lige som du sagde (mine egne fields i stedet for), men INTET kommer frem.... ? :/
Avatar billede mikker Nybegynder
01. september 2003 - 21:15 #15
Jeg bliver lige nødt til at konstruere en DBAse selv hvis jeg skal kunne hjælpe dig... Øjeblik :o)

- Mikker
Avatar billede jih Nybegynder
01. september 2003 - 21:15 #16
hmmm.... virker ik.... wtf?? altså.... mine fields er: LastName, FirstName, Email, PhoneNumber.... og jeg vil have dem allesammen oplyste... og jeg ved at det virker at hente dem....
Avatar billede jih Nybegynder
01. september 2003 - 21:16 #17
jeg kan også sætte min DB på internettet? tager ingen tid.... og sætte link herind.... 2 secs
Avatar billede jih Nybegynder
01. september 2003 - 21:17 #18
nej, det ku jeg så ik.... webbyen tillader ik databaser.... så du bliver vel nødt til at lave din egen... :/
Avatar billede jih Nybegynder
01. september 2003 - 21:27 #19
YEA!!... hehe... nu virker det... jeg havde lavet navnet "ListBox1" om til "ListBox".. :P men nu virker det... ;)
Avatar billede mikker Nybegynder
01. september 2003 - 21:34 #20
Ellers virker det her hos mig :o)

Private Sub Command1_Click()
search = InputBox("Please enter the Last Name you wish to search for:")
List1.Clear
Set dbbrugere = DBEngine.Workspaces(0).OpenDatabase("G:\test.mdb")
DoEvents
strSQL = ("SELECT * FROM navne")
Set rstbrugere = dbbrugere.OpenRecordset(strSQL, dbOpenForwardOnly)
Do While Not rstbrugere.EOF
mypos = InStr(1, UCase(rstbrugere!navn), UCase(search), 1)
If mypos > 0 Then
la = 20 - (Len(rstbrugere!navn))
lb = 20 - (Len(rstbrugere!adresse))
List1.AddItem UCase(rstbrugere!navn) & Space(la) & UCase(rstbrugere!adresse) & Space(lb) & UCase(rstbrugere!By)
End If
rstbrugere.MoveNext
DoEvents
Loop
End Sub
Avatar billede jih Nybegynder
01. september 2003 - 21:36 #21
ja, men det gider jeg ik at rode rundt med ;) ser alt for indviklet ud... :P jeg skal nok finde ud af det til sidst... man tager et skridt ad gangen.. ;) takker for hjælpen :)
Avatar billede mikker Nybegynder
01. september 2003 - 21:39 #22
la = 20 - (Len(rstbrugere!navn))
lb = 20 - (Len(rstbrugere!adresse))


Virker ikke efter hensigten :o( Det var meningen at det skulle lave samme mellemrum mellem resultaterne, da man ikke kan det med en simpel listbox...)
Men ihvertfald kan man søge i de forskellige resultater med nedenstående kode:

Private Sub ListBox1_Click()
Text1 = Trim(Mid(List1.Text, 1, 20))
Text2 = Trim(Mid(List1.Text, 20, 20))'hvis felterne er 20 tegn lange altså
End Sub

Det vil så give dig navn i text1 og adresse i text2 ... Tror jeg nok :o)

- Mikker
Avatar billede mikker Nybegynder
01. september 2003 - 21:43 #23
Takker for points :o) Hvis der er mere du skal have hjælp med, så kender du adressen... www.eksperten.dk :o)

Nu ved jeg ikke hvor meget du har rodet med SQL, men tag et kig på den kode jeg har smidt. Den befrier dig for DATA kontrollen og er i virkeligheden meget nem. Derudover skulle den også være hurtigere og så vil det hjælpe dig, hvis du en dag skulle finde på at lave en hjemmeside i eks. ASP med databaseadgang osv.

Blot en idé - jeg har selv nydt godt af det (Jeg har selv været DATA-kontrol afhængig engang)

- Mikker
Avatar billede jih Nybegynder
01. september 2003 - 21:46 #24
tjae... jeg prøvede med SQL, men der skete en eller anden fejl.... den ville ik godkende SELECT som en funktion eller hvad man skal kalde det....
skrev

strSQL = ("SELECT * FROM [contacts]") <--- der kom fejl i SELECT

det var så lidt mht. points...
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
Kurser inden for grundlæggende programmering

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