程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 關於SQLDMO的使用

關於SQLDMO的使用

編輯:Delphi
 

  關於SQLDMO的使用
  2005-4-5 16:13:52
  lw549

      sqldmo.dll是一個com,安裝SQLServer後位於Program FilesMicrosoft SQL Server80ToolsBinn
  文件夾下,關於sqldmo能做什麼的問題,不是本文討論的重點,這裡只說明如何使用該com,現在開始。
      第一步,導入sqldmo,生成類型說明文件。
      打開Delphi,Project菜單->Import Type Library...,在列表框中找到"Microsoft SQLDMO Object
  Library(Version 8.0)"(你的版本可能和我的不一樣),可以看到Class names列表框中顯示出相應的類,
  由於很多類名與vcl本身的類名沖突(比如TApplication,TTable等),需要修改類的名稱,不過不改也沒關系,
  這裡假設沒改,點擊按鈕"Create Unit",進入漫長的等待過程。由於生成的文件比較大(6萬多行的代碼,
  2.46M),這個過程很容易被誤認為死機,稍候片刻。
      第二步,修改Type Library文件。
      經過漫長的等待,終於得到了來之不易的SQLDMO_TLB.pas,然而,當我們Compile的時候卻發現這個單元
  無法編譯,提示大意為ID重復定義,這個簡單,把第二個ID改成xID,編譯通過。
      第三步,使用。
      在使用過程中,我發現在很多情況下,SQLDMO_TLB.pas中的類是不能用的,出現av錯誤。比如Restore,
  必須這樣使用:
    CreateOleObject('SQLDMO.Restore');
  SQLDMO提供的一些事件,在.net和vb環境下得到了非常好的語法支持,同樣的問題,在Delphi中卻異常麻煩,
  我們不得不維護IConnectionPointContainer,難道vb中一行代碼就能解決的問題Delphi中就沒有簡單的方
  法嗎?有!而且同樣簡單!答案就是EventSinkImp,可以到http://www.techvanguards.com免費下載。安裝也
  很簡單,一路Yes就ok了。
      EventSinkImp的實現是基於IConnectionPointContainer的,或者說,本來很麻煩的事由EventSinkImp
  代勞了。它的使用界面與Import Type Library類似,這裡就不多說了。Import以後,得到SQLDMOEvents.pas
  和SQLDMO_TLB.pas兩個文件。Compile通過,Install出錯。好事多磨^-^
      根據錯誤提示,可以發現TTable、TDataBase與系統中已有的類沖突,改成TSQLTable和TSQLDataBase。
      EventSinkImp的使用很簡單,根據幫助,在使用前,Connect一下就能順利掛接事件。
      在使用SQLDMOEvents.pas和SQLDMO_TLB.pas的單元中,如果出現類沖突,比如TApplication,記得在類
  前面加上單元名稱,比如Forms.Application就可以了

  寫下這些希望後來者有所借鑒,如果有其他更好的方法,歡迎告之,謝!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved