DELPHI 2010中的BDE到ADO转换

时间:2010-06-30 19:31:27

标签: delphi ado bde

我正致力于为我的公司将BDE转换为ADO。我遇到了一个表达式,我无法弄清楚如何转换为ADO

这是BDE表达式,所有ADO更改除了一个....导致我问题的部分是

用Tquery.Create(nil)开头做。有什么想法吗?

  with Tquery.Create(nil) do
        begin
            cmd := TStringList.Create;
            cmd.Add('select top 3 csnttext from casenotesint');
            cmd.Add('where csntcaseid = ''' + scasenum + ''' ');
            cmd.Add('and csntclmid = ''' + sclmnumber + ssplitcode + ''' ');
            cmd.Add('order by csntseqnum desc');
            rs := fConnection.Execute(cmd.Text);
            cmd.Free;

            while not Eof do
            begin
                SAPrintReport1.Tab(0.5);
                SAPrintReport1.Print(rs.Fields.Item('CsNtText').Value);
                SAPrintReport1.NewLine;
                rs.next;
            end;
            rs.Close;
        end;
        if cbxSpacer.checked then
        begin
            SAPrintReport1.NewLine;
            SAPrintReport1.NewLine;
            SAPrintReport1.NewLine;
        end;

3 个答案:

答案 0 :(得分:2)

with语句将给定对象的成员放入范围,因此您可以提及其字段,方法和属性,而无需使用它们所属对象的名称限定它们。请参阅文档中的With Statements

放入with语句有效的一件事是刚创建的对象。就是这种情况。代码创建一个新的TQuery对象,并立即隐式使用其所有成员。对该对象的引用不存储在任何局部变量中,因此没有明确的方式来引用它,但这并不会打扰编译器。 (但它可能会打扰人类,这也是人们不鼓励在Delphi中使用with的原因之一。)

在下一个周围范围内搜索不属于给定对象的标识符。看起来TQuery块中使用with的唯一标识符是Eof,因此您转换的代码无论如何都可能是错误的。最好只弄清楚代码假设要做什么,然后为此编写新的ADO代码。

答案 1 :(得分:1)

您尝试将TQuery更改为TADOQuery,然后会发生什么?

答案 2 :(得分:1)

IMO,你应该使用try..finally..free..end; 否则,您正在创建查询并且永远不会释放它。 即第2行应该是“尝试”。

with Tquery.Create(nil) do 
try
  ..  
  ..  
finally
  free;
end;