query.sql.add('insert into buy_sales(id,buy_sale,merchant,state,'+
                'start_date,send_date,end_date,prices)'+
                'values(:id,''b'',:merchant,:state,:start_date,:send_date,:end_date,:prices)');
其中start_date,send_date,prices可以为NULLquery.parambyname('id').asstring:=i_id.text;
 query.parambyname('merchant').asstring:=i_merchant.text;
 query.parambyname('state').asstring:=inttostr(radiogroup1.itemindex);
 try
  query.parambyname('start_date').asdatetime:=strtodate(i_start_date.text);
   query.parambyname('send_date').asdatetime:=strtodate(i_send_date.text); except
   application.MessageBox('时间格式错误!','错误',mb_ok);
   query.free;
   exit;该怎样写语句,才能使i_start_date.text i_seng_date.text为空,而且SQL语句能正确执行。谢谢还有请问一下:general sql error
operation violates check constrait buy_sale_check on view or table buy_sale
是什么错误,该如何解决

解决方案 »

  1.   

    赋值前判断一下,有一个函数VarIsNull,if VarIsNull(你的变量) then
      你的变量='';
    然后再写sql语句就ok了
      

  2.   

    if length(i_start_date.text)<>0 then
          query.parambyname('start_date').asdatetime:=strtodate(i_start_date.text);    if length(I_send_date.Text)<>0 then
           query.parambyname('send_date').asdatetime:=strtodate(i_send_date.text);    if length(i_prices.Text)<>0 then
          query.parambyname('prices').asinteger:=strtoint(i_prices.text);    if length(i_end_date.text)<>0 then
           query.parambyname('end_date').asdatetime:=strtodate(i_end_date.text);;
     except  但是,如果length(i_prices.text)=0 呢,该如何写语句
      

  3.   

    允许为空的,不过好象不管这个字段,SQL语句会出错。帮帮我
      

  4.   

    yyyy-mm-dd 日期格式
    if i_start_date.text <> '    -  -  ' then
      query.parambyname('start_date').AsString:=i_start_date.text;
      

  5.   

    try
      query.parambyname('start_date').asdatetime:=strtodate(i_start_date.text);
       query.parambyname('send_date').asdatetime:=strtodate(i_send_date.text); except
       application.MessageBox('时间格式错误!','错误',mb_ok);
     end;
     修改如下:
     try
    if trim(i_start_date.text)='' then
    adoquery1.Parameters.ParamByName('start_date').Value:=null
    else
    adoquery1.Parameters.ParamByName('start_date').Value:=strtodatetime(trim(i_start_date.text));
    if trim(i_send_date.text)='' then
    adoquery1.Parameters.ParamByName('send_date).Value:=null
    else
    adoquery1.Parameters.ParamByName('send_date').Value:=strtodatetime(trim(i_send_date.text));
    except
    application.MessageBox('时间格式错误!','错误',mb_ok);
    end;
      

  6.   

    to jjpan:
    还是不行啊
    field 'send_date' is of an unknown type还有一个问题:即便给全不字段赋了直,queryexec仍旧出错:
    general sql error
    operation violates check constrait buy_sale_check on view or table buy_sale
      

  7.   

    i_start_date.text或i_send_date.text空的话,你的SQL语句insert into 里就不要那两个字段了
      

  8.   

    还有一个问题:即便给全不字段赋了直,queryexec仍旧出错:
    general sql error
    operation violates check constrait buy_sale_check on view or table buy_sale
      

  9.   

    改为如下试试看:
    query.sql.add('insert into buy_sales(id,buy_sale,merchant,state,'+
                    'start_date,send_date,end_date,prices)'+
                    'values(:id,' + QuotedStr('b') +',:merchant,:state,:start_date,:send_date,:end_date,:prices)');
      

  10.   

    哪位大虾给解释一下
    general sql error
    operation violates check constrait buy_sale_check on view or table buy_sale是什么错误
      

  11.   

    query.sql.add('insert into buy_sales(id,buy_sale,merchant,state,'+
                    'start_date,send_date,end_date,prices)'+
                    'values(:id,''b'',:merchant,:state,'':start_date'','':send_date'','':end_date'',:prices)');
    ...
    query.parambyname('start_date').asstring:=i_start_date.text;
    query.parambyname('send_date').assrting:=i_send_date.text;