procedure AddPara;
begin
with ADOQry.Parameters do
begin
tmpPos := FNameList.IndexOfObject(TObject(STOCK));
if tmpPos > -1 then
with AddParameter do
begin
Name := 'GPMC_O' + FParameterID;
Direction := pdInput;
DataType := ftWideString;
Value := FNameList[tmpPos];
end;
end;
with AddParameter do
begin
Name := 'GPMC' + FParameterID;
Direction := pdInput;
DataType := ftWideString;
Value := EdtStockName.Text;
end; with AddParameter do
begin
Name := 'QDFS_S' + FParameterID;
Direction := pdInput;
DataType := ftinteger;
Value := Integer(CBGetMode_Stock.Items.Objects[CBGetMode_Stock.ItemIndex]);
end; with AddParameter do
begin
Name := 'RZSJ_S' + FParameterID;
Direction := pdInput;
DataType := ftDateTime;
Value := DTPStock.Date;
end; with AddParameter do
begin
Name := 'GQSL' + FParameterID;
Direction := pdInput;
DataType := ftInteger;
Value := SENum.Value;
end; with AddParameter do
begin
Name := 'SFSS' + FParameterID;
Direction := pdInput;
DataType := ftBoolean;
Value := RGMarket.ItemIndex = 1;
end; with AddParameter do
begin
Name := 'ZGB' + FParameterID;
Direction := pdInput;
DataType := ftInteger;
Value := NECapital.Value * MoneyUnit;
end; if Trim(EdtTrade.Text) = '' then
EdtTrade.Text := ' '; with AddParameter do
begin
Name := 'SSHY' + FParameterID;
Direction := pdInput;
DataType := ftWideString;
Value := EdtTrade.Text;
end; with AddParameter do
begin
Name := 'JYZK' + FParameterID;
Direction := pdInput;
DataType := ftInteger;
Value := Integer(CBFare.Items.Objects[CBFare.ItemIndex]);
end; with AddParameter do
begin
Name := 'PGJ_S' + FParameterID;
Direction := pdInput;
DataType:= ftFloat;
Value := NEEvaluate_Stock.Value * MoneyUnit;
end; with AddParameter do
begin
Name := 'SFGH_S' + FParameterID;
Direction := pdInput;
DataType := ftBoolean;
Value := RGTransfer_Stock.ItemIndex = 1;
end;
end;调用 这个过程添加参数,后来又添加了SQL语句到ADOQUERY.SQL,然后再调用这个过程添加参数
但执行时发现,除了最后一次添加的参数,前面添加的参数数据类型全部变成了ftWideString,就好像被什么覆盖了一样,但参数对象还在,值也对,就是DATATYPE不对了。这是为什么?
begin
with ADOQry.Parameters do
begin
tmpPos := FNameList.IndexOfObject(TObject(STOCK));
if tmpPos > -1 then
with AddParameter do
begin
Name := 'GPMC_O' + FParameterID;
Direction := pdInput;
DataType := ftWideString;
Value := FNameList[tmpPos];
end;
end;
with AddParameter do
begin
Name := 'GPMC' + FParameterID;
Direction := pdInput;
DataType := ftWideString;
Value := EdtStockName.Text;
end; with AddParameter do
begin
Name := 'QDFS_S' + FParameterID;
Direction := pdInput;
DataType := ftinteger;
Value := Integer(CBGetMode_Stock.Items.Objects[CBGetMode_Stock.ItemIndex]);
end; with AddParameter do
begin
Name := 'RZSJ_S' + FParameterID;
Direction := pdInput;
DataType := ftDateTime;
Value := DTPStock.Date;
end; with AddParameter do
begin
Name := 'GQSL' + FParameterID;
Direction := pdInput;
DataType := ftInteger;
Value := SENum.Value;
end; with AddParameter do
begin
Name := 'SFSS' + FParameterID;
Direction := pdInput;
DataType := ftBoolean;
Value := RGMarket.ItemIndex = 1;
end; with AddParameter do
begin
Name := 'ZGB' + FParameterID;
Direction := pdInput;
DataType := ftInteger;
Value := NECapital.Value * MoneyUnit;
end; if Trim(EdtTrade.Text) = '' then
EdtTrade.Text := ' '; with AddParameter do
begin
Name := 'SSHY' + FParameterID;
Direction := pdInput;
DataType := ftWideString;
Value := EdtTrade.Text;
end; with AddParameter do
begin
Name := 'JYZK' + FParameterID;
Direction := pdInput;
DataType := ftInteger;
Value := Integer(CBFare.Items.Objects[CBFare.ItemIndex]);
end; with AddParameter do
begin
Name := 'PGJ_S' + FParameterID;
Direction := pdInput;
DataType:= ftFloat;
Value := NEEvaluate_Stock.Value * MoneyUnit;
end; with AddParameter do
begin
Name := 'SFGH_S' + FParameterID;
Direction := pdInput;
DataType := ftBoolean;
Value := RGTransfer_Stock.ItemIndex = 1;
end;
end;调用 这个过程添加参数,后来又添加了SQL语句到ADOQUERY.SQL,然后再调用这个过程添加参数
但执行时发现,除了最后一次添加的参数,前面添加的参数数据类型全部变成了ftWideString,就好像被什么覆盖了一样,但参数对象还在,值也对,就是DATATYPE不对了。这是为什么?
解决方案 »
- 团队开发问题
- [求助]用SQL语句可以写入带Blob Field字段的数据库记录吗?
- 如何判断一个存储过程是否成功执行
- 哪里能下载到李维的《Delphi 7高效数据库程序设计》全书??
- 怎么改变paradox表ab.db一个字段的长度?
- 要从保存数据表内容的.dat文件中取出内容怎么办呢?..
- 如何屏蔽MDI主窗体的ALT+F4?
- 一个菜菜的问题 三层架构中所说的执行 MTS Explorer or Component Services 如何执行,我找不到exe?
- qtintf.dll这是个什么文件?
- win98的sn号,谢谢
- 想把StringGrid控件中某一个格画上两种颜色,上面1/4为绿色,下面的为红色,请问代码该怎么写?
- 通过ADOQUERY 查询完毕了,想直接修改出某一个字段的值怎么弄?
begin
tmpPos := FNameList.IndexOfObject(TObject(STOCK));
if tmpPos > -1 then
with AddParameter do
begin
Name := 'GPMC_O' + FParameterID;
Direction := pdInput;
DataType := ftWideString;
Value := FNameList[tmpPos];
end;
end; ------------------------------这个地方对应的是with ADOQry.Parameters do
因为要循环添加SQL和参数,但每次SQL改变时都会重新生成PARAMETER对象,所以全部重设为ftWideString类型了。
有没有什么办法保持原类型不变?
var
tmpquery: TQuery;
i: integer;
begin
try
tmpquery := TQuery.Create(nil); with tmpquery do
begin
DatabaseName := Fdm.DatabaseName;
Close;
sql.Clear;
sql.Add(sqlText);
if (Assigned(paramvalues)) and (paramvalues.Count > 0) then
begin
for i := 0 to paramvalues.Count - 1 do
begin
Params[i].Value := paramvalues.Strings[i];
end;
end;
try
ExecSQL;
except end;
end;
finally
tmpquery.Free;
end;
end;