-1

我正在为我的公司将 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;
4

3 回答 3

2

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

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

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

于 2010-06-30T20:15:10.057 回答
1

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

with Tquery.Create(nil) do 
try
  ..  
  ..  
finally
  free;
end; 
于 2010-06-30T19:58:09.273 回答
1

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

于 2010-06-30T19:39:09.383 回答