我正致力于为我的公司将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;
答案 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;