专家:
关于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);
但是不行,请教高手指教下,小弟再次谢过了!
关于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);
但是不行,请教高手指教下,小弟再次谢过了!
sumamount:=Query1.FieldByName('amount').AsFloat;
Query1.Close();
Query1.SQL.Text:='insert into Chi(sumamount) values('+AnsiString(sumamount)+')';
Query1.ExecSQL();
比如查询分析器里是:
[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;
运行提示,
incorrect syntax near '6.00'.(不正确语法近6 .00 ' 。)
是怎么回事啊?
两种都不行啊,顺便说一下,我的数据库是SYBASE 11.92的,不是sql server
字段是numeric(16,4)。
怎样在sybase_1中取值赋值到sybase_2,用delphi 7编写此程序如何取值和赋值?
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;
insert into Accept_Chi (id,code,re,barcode,validate,amount,costprice,price) values ('1','2','3','4','5',amount,costprice,price)
这就是你提交的执行的语句。
叫你改成参数形式。。
我是改了,不行后还原的,你看看是不是这样的?如下: 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;
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;