none
VB6的ADODC物件問題 RRS feed

  • 問題

  • 各位大大:

                 如何將ADODC做連線close?我是使用VB6中的元件連結access,因為程式必須一直Run,不能Stop,但access的檔案增加很快,約一天要300MB,不知能不能有方法可以在線上壓縮修復access,在google及yahoo找到的都是使用程式建立ADO,一直找不到用元件的方式,不知要如何在線上close Adodc這個元件,請各位大大幫幫忙,謝謝

    2008年7月1日 上午 07:27

解答

  •  colud77 寫信:

    ,並將access的資料全部清除,雖然清除了access資料可是因為access的特性,如不做壓縮檔案,檔案會一直增加,直到2G的限制,會造成錯誤,而用Adodc的元件無法將資料庫連結中斷,想找看看有沒有方式可以將連結中斷?

     

    ?

    VB6 很久沒用,不確定。

    我有一隻 VB2005 的程式存取 Access 2000 的檔案,每天分上下午共新增及刪除 14 天前歷史資料各 1,799,450 筆 (列,7,197,800 cells) ,跑了 9 個月沒壓縮了,到現在還是只有 107 mb 。

    是直接下 Insert Into / Delete 的 SQL 命令。

    2008年7月4日 上午 03:26
    版主

所有回覆

  • 用 Set Adodc1.Recordset = Nothing 看看!

    不過你斷線之後,要再連線,不動用ADO就不知道要怎麼重新連線了!

    資料量那麼的大,建議還是改用SQL SERVER之類的資料庫!

     


     

    2008年7月1日 上午 09:44
  • Hi,

    可以參考這篇"修復及壓縮 ACCESS 的 MDB",不過有另外的問題,如果空間是因為對資料庫刪除資料產生出來的,那麼壓縮可以明顯看出效果;如果資料量很大,那用mdb有點吃力,mdb單一資料庫最大容量也只有2G而以。

     

    2008年7月1日 上午 09:46
    版主
  • Jones Jones:

            您提供的方式會造成錯誤,Recordset 方法(IAdodc物件)失敗。謝謝

     

     

     Jones Jones 寫信:

    用 Set Adodc1.Recordset = Nothing 看看!

    不過你斷線之後,要再連線,不動用ADO就不知道要怎麼重新連線了!

    資料量那麼的大,建議還是改用SQL SERVER之類的資料庫!

     


     

    2008年7月1日 上午 10:01
  • 因這是舊的程式,已經在Run了所以要在換成其他資料庫會很麻煩,所以只好看看能不能由程式去修改,您提供的方式我之前就使用了(第二個方式),可是它無法在access開啟中做修復的動作,請問還有什麼方式可以直接在線上壓縮修復ACCESS?謝謝

     

     bauann 寫信:

    Hi,

    可以參考這篇"修復及壓縮 ACCESS 的 MDB",不過有另外的問題,如果空間是因為對資料庫刪除資料產生出來的,那麼壓縮可以明顯看出效果;如果資料量很大,那用mdb有點吃力,mdb單一資料庫最大容量也只有2G而以。

     

    2008年7月1日 上午 10:06
  • 相然會有錯誤! 因為你把資料來源給斷了!

    要壓縮mdb一定要所有的連線斷線之後才能做壓縮,如果有人還連著就不能做壓縮!

    你知道壓縮作業是這樣做的嗎?

    假設你要壓縮A資料庫,它是將A內的資料騰到B資料庫產生一個新的資料庫,再把舊資料庫刪除,把新的資料庫改回舊的檔名!

    你說! 這樣可能在線上做縮嗎?

     

    2008年7月1日 上午 11:39
  • 這個我知道,所以我才要找能夠將Adodc close的方法,等close再做壓縮,然後再重新啟動,請問您有知道能將Adodc  元件close的方式嗎?還是有其他的做法?謝謝

     

     

     Jones Jones 寫信:

    相然會有錯誤! 因為你把資料來源給斷了!

    要壓縮mdb一定要所有的連線斷線之後才能做壓縮,如果有人還連著就不能做壓縮!

    你知道壓縮作業是這樣做的嗎?

    假設你要壓縮A資料庫,它是將A內的資料騰到B資料庫產生一個新的資料庫,再把舊資料庫刪除,把新的資料庫改回舊的檔名!

    你說! 這樣可能在線上做縮嗎?

     

    2008年7月1日 上午 11:46
  • Hi,

    有試過先把RecordSet Close掉之後再設為Nothing嗎?例如下面網頁中的方式

    http://bytes.com/forum/thread506372.html

     

    2008年7月1日 下午 12:03
    版主
  • 你無法關閉其他程式的連線。

     

    其它看法:

    Access 成長率是 10% ,你的檔案會長到 300 MB 是表示曾經有那個需求,除非是大量的錯誤資料或是不需要的 log 資料造成,否則縮小意義不大,壓到沒有空間時,下次新增資料時,又會直接成長 10% 。

     

    2008年7月1日 下午 12:16
    版主
  •  colud77 寫信:

    各位大大:

                 如何將ADODC做連線close?我是使用VB6中的元件連結access,因為程式必須一直Run,不能Stop,但access的檔案增加很快,約一天要300MB,不知能不能有方法可以在線上壓縮修復access,在google及yahoo找到的都是使用程式建立ADO,一直找不到用元件的方式,不知要如何在線上close Adodc這個元件,請各位大大幫幫忙,謝謝

    你要先說清楚,你的是如何操作你的資料庫的

    1.是一直增加資料,少量的修改資料這樣您壓縮資料庫的意義不大,

    因為你要搞清楚ACCESS所謂的資料庫壓縮是如何的(建立一個新的資料庫然後把全部活的資料寫入到新的資料庫,刪除原本包含活的跟死的資料檔案)

            方法:建立一個樣板資料庫,每日固定時間複製並操作該資料資料庫(base.mdb=>Data970701.mdb)

    2.一直新增刪除資料,那更簡單

    方法:建立一個樣板資料庫,每日固定時間刪除後複製並操作該資料資料庫(DataSC.mdb=>Data.mdb)

     

    只需另寫一支副程式,去處理這檔事,原始邏輯都不需要動,

    也都不需另加東西,只是簡單的檔案操作!

    1.系統暫停

    2.關閉連線

    3.刪除複製改名稱檔案

    4.重新建立連線

    5.OK

     

    2008年7月1日 下午 08:20
  • 您說的方式我有試過,但Adodc的元件並無close,只有用程式產生的Adodc物件才有close,很感謝您提供的方式,看樣子只好改程式了。

     

     

     bauann 寫信:

    Hi,

    有試過先把RecordSet Close掉之後再設為Nothing嗎?例如下面網頁中的方式

    http://bytes.com/forum/thread506372.html

     

    2008年7月3日 下午 11:49
  • 謝謝各位大大提供的方式,我目前run的程式是將Rs232收到的資訊寫入access 中,另外(每15分鐘或使用者設定的時間)會將資訊再匯出成CSV 檔,並將access的資料全部清除,雖然清除了access資料可是因為access的特性,如不做壓縮檔案,檔案會一直增加,直到2G的限制,會造成錯誤,而用Adodc的元件無法將資料庫連結中斷,想找看看有沒有方式可以將連結中斷?

    2008年7月4日 上午 12:00
  • 依你的作業方式,可以考慮:

    1.不知你接收RS232資料之後,是否需要再做後續的運算或處理?如果沒有的話,直接存入CSV就好了不用存資料庫!

    2.或者:ACCESS資料清除時不要使用DELETE將記錄刪除,而是將現有記錄的內容清空就好,下次存檔時不要用ADDNEW,

      直接找到空白記錄,更新就好,這樣或許MDB就不會一直長大!

     

    2008年7月4日 上午 12:57
  • 1.會有曲線圖,所以無法直接存成csv

    2.因使用者會多久匯出一筆無法知道,如果只清空內容,萬一筆數過多會有問題

     

     

     

     Jones Jones 寫信:

    依你的作業方式,可以考慮:

    1.不知你接收RS232資料之後,是否需要再做後續的運算或處理?如果沒有的話,直接存入CSV就好了不用存資料庫!

    2.或者:ACCESS資料清除時不要使用DELETE將記錄刪除,而是將現有記錄的內容清空就好,下次存檔時不要用ADDNEW,

      直接找到空白記錄,更新就好,這樣或許MDB就不會一直長大!

     

    2008年7月4日 上午 02:53
  • 使用元件的方式,找不到可以close連結的方法,是不是一定要改由程式New Obj的方式,才有close連結的方法?

    謝謝各位大大的提示,我還是先修改成程式的方式來close連結,感謝各位的幫忙。

    2008年7月4日 上午 02:59
  •  colud77 寫信:

    ,並將access的資料全部清除,雖然清除了access資料可是因為access的特性,如不做壓縮檔案,檔案會一直增加,直到2G的限制,會造成錯誤,而用Adodc的元件無法將資料庫連結中斷,想找看看有沒有方式可以將連結中斷?

     

    ?

    VB6 很久沒用,不確定。

    我有一隻 VB2005 的程式存取 Access 2000 的檔案,每天分上下午共新增及刪除 14 天前歷史資料各 1,799,450 筆 (列,7,197,800 cells) ,跑了 9 個月沒壓縮了,到現在還是只有 107 mb 。

    是直接下 Insert Into / Delete 的 SQL 命令。

    2008年7月4日 上午 03:26
    版主
  • 嗯,我是直接使用Addnew的方式增加,我將程式修改成SQL命令看看容量是否就不會再狂增,謝謝您的意見。

     

     璉璉 寫信:

     colud77 寫信:

    ,並將access的資料全部清除,雖然清除了access資料可是因為access的特性,如不做壓縮檔案,檔案會一直增加,直到2G的限制,會造成錯誤,而用Adodc的元件無法將資料庫連結中斷,想找看看有沒有方式可以將連結中斷?

     

    ?

    VB6 很久沒用,不確定。

    我有一隻 VB2005 的程式存取 Access 2000 的檔案,每天分上下午共新增及刪除 14 天前歷史資料各 1,799,450 筆 (列,7,197,800 cells) ,跑了 9 個月沒壓縮了,到現在還是只有 107 mb 。

    是直接下 Insert Into / Delete 的 SQL 命令。

    2008年7月5日 上午 04:24