Avatar billede cyaegha Nybegynder
09. juli 2003 - 11:26 Der 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.
Avatar billede cyaegha Nybegynder
09. juli 2003 - 14:04 #1
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.
Avatar billede nop Nybegynder
11. juli 2003 - 10:50 #2
hvis du siger: sql.add('insert into test (test) values (null)');
så kan man godt, men det vidste du måske?
Avatar billede cyaegha Nybegynder
16. juli 2003 - 21:28 #3
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.
Avatar billede nop Nybegynder
17. juli 2003 - 09:27 #4
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 ?
Avatar billede cyaegha Nybegynder
18. juli 2003 - 12:41 #5
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..
Avatar billede nop Nybegynder
18. juli 2003 - 12:45 #6
Har du prøvet at ikke at skrive noget til parameterene som skal være null ?
Får jeg points -- så tak !
Avatar billede cyaegha Nybegynder
18. juli 2003 - 12:58 #7
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.
Avatar billede nop Nybegynder
18. juli 2003 - 13:03 #8
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 ?
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