01. september 2003 - 17:53Der 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?
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
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"
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
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
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...
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)
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...
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)
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
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...
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.... ? :/
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....
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
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 :)
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)
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)
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...
Synes godt om
Ny brugerNybegynder
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.