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不对了。这是为什么?
解决方案 »
- IWMenu的下拉单怎么被form上的IWComboBox覆盖掉
- 怎样在DBGrid中用代码实现记录的颜色
- 急急急!!!蔽闭方法,请教高手
- delphi用起来真是太爽了! 我忍不住在上班时间抽个空来发个贴子说上一说! :)
- 如何在报表控件中 查找控件(如TQRLabel)以实现 在报表中动态改变 报表输入
- 100分求TMS AdvPanel源码版
- 转换???
- 三层从表数据怎么样添加
- 操作系统不同,为什么字体显示不一样?怎样解决这个问题?
- 关于资源文件中多个图片的调用,难啊!
- 想把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;