2010-06-30 120 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代碼可能會更好。