全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:893
推到 Plurk!
推到 Facebook!

ADO的初始化问题

尚未結案
mchakuna
一般會員


發表:41
回覆:45
積分:17
註冊:2004-01-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-02 16:53:49 IP:203.88.xxx.xxx 未訂閱
我用ADO连接到本地的access数据库并用query元件进行查询(约为一万条记录), 我发现第一次运行程序时, 总要等6,7秒后才能启动并弹出窗口。奇怪的是当我关掉程序第二次运行时立即可以启动不用等待。虽然只是数秒, 但总让人觉得别扭。我以前用BDE时, 相同的SQL语句, 相同的数据库并没有这个问题。 请教怎样解决呢? 谢谢!
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-03 09:12:10 IP:202.62.xxx.xxx 未訂閱
您好﹗    我覺得問題并不是出在ADO存取技術上﹒ 第一次Run程式時﹐編譯器會對所有程式檔進行編譯﹐產生和專案檔同名的執行 檔(EXE)或者動態連接函式庫(DLL)﹐然后再執行已經編譯完成的程式﹐相比 之下﹐其所需要的時間就會比較久一些﹒之后再Run程式(使用F9功能或 Run\Run功能)時﹐編譯器會只對修改過的檔案做編譯動作﹐隨即產生執行 檔﹐故Run的速度就會比較快﹒ 當然也有一些特殊的情況﹐當您選擇Project\Build Project功能時﹐無論是第 幾次Run程式﹐其都會對所有的程式檔做編譯動作﹐完完全全的重頭檢查編譯﹐ 再產生執行檔﹐故每次Run所用的時間都會較久一些﹐這個方法适用于當EXE檔 當了或出錯時﹐用此方法﹐即可將每一個Unit和Form都做編譯﹐再產生執行檔﹒    ========================= 我是您的朋友﹐有您真好﹗ ========================= 發表人 - cashxin2002 於 2004/12/03 09:14:21
------
忻晟
mchakuna
一般會員


發表:41
回覆:45
積分:17
註冊:2004-01-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-03 14:55:37 IP:203.88.xxx.xxx 未訂閱
引言: 您好﹗ 我覺得問題并不是出在ADO存取技術上﹒ 第一次Run程式時﹐編譯器會對所有程式檔進行編譯﹐產生和專案檔同名的執行 檔(EXE)或者動態連接函式庫(DLL)﹐然后再執行已經編譯完成的程式﹐相比 之下﹐其所需要的時間就會比較久一些﹒之后再Run程式(使用F9功能或 Run\Run功能)時﹐編譯器會只對修改過的檔案做編譯動作﹐隨即產生執行 檔﹐故Run的速度就會比較快﹒ 當然也有一些特殊的情況﹐當您選擇Project\Build Project功能時﹐無論是第 幾次Run程式﹐其都會對所有的程式檔做編譯動作﹐完完全全的重頭檢查編譯﹐ 再產生執行檔﹐故每次Run所用的時間都會較久一些﹐這個方法适用于當EXE檔 當了或出錯時﹐用此方法﹐即可將每一個Unit和Form都做編譯﹐再產生執行檔﹒ [/b][/blue]
我想我没有把问题说清楚, 首先, 我的程序已编译成EXE. "第一次运行"是指从系统启动时第一次运行那个EXE时特别慢, 如果你第一次运行后把它关掉, 直到关机前, 不管你重运行那个EXE多少次都是立即响应的, 没有问题. 所以我想是ADO初始化的问题.
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-03 15:05:46 IP:61.222.xxx.xxx 未訂閱
可能原因: 1.我覺得應該是您沒有在 程序一啟動時就 ADOConnection1.connected :=True; 因此等到要查詢時,才連接數據庫。 2. ADO 沒有補丁。是使用哪一版本呢? 我使用ADO很久,沒碰過類似您遇到的情形。
mchakuna
一般會員


發表:41
回覆:45
積分:17
註冊:2004-01-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-03 16:08:30 IP:203.88.xxx.xxx 未訂閱
引言: 可能原因: 1.我覺得應該是您沒有在 程序一啟動時就 ADOConnection1.connected :=True; 因此等到要查詢時,才連接數據庫。
不会啊, 我一启动就立即连接.
引言: 2. ADO 沒有補丁。是使用哪一版本呢? 我使用ADO很久,沒碰過類似您遇到的情形。
我也不清楚是什么版本, 反正是安装了Delphi 7.0后就一直用着没有什么补丁. 但我一直有一个问题, 我不太清楚怎样正确使用Query元件. 我的程序中只有一个ADOQuery, 而所有SQL查询都是通过这个元件进行的. 我的使用方法如下
 
  try
    with ADOQuery do
    begin
      Active := False;
      Close;
      if not Prepared then Prepared := True;
      with Sql do
      begin
        Clear;
        Add( ' ... ' ); // 加入我的SQL
        Open;
        // 其它处理代码
      end;
    end;
  finally
    Close;
    if Prepared then Prepared := False;
  end;
这样,我这样写有没有问题呢? 發表人 - mchakuna 於 2004/12/03 16:19:09
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-03 16:34:34 IP:61.222.xxx.xxx 未訂閱
請看 http://bdn.borland.com/article/0,1410,32337,00.html 下載補丁在 http://www.borland.com/products/downloads/registered/download_delphi.html# 不知道對你有沒有幫助。
mchakuna
一般會員


發表:41
回覆:45
積分:17
註冊:2004-01-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-03 17:16:56 IP:203.88.xxx.xxx 未訂閱
引言: 請看 http://bdn.borland.com/article/0,1410,32337,00.html 下載補丁在 http://www.borland.com/products/downloads/registered/download_delphi.html# 不知道對你有沒有幫助。
谢谢你的热心. 安装了似乎也不管用. :)
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-03 17:59:41 IP:202.62.xxx.xxx 未訂閱
您好﹗    將您的程式碼稍做修改如下﹕
begin
  try
    with ADOQuery do
    begin
      Active := False;//此句刪除﹐因為此句和以下的Close方法
      //是相同的作業﹐皆為斷開和資料庫的連接
      Close;
      if not Prepared then Prepared := True;//此句刪除
      with Sql do
      begin
        Clear;
        Add( ' ... ' ); // 加入我的SQL
        Open;
        // 其它处理代码
      end;
    end;
  finally
    Close;
    if Prepared then Prepared := False;//此句刪除  
end;
========================= 我是您的朋友﹐有您真好﹗ ========================= 發表人 - cashxin2002 於 2004/12/03 18:04:13
------
忻晟
系統時間:2024-09-17 17:00:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!