【问题标题】:How to Convert a TParams (TQuery) Object to TParameters (ADO) object.?如何将 TParams (TQuery) 对象转换为 TParameters (ADO) 对象。?
【发布时间】:2017-06-01 15:09:38
【问题描述】:

我正在处理包含一些 TQuery 组件的遗留代码。我试图创建一个将 TQuery 参数转换为 TParameters 的函数,以便我可以将它们分配给 ADO 组件(如 ADOQuery 或 ADODataSet)的 Parameters 属性。

我尝试了以下我从互联网上获得的。

function ConvertToADOParms(Owner: TADODataset; aParams: TParams): TParameters;

var i: integer;

begin
// Convert a standard TParams object to an ADO-specific TParameters object
 Result :=nil;
 try
  if aParams = nil then exit;
  Result :=TParameters.create( Owner, TParameter);
  for i:=0 to aParams.count - 1 do
   begin
    if aParams[i] = nil then continue;
    with Result.AddParameter do
     begin
      Name := aParams[i].Name;
      Datatype :=aParams[i].DataType;
      Direction :=TParameterDirection(aParams[i].ParamType);
      Size :=aParams[i].size;
      Value :=aParams[i].value;
     end;
   end;
 except
  on e:exception do
    begin
     Result :=nil;
     showmessage('Could not convert standard parameter object to ADO parameter object: '+e.message);
    end;
 end;
end;

但我收到无效的类类型转换错误。当我调试代码时,我发现错误发生在 ADODB 单元中的这个函数上

function TParameters.GetCommand: TADOCommand;
begin
  Result := GetOwner as TADOCommand;
end;

请帮忙。我正在使用 Delphi 5

【问题讨论】:

  • @Victoria 非常感谢这对我有用。那么问题是由于覆盖造成的吗?

标签: delphi ado


【解决方案1】:

我不太了解函数原型。它为函数返回的集合请求所有者,因此恕我直言,它应该是独立的。

我会简单地摆脱它并直接使用传递的 ADO 对象进行操作。例如:

procedure FillParamsADO(Params: TParams; Dataset: TADODataset);
var
  i: Integer;
begin
  Dataset.Parameters.Clear;
  for i := 0 to Params.Count-1 do
  begin
    with Dataset.Parameters.AddParameter do
    begin
      Name := Params[i].Name;
      DataType := Params[i].DataType;
      Direction := TParameterDirection(Params[i].ParamType);
      Size := Params[i].Size;
      Value := Params[i].Value;
    end;
  end;
end;

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2018-02-13
    • 2011-05-26
    • 2017-10-20
    • 2015-03-18
    • 1970-01-01
    相关资源
    最近更新 更多