专家: 
    关于DELPHI怎样向SYBASE的数值型字段赋值: 
sybase字段是numeric(16,4)怎样在DELPHI中用SQL赋值?DELPHI中是没有numeric类型的, 
好像DELPHI也不支持浮点型数据与数值型数据的转换。 
我试过如下操作: 
delphi中我定义的是变量是 
sumamount:Double; 
sumamount:=Query1.FieldByName('amount').AsFloat; 
insert into Chi(sumamount) values(sumamount); 
但是不行,请教高手指教下,小弟再次谢过了!

解决方案 »

  1.   

    sumamount:Double;  
    sumamount:=Query1.FieldByName('amount').AsFloat;  
    Query1.Close();
    Query1.SQL.Text:='insert into Chi(sumamount) values('+AnsiString(sumamount)+')';  
    Query1.ExecSQL();
      

  2.   

    第一种方案:直接将参数处理成字符串,查询分析器里什么样,语句就生成什么样
    比如查询分析器里是:
    [code=SQL]insert into Chi(sumamount) values(12.34)
    var
      sumamount: Double;
    begin
      sumamount := 12.34;
      Query1.SQL.Text := Format('insert into Chi(sumamount) values(%f)', [sumamount]);
      //Memo1.Text := Query1.SQL.Text;//调试的时候可以先将执行的语句输出,放到查询分析器里排错
      try
        Query1.ExecSQL;
      except
        // TODO : 处理数据库异常
      end;
    end;[/code]第二种方案:通过参数传递
    var
      sumamount: Double;
    begin
      sumamount := 12.34;
      Query1.SQL.Text := 'insert into Chi(sumamount) values(:sumamount)';
      try
        Query1.ParamByName('sumamount').AsFloat := sumamount;
        //ADOQuery1.Parameters.ParamByName('sumamount').Value := sumamount;//如果是ADO控件
        Query1.ExecSQL;
      except
        // TODO : 处理数据库异常
      end;
    end;
      

  3.   

    老哥啊:
    运行提示,
    incorrect syntax near '6.00'.(不正确语法近6 .00 ' 。)
    是怎么回事啊?
    两种都不行啊,顺便说一下,我的数据库是SYBASE 11.92的,不是sql server
      

  4.   

    还是不行的,我有两个数据库都是sybase
    字段是numeric(16,4)。
    怎样在sybase_1中取值赋值到sybase_2,用delphi 7编写此程序如何取值和赋值?
      

  5.   

    原代码如下:请帮我看看是怎么回事,谢谢!procedure TmainForm.SpeedButton2Click(Sender: TObject);
    var
       rq1,rq2,sqlstr,sqlstr1:string;
       id,code,re,barcode,validate:STRING;
       amount,costprice,price:Double;
    begin
    ip:=LocalIP;
    rq1:=formatdatetime('yyyymmdd',DateTime1.DateTime);
    rq1:=copy(rq1,1,8);
    rq2:=formatdatetime('yyyymmdd',DateTime2.DateTime);
    rq2:=copy(rq2,1,8);sqlstr:='select id,code,amount,costprice,price from accept_chi ';
    sqlstr:=sqlstr+' where id in (select id from accept_fath where';
    sqlstr:=sqlstr+' busdate>='''+rq1+''' and busdate<='''+rq2+''' and ISNULL(acctype,"A")="A") order by id';
           with Query1 do
             try
                 Query1.Close;
                 Query1.SQL.Clear;
                 Query1.SQL.Add(sqlstr);
                 Query1.Open;
                 if Query1.RecordCount > 0 then
                     begin
                     Query1.First;
                     while not Query1.Eof do
                        begin
                          ID:=Query1.FieldByName('id').AsString;
                          code:=Query1.FieldByName('code').AsString;
                          sumamount:=Query1.FieldByName('amount').AsFloat;
                          costprice:=Query1.FieldByName('costprice').AsFloat;
                          price:=Query1.FieldByName('price').AsFloat;
                          validate:=Query1.FieldByName('validate').AsString;
                          re:=Query1.FieldByName('re').AsString;
                          barcode:=Query1.FieldByName('barcode').AsString;
                          ///---插入数据
    sqlstr1:='insert into Accept_Chi (id,code,re,barcode,validate,amount,costprice,price)';
    sqlstr1:=sqlstr1+' values ('''+id+''','''+code+''','''+re+''','''+barcode+''','''+validate+''',amount,costprice,price)';                      Query2.Close;
                          Query2.SQL.Clear;
                          Query2.SQL.Add(sqlstr1);
                          Query2.ExecSQL;
                          next;
                          end;
                      Label4.Caption:='完成';
                      end  //判断是否有记录数
                      else begin  showmessage('无记录可转入!');  end;
             finally
             Query1.Close;
             Query2.Close;
             end;
    end;
      

  6.   

    楼主你认为这样SQL语句能执行吗?
    insert into Accept_Chi (id,code,re,barcode,validate,amount,costprice,price) values ('1','2','3','4','5',amount,costprice,price)
    这就是你提交的执行的语句。
    叫你改成参数形式。。
      

  7.   

    专家:
    我是改了,不行后还原的,你看看是不是这样的?如下:                    begin                       Code:=Query1.FieldByName('code').AsString;
                          Query1.ParamByName('amount').AsFloat:=sumamount; 
     
    sqlstr1:='insert into Accept_Chi (code,amount) values ('''+code+''',:amount)';                       Query2.Close; 
                          Query2.SQL.Clear; 
                          Query2.SQL.Add(sqlstr1); 
                          Query2.ExecSQL; 
                          next; 
                          end;
      

  8.   

    如果我写大概是这样,另外这样处理不如直接写个SQL....
    var
      count: Integer;
    begin
      ip := LocalIP;//???
      Query1.SQL.Text :=
    'SELECT *'#13#10 +
    'FROM Accept_chi'#13#10 +
    'WHERE Id IN ('#13#10 +
    '  SELECT Id'#13#10 +
    '  FROM Accept_fath'#13#10 +
    '  WHERE busdate >= :rq1 and busdate <= :rq2 and ISNULL(acctype, "A") = "A")'#13#10 +
    'ORDER BY Id';
      Query1.ParamByName('rq1').AsDateTime := DateTime1.DateTime;
      Query1.ParamByName('rq2').AsDateTime := DateTime2.DateTime;
      try
        Query1.Open;
      except
        //TODO : Error
        Exit;
      end;
      count := 0;
      Query1.First;
      while not Query1.Eof do
      begin
        Query2.SQL.Text :=
    'INSERT INTO Accept_Chi(Id, Code, Re, Barcode, Validate, Amount, Costprice, Price)'#13#10 +
    'VALUES(:Id, :Code, :Re, :Barcode, :Validate, :Amount, :Costprice, :Price)';
        Query2.ParamByName('Id').AsString := Query1.FieldByName('Id').AsString;
        Query2.ParamByName('Code').AsString := Query1.FieldByName('Code').AsString;
        Query2.ParamByName('Re').AsString := Query1.FieldByName('Re').AsString;
        Query2.ParamByName('Barcode').AsString := Query1.FieldByName('Barcode').AsString;
        Query2.ParamByName('Validate').AsString := Query1.FieldByName('Validate').AsString;
        Query2.ParamByName('Amount').AsFloat := Query1.FieldByName('Amount').AsFloat;
        Query2.ParamByName('Costprice').AsFloat := Query1.FieldByName('Costprice').AsFloat;
        Query2.ParamByName('Price').AsFloat := Query1.FieldByName('Price').AsFloat;
        try
          Query2.ExecSQL;
        except
          //TODO : Error
          Exit;
        end;
        Query1.Next;
        Inc(count);
      end;
      Query1.Close;
      if count > 0 then
        Label4.Caption := '完成'
      else Label4.Caption := '未更新';
    end;
      

  9.   

    先复制SQL语言,再赋值参数 -_-!!!