25. november 2003 - 12:07Der er
4 kommentarer og 1 løsning
SQL SELECT på baggrund af en string eller array
Hejsa igen
Jeg vil blot høre hvordan I ville løse efterfølgende problem.. fordi jeg aner ikke hvad man gør for at det bliver smartest.
Anyway.. here goes.
Lad os sige at vi har en database med følgende felter og værdier:
databasenavn= prototype
indeks navn 1 bent 2 hanne 3 brian 4 tove 5 sven
..jeg ved at jeg gerne vil have navnene som har 3 og 5 som indeksværdi.
Altså at man fyrer følgende sql-statement af:
SELECT * FROM prototype WHERE indeks=3 OR indeks=5 ORDER BY indeks ASC
Men.. lad os nu sige at vi har 30 den ene gang og næste gang har vi måske kun 5 forskellige værdier som man ønsker at fyre ovenstående sql-statement struktur på.. jamen så blev det:
SELECT * FROM prototype WHERE indeks=3 OR indeks=5 OR indeks= ......osv osv... ORDER BY indeks ASC
Hvordan pokker gør jeg det?
..problemet er opstået fordi jeg er ved at "konvertere" en php-løsning om til DELPHI.. og i PHP/ASP jamen der kan du genere sql-kode ved at lave "echo" direkte i sql-statementet.. og derved danne en fuldstændig sql-statement. Kan man også det i DELPHI?.. eller skal man over i Arrays?.. eller hvordan ville I gøre?
Et hurtigt bud kunne være nedenstående som netop benytter et array hvor værdierne ligger i.
function CreateSQL(Values: Array of Integer):String; var i: Integer; SQL: String; begin SQL := 'SELECT * FROM prototype WHERE'; For i := 0 To Length(Values) -1 Do SQL := SQL + ' indeks=' + IntToStr(Values[i]) + ' OR';
Delete(SQL,Length(SQL) - 2,3); //Skal lige ha' fjernet den sidste OR SQL := SQL + ' ORDER BY indeks ASC'; Result := SQL; end;
procedure TForm1.Button1Click(Sender: TObject); var ValueArray: Array[0..9] of Integer; i: Integer; begin For i := 0 To 9 Do ValueArray[i] := Random(50);
ShowMessage(CreateSQL(ValueArray)); end;
procedure TForm1.FormCreate(Sender: TObject); begin Randomize; end;
Dit array skal du jo selvfølgelig så bare lige gøre dynamisk og så sætte størrelsen med SetLength(MyArray, 20); hvor MyArray er dit array og 20 er størrelsen.
Du kan bruge en ArrayToStr funktion som nedenstående og så gemme værdierne som en komma seperet tekst i databasen.
function ArrayToStr(pArray: Array of Integer):String; var i: Integer; tmpstr: String; begin tmpstr := ''; For i := 0 To Length(pArray) -1 Do tmpstr := tmpstr + IntToStr(pArray[i]) + ',';
Delete(tmpstr,Length(tmpstr), 1); Result := tmpstr; end;
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.