2010-06-30 248 views
-1

我正在为我的公司将BDE转换为ADO。我已经运行到一个表达我无法弄清楚如何转换到ADO德尔福2010年BDE到ADO转换

这里是BDE表达除了一个....这是造成我发出部分的所有ADO变化是

与Tquery.Create(零)在一开始做。有任何想法吗?

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

我正确地认为BDE,ADO和Delphi 2010实际上与您的问题无关吗?你真的只是问什么“用Tquery.Create(零)做”的意思,对吧? – 2010-06-30 20:20:59

+1

代码是否正确?你正在创建一个TQuery并使用它的Eof属性(由于with),但是你正在迭代rs。此外,我会在where子句中使用参数,希望对输入进行检查和消毒,或者如果您的用户足够熟练(除了可能每次都迫使查询难以解析),可能会发生“有趣”的事情。 – 2010-06-30 21:14:38

+0

由于您的问题到最后,而不是您发布的代码,您应该修改您的问题或删除它,使StackOverflow更有用的地方,噪音更少。 – 2010-07-01 13:13:41

回答

1

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

+0

我解决了这个问题。数据库连接在create表单上打开,我有一个冗余问题 – James 2010-06-30 19:55:20

1

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

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

一个with声明所带来的给定对象的成员到的范围,这样你就可以提它的字段,方法和属性,而不必与他们所属的对象的名称要符合他们。请参阅文档中的With Statements

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

在下一个周围搜索不属于给定对象的标识符改为范围。它看起来像中唯一使用with块的标识符是Eof,所以你要转换的代码可能是错误的。找出代码假设要做的事情,然后为此编写新的ADO代码可能会更好。