09. juli 2003 - 11:26Der er
7 kommentarer og 1 løsning
Variants med Null værdi, i en sql-sætning
Hvordan udgår jeg en fejlmeddelelse når jeg indsætter data i med parametre i en sql-sætning. Der er nogle gange hvor de skal have værdien NULL. Jeg indsætter i en Access-database. Såvidt jeg ved er det kun Variant der kan indeholde Null. Men jeg får fejlen: 'Parameter object is improperly defined. Inconsistent or incomplete information was provided.'
ved følgende kode:
var test:variant; begin test:=Null; with qrTemp do begin Close; sql.Clear; sql.Add('INSERT INTO Test (test)'); sql.Add('VALUES ( :test);'); Parameters.ParamByName('test').Value:=test; ExecSQL; end;
Der er ingen problemer ved at indsætte tal eller tekst.
I mit andet spørgsmål leger jeg med insertrecord. Den vil jeg helst undgå, således at jeg har al db-kommunikation i sql. Men insertrecord kan nemt indsætte Null-værdier.
ja. Meningen er at jeg tildeler mine variable en eller anden værdi, og i nogle tilfælde bliver det værdien Null. Tildelingen foregår noget før sql bliver fyret af. Det vil være lidt tosset at have mange forskellige sql-sætninger alt efter hvilke værdier der skal være null.
Hvad mener du med flere sql sætninger? Fx: (alle felter er integer her, hvis streng så skal der pinger omkring værdien)
sql:='insert into test_tabel (felt_a,felt_b,felt_c) values ('; if varIsNull(a) then sql:=sql+'null' else sql:=sql+intToStr(a); sql:=sql+','; if varIsNull(b) then sql:=sql+'null' else sql:=sql+intToStr(b); sql:=sql+','; if varIsNull(c) then sql:=sql+'null' else sql:=sql+intToStr(c); sql:=sql+')'; rs.add(sql); //kalder connection rs nu rs.execSql;
sql strengen bygges op ok kunne se sådan her ud: 'insert int test_tab (felt_a,_b,_c) values (123,null,45)'
Er det ikke hvad du vil have, eller har jeg misforstået noget ?
Det er lige præcis det jeg gerne vil have. Jeg havde stirret mig blind på at benytte parameters. Selvfølgelig skal der bygges en streng op spm du viser det. Lidt tosset at man ikke kan tildele en parameter værdien null..
En integer der initieres får tildelt hukommelsesadressen som udgangspunkt, så den virker ikke helt. Desuden er det kun typen variant der kan indeholde værdien null, og det giver fejl med den opbygning jeg har i spørgsmålet.
Ja men jeg mente at du skulle test hver enkelt variabel med varIsNull() og hvis tilfældet så undlade at lave: Parameters.ParamByName('test').Value:=test; fx: if not varIsNull(a) then Parameters.ParamByName('felt_a').Value:=a; if not varIsNull(b) then Parameters.ParamByName('felt_b').Value:=b;
har du prøvet noget lignene ?
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.