Avatar billede whynot Nybegynder
25. november 2003 - 12:07 Der 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?
Avatar billede snowball Novice
25. november 2003 - 12:22 #1
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;


Snowball
Avatar billede snowball Novice
25. november 2003 - 12:27 #2
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.

Snowball
Avatar billede whynot Nybegynder
26. november 2003 - 13:55 #3
Hejsa der.. he he.. det virker jo fino :)

...et lille supplerende spørgsmål.. kan jeg gemme mit array i et felt i en database?
Avatar billede snowball Novice
26. november 2003 - 15:19 #4
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;

Snowball
Avatar billede whynot Nybegynder
26. november 2003 - 15:35 #5
fantastisk..

Mange tak skal du have Snowball..!
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