15. januar 2006 - 19:55Der er
42 kommentarer og 1 løsning
sql problem
Hjælp... Jeg har en tabel med en kolonne kaldet plac, der bestemmer placeringen af posterne. Når jeg sletter en eller flere af posterne, skal de efterfølgende værdier tælles ned, så rækken passer.
Den fjernede værdi har jeg gemt i variablen "oldi" og har forsøgt at gøre det med følgende kode, uden held:
j, antallet af poster der skal "rykkes"
for k:= 0 to j do begin Q1 := TADOCommand.Create(self); Q1.Connection := ADOConnection1; Q1.CommandText := 'UPDATE '+form1.aktivtarrangement.Caption+' SET plac = :oldi ' + 'WHERE plac > :oldi ORDER BY plac Limit 0,1'; Q1.Parameters.ParamByName('oldi').Value := oldi; Q1.Execute; Q1.Free; oldi := oldi+1; end;
Den kommer med følgende fejl: Parameterobjektet er forkert defineret. De angivne oplysninger er mangelfulde eller ikke ensartede.
for k := 0 to j do begin Q1 := TADOCommand.Create(self); Q1.Connection := ADOConnection1; Q1.CommandText := 'UPDATE ' + form1.aktivtarrangement.Caption + ' SET plac = :oldi WHERE plac > :oldi ORDER BY plac LIMIT 1'; Q1.Parameters.ParamByName('oldi').Value := IntToStr(oldi); Q1.Execute; Q1.Free; oldi := oldi+1; end;
Hmmm. Så er jeg gpodt nok lidt blank på hvad der kan være galt.
Fungere denne alternative version:
for k := 0 to j do begin Q1 := TADOCommand.Create(self); Q1.Connection := ADOConnection1; Q1.CommandText := 'UPDATE ' + form1.aktivtarrangement.Caption + ' SET plac = ' + IntToStr(oldi) + ' WHERE plac > ' + IntToStr(oldi) + ' ORDER BY plac LIMIT 1'; Q1.Execute; Q1.Free; oldi := oldi+1; end;
Det er faktisk en del af standard SQL-syntaksen, men tit ser man implemteringer hvor man kan udelade det (eller hvor det direkte giver fejl). Det er åbenbart ikke tilfældet her...
Hm ikke helt. Problemet er at jeg egentlig har to forskellige listbokse. En med en hel række data, hvor man kan dragge fra over til denne listboks, og samtidig bestemme placeringen i listboxen. og hvis der er huller og man begynder at sætte flere ind midt i listboxen, vil der kunne opstå dubletter. Tror jeg vælger at tømme tabellen hver gang og så tilføje det hele igen.
En ting, der undrer mig er at du vil have en 'order by' i et update-statement. Det er sikkert derfor, databasesystemet siger, der er en fejl. Prøv uden order-by.
Jeg lukker her. er ikke kommet videre, og fandt en helt anden løsning.
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.