Avatar billede krestionsen Nybegynder
19. maj 2007 - 09:48 Der er 12 kommentarer og
1 løsning

Lave en sql sætning ud fra en listbox

På min webside har jeg en listbox, hvor man kan vælge en hel masse ting og ud fra de ting man har valgt, skal jeg have lavet en sql sætning, som går ind i databasen og søger efter de ting, som man har valgt i listboxen:
SELECT tabel.id FROM tabel WHERE tabel.listbox = true
Avatar billede dr_chaos Nybegynder
19. maj 2007 - 15:04 #1
du skal lave noget med SELECT tabel.id FROM tabel WHERE tabel.id in (enkommaseperaret liste.)
Din kommasepareret liste skal indeholde selectedvalues fra liste boxen.
Avatar billede krestionsen Nybegynder
19. maj 2007 - 19:32 #2
Det synes jeg, at jeg har prøvet, men har ikke rigtig fået det til at virke, men har du et eksempel?
Avatar billede krestionsen Nybegynder
19. maj 2007 - 20:02 #3
Problemet er også, at hver ting man vælger i listboxen har hver sin row i tabellen, så det er ikke samme row, man skal søge i.
Avatar billede dr_chaos Nybegynder
19. maj 2007 - 20:30 #4
Mener du ikke column ?
Avatar billede dr_chaos Nybegynder
19. maj 2007 - 20:37 #5
Altså du kan gøre noget i denne stil:
SELECT * FROM tabel p WHERE p.id IN (1,2,3,4,5)
Avatar billede dr_chaos Nybegynder
19. maj 2007 - 20:38 #6
string t = string.Empty;
            ListBox lb = new ListBox();

            lb.Items.Add("1");
            lb.Items.Add("2");
            lb.Items.Add("3");
            lb.Items.Add("4");
            lb.Items.Add("5");
            lb.Items.Add("6");
            lb.SelectedIndices.Add(0);
            lb.SelectedIndices.Add(1);
            lb.SelectedIndices.Add(2);
            lb.SelectedIndices.Add(3);
            lb.SelectedIndices.Add(4);
            lb.SelectedIndices.Add(5);
            for (int i = 0; i < lb.SelectedItems.Count; i++)
            {
                if (i == lb.SelectedItems.Count - 1)
                {
                    t += lb.SelectedItems[i].ToString();
                }
                else
                {
                    t += lb.SelectedItems[i].ToString()+",";
                }
            }
Avatar billede dr_chaos Nybegynder
19. maj 2007 - 20:38 #7
Bruger du parametre.
Avatar billede dr_chaos Nybegynder
19. maj 2007 - 20:45 #8
Det skulle være:
  string t = string.Empty;
        ListBox lb = new ListBox();

        lb.Items.Add("1");
        lb.Items.Add("2");
        lb.Items.Add("3");
        lb.Items.Add("4");
        lb.Items.Add("5");
        lb.Items.Add("6");
        lb.SelectedIndex = 5;

        for (int i = 0; i < lb.Items.Count; i++)
        {
            if(lb.Items[i].Selected)
            {
                t += lb.Items[i].Value + ",";
            }
        }
        t= t.Remove(t.Length - 1);
Avatar billede krestionsen Nybegynder
19. maj 2007 - 20:56 #9
Ja, jeg bruger parametre f.eks:
SELECT * FROM tabel p WHERE p.et IN (parameter1) and p.to IN (parameter2) and p.tre IN (parameter3)
Avatar billede dr_chaos Nybegynder
19. maj 2007 - 21:12 #10
Jeg har lavet en test på en af mine sql servere:
declare @test varchar(500)

SET @test ='1,2,3,4,5'

SELECT * FROM produktgrundtabel p
JOIN fn_Split(@test,',') x ON x.[value]= p.produktnr
Avatar billede dr_chaos Nybegynder
19. maj 2007 - 21:12 #11
fn_split er en funktion som returnerer en tabel:
CREATE FUNCTION dbo.fn_Split (@sText varchar(8000), @sDelim varchar(20) = ' ')
RETURNS @retArray TABLE (idx smallint Primary Key, value varchar(8000))
AS
BEGIN
DECLARE @idx smallint,
@value varchar(8000),
@bcontinue bit,
@iStrike smallint,
@iDelimlength tinyint
IF @sDelim = 'Space'
BEGIN
SET @sDelim = ' '
END
SET @idx = 1
SET @sText = LTrim(RTrim(@sText))
SET @iDelimlength = DATALENGTH(@sDelim)
SET @bcontinue = 1
IF Not ((@iDelimlength = 0) or (@sDelim = 'Empty'))
BEGIN
WHILE @bcontinue = 1
  BEGIN
  IF CHARINDEX(@sDelim, @sText)>0
  BEGIN
  SET @value = SUBSTRING(@sText,1, CHARINDEX(@sDelim,@sText)-1)
    BEGIN
        if(RTRIM(@value)<>'')
        INSERT @retArray (idx, value)
        VALUES (@idx, @value)
    END
  SET @iStrike = DATALENGTH(@value) + @iDelimlength
  SET @idx = @idx + 1
  SET @sText = LTrim(Right(@sText,DATALENGTH(@sText) - @iStrike))
  END
  ELSE
  BEGIN
  SET @value = @sText
    BEGIN
        if(RTRIM(@value)<>'')
        INSERT @retArray (idx, value)
        VALUES (@idx, @value)
    END
  SET @bcontinue = 0
  END
  END
END
ELSE
BEGIN
WHILE @bcontinue=1
  BEGIN
  IF DATALENGTH(@sText)>1
  BEGIN
  SET @value = SUBSTRING(@sText,1,1)
    BEGIN
        if(RTRIM(@value)<>'')
        INSERT @retArray (idx, value)
        VALUES (@idx, @value)
    END
  SET @idx = @idx+1
  SET @sText = SUBSTRING(@sText,2,DATALENGTH(@sText)-1)
  END
  ELSE
  BEGIN
        if(RTRIM(@sText)<>'')
        INSERT @retArray (idx, value)
        VALUES (@idx,  @sText)
  SET @bcontinue = 0
  END
END
END
RETURN
END
Avatar billede krestionsen Nybegynder
20. maj 2007 - 16:00 #12
Det var lige hvad jeg skulle bruge, så læg et svar og få nogle point:)
Avatar billede dr_chaos Nybegynder
20. maj 2007 - 17:05 #13
svar :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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