Avatar billede perolsen Novice
19. november 1999 - 14:16 Der er 10 kommentarer og
1 løsning

søgning

Hej jeg skal lave en søgning på 3 felter på en gang ex ( 700/100X0,045
mine 3 søg felter er  dim fals  og my  men de høre ikke sammen som et felt

hjææææælp
Er der nogen som kan hjælpe mig her tak
Avatar billede erikjacobsen Ekspert
19. november 1999 - 14:27 #1
Søgning i array, fil, database ??? Lidt flere detaljer... tak
Avatar billede perolsen Novice
19. november 1999 - 15:04 #2
hej erikjacobsen
ja jeg har 3 felter som er

input felt 1 dim
input felt 2 fals
input felt 3 my
som er i en database
så vil jeg søg i et input felt
så jeg kan skrive
********* eks ***********
700 som er dim felt nr 1
100 som er fals felt nr 2
0,045 sem er felt nr 3

men jeg skal søge sådan her
    700/100X0,045

Avatar billede delphi Nybegynder
19. november 1999 - 15:06 #3
Som Erik Jacobsen skriver: Hvad skal du søge i?

Hvis du har indlæst dine felter i en linked liste, alá:

Type
  PPost = ^TPost;
  TPost = Record
    Felt1 : SomeType;
    Felt2 : SomeType;
    .
    .
    Next  : PPost;
  End;

Så kan du søge således:

Var
  PostArray : PPost;  // "Global" erklæring

Function FindPost(Find1, Find2, Find3 : SomeTypes) : PPost;
Var
  Temp : PPost;

  Function PostFound : Boolean;
  Begin
    If (Temp.Felt1 = Find1) And
      (Temp.Felt2 = Find2) And
      (Temp.Felt3 = Find3) Then
      Result := True
    Else
      Result := False;
  End;

Begin
  Result := Nil;
  Temp  := PostArray;

  If PostFound Then
    Result := Temp
  Else
    While (Found=Nil)And (Temp.Next <> Nil) Do
      Begin
        If PostFound Then Result := Temp;
        Temp := Temp.Next;
      End;
End;

Funktionen FindPost vil søge din liste igennem indtil den søgt post er fundet, og i såfald returnere den pågældende post, eller til enden af listen er nået, hvilket vil resultere i at retur værdien er Nil


Bruger du en database, så er det nok nemmest at benytte en TQuery.
Sæt componenten op med Alias osv. og brug så et SQL udtryk i retning af:


Function FindPost(Find1, Find2, Find3 : SomeTypes) : PPost;
Begin
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('Select *');
  Query1.SQL.Add('From DinTabelsNavn');
  Query1.SQL.Add('Where Felt1='+Find1);  // As strings - konvert evt.
  Query1.SQL.Add('  And Felt1='+Find2);
  Query1.SQL.Add('  And Felt1='+Find3);
  Query1.ExecSQL;

  If Query1.RecordCount>0 Then
    ShowMessage('Post fundet - extract fra query som normalt)
  Else
    ShowMessage('Ingen passende poster fundet.');
End;


TTable har også nogle søge mekanismer - se fx. i online hjælpen under TBDEDataset.Locate

Eksemplet herfra, som du næsten kan bruge direkte, er:

with CustTable do
  Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P','408-431-1000']), [loPartialKey]);


NiP/Delphi
Avatar billede perolsen Novice
19. november 1999 - 15:18 #4
tak jeg prøver
Avatar billede delphi Nybegynder
19. november 1999 - 15:20 #5
Ups: Du har skrevet imens jeg sad og 'forfattede':

Har jeg ret i at dit problem er at brugeren (dig selv?) skal kunne indtaste en søgestreng i formatet: 700/100X0,045, men at du skal søge disse oplysninger i tre forskellige felter?

I såfald skal du ha' opsplittet ('parset' på vestjydsk) input strengen i tre felter.  Det ville jeg gøre som:

Procedure ParseInput(InputStr : String; Var Felt1, Felt2, Felt3 : String);
// InputStr en string med formatet '700/100X0,045'
// Felt1 - Alt fra og med start til '/'
// Felt2 - Alt fra '/' til 'X'
// Felt3 - Alt fra 'X' til og med slut

Var
  Pos1 : Integer; // To hjælper variable for overskueligheden
  Pos2 : Integer;
Begin
  Pos1 := Pos('/', InputStr);  // Index til '/'
  Pos2 := Pos('X', InputStr);  // Index til 'X'

  If (Pos1=0) Or (Pos2=0) Then
    Raise Exception.Create('Error: Illegal InputString format.');

  Felt1 := Copy(InputStr, 1, Pos1);
  Felt2 := Copy(InputStr, Pos1+1,Pos2 - Pos1-1);
  Felt3 := Copy(InputStr, Pos2+1, Length(InputStr)-Pos2);
End;

Prøv det lige af - jeg har måske et '-1' eller '+1' for meget eller for lidt med i de der Copy() linier.

Derefter kan du søge på de tre felter i din database.

NiP/Delphi

Avatar billede perolsen Novice
19. november 1999 - 18:16 #6
hej delphi

ja du ret i at mit problem er at brugeren skal kunne indtaste en søgestreng i formatet: 700/100X0,045, men at man søge disse oplysninger i tre forskellige felter

er det ok hvis jeg sender
mit program til dig som er på 1,38 mb

Avatar billede perolsen Novice
23. november 1999 - 00:59 #7
hallo delphi
er det ok hvis jeg sender
mit program til dig som er på 1,38 mb
hvis du vil se på det
mvh per

Avatar billede delphi Nybegynder
23. november 1999 - 14:37 #8
Hejsa.

Jeg så lige at du havde skrevet - Jeg koncentrerer mig ellers kun om de åbne spørgsmål :)

Du kan såmænd godt sende dit program.  Email det til NiP@Danfoss.Com

Er mit svar, det med parseren, ikke nog til at splitte den indtastede linie?

NiP
Avatar billede delphi Nybegynder
24. november 1999 - 10:29 #9
Nok som nog?  Nogen gange går det altså for hurtigt!
Avatar billede perolsen Novice
24. november 1999 - 13:16 #10
hej delphi jeg har sent mit pro til dig
og 1000 tak for hjælpen
Avatar billede delphi Nybegynder
24. november 1999 - 15:57 #11
Program fixet.  Check din mail

NiP
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