線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2592
推到 Plurk!
推到 Facebook!

使用DAO 3.6元件,DBEngine無法使用??

尚未結案
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-04 17:29:28 IP:61.218.xxx.xxx 未訂閱
各位前輩請教一下: 使用DAO 3.6元件,DBEngine無法使用?? DAO 3.6在vb中的用法如下 於專案設定使用項目MS DAO 3.6 並可執行以下程式 Public Sub aa() Dim myDB As New DAO.DBEngine Dim mydata As DAO.Database Set mydata = myDB.OpenDatabase("D:\修改設計作業\Link.mdb") Debug.Print mydata.TableDefs(0).NAME end sub 但在DELPHI中用Import Type Library 產生DAO_TLB,但在元件盤中沒有看到DBEngine元件但有其它的如TableDefs等 如用以下程式會錯誤 myDAO :DBEngine; myDataBase :DataBase; begin myDataBase:=myDAO.OpenDatabase('C:\Data.mdb','','',''); <<這行 錯誤訊息: Project JkDAO.exe raised exception class EAccess Violation With Message 'Access Voiolation at address 00484DA1 in module 'JKDAO.exe'. Read of address 00000000'. Process stopped. Use Step Or Run to Continue 我想是myDAO沒有Create吧,但BEngine也沒有Create的東東 不知如何是好?? 非常非常的謝謝你,因為有你這世界變的更美好 ☆ ^_^ ☆ °∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒ ﹒‧°∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒﹒‧°∴°﹒☆°.
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-13 16:08:36 IP:202.39.xxx.xxx 未訂閱
小弟也試了一下, 不過元件盤上可以出現 DBEngin 這個元件 小弟的做法: 1.Project -> Import Type Library 2.選 Microsoft DAO 3.6 Object Library (Version 5.0) 3.底下的 Class names 中的 TTableDef、TField、TIndex 改成 TDAOTableDef、TDAOField、TDAOIndex 4.最後點 Install 按鈕完成安裝. 您的程式碼改成如下:
var
  myDAO: TDBEngine; // 這邊多加個 T
  myDataBase: DataBase;
begin
  myDataBase := myDAO.OpenDatabase('C:\Data.mdb'); 
end;
試試看可不可以? --- Have you ever wondered what it would be like?
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-13 23:47:38 IP:61.70.xxx.xxx 未訂閱
引言: 小弟也試了一下, 不過元件盤上可以出現 DBEngin 這個元件 小弟的做法: 1.Project -> Import Type Library 2.選 Microsoft DAO 3.6 Object Library (Version 5.0) 3.底下的 Class names 中的 TTableDef、TField、TIndex 改成 TDAOTableDef、TDAOField、TDAOIndex 4.最後點 Install 按鈕完成安裝. 您的程式碼改成如下:
var
  myDAO: TDBEngine; // 這邊多加個 T
  myDataBase: DataBase;
begin
  myDataBase := myDAO.OpenDatabase('C:\Data.mdb'); 
end;
試試看可不可以? --- Have you ever wondered what it would be like?
想不到還有人會回答(很久了) 謝謝 hagar 版主幫我測試 但我依你的做法再做一次,但元件盤中還是少了 DBEngin 這個元件 我的是Delphi7 >>var myDAO: TDBEngine; // 這邊多加個 T 我試會錯誤 後來改為 var myDAO: DBEngine; myDataBase: DataBase; begin myDAO:=CoDBEngine.Create ; myDataBase:=myDAO.CreateDatabase('C:\abc.mdb','',''); 是可以Create但使用時真的問題多多 如果在VB中用CreateDatabase 可以只用第一個參數如CreateDatabase('C:\abc.mdb') 但Delphi一定三個參都要放入,但要於入使什麼???? Delphi在使用Dll時常有這問題!!受不了!! 我後來改用ADOX來代替DAO但也是有問題,試了好久才找到!! 各位前輩能否教導一下,要如何做才好?? 謝謝 hagar 前輩,也謝謝你,電腦面前的你,感恩
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-14 08:45:51 IP:202.39.xxx.xxx 未訂閱
1.小弟用的是 Delphi 5, 所以不知 Delphi 7 為何不行? 2.或者您不要用 Import Type Library 的方式 改用 Variant 的方式來做, 轉貼一小段如下:
var 
  Access, db, tb: Variant; 
  i: Integer;
begin 
// open the Access application 
  try 
    Access := GetActiveOleObject('DAO.DBEngine.35'); 
  except 
    Access := CreateOleObject('DAO.DBEngine.35'); 
  end;     // open the database 
   db := access.OpenDatabase('C:\My Documents\Books.mdb');    // navigate by tables
  for i := 0 to db.TableDefs.Count-1 do
    tbl := db.TableDefs[i];
...      Access := Unassigned;
end; 
--- Have you ever wondered what it would be like?
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-14 10:33:48 IP:61.218.xxx.xxx 未訂閱
引言: 1.小弟用的是 Delphi 5, 所以不知 Delphi 7 為何不行? 2.或者您不要用 Import Type Library 的方式 改用 Variant 的方式來做, 轉貼一小段如下:
var 
  Access, db, tb: Variant; 
  i: Integer;
begin 
// open the Access application 
  try 
    Access := GetActiveOleObject('DAO.DBEngine.35'); 
  except 
    Access := CreateOleObject('DAO.DBEngine.35'); 
  end;     // open the database 
   db := access.OpenDatabase('C:\My Documents\Books.mdb');    // navigate by tables
  for i := 0 to db.TableDefs.Count-1 do
    tbl := db.TableDefs[i];
...      Access := Unassigned;
end; 
--- Have you ever wondered what it would be like?
謝謝 hagar前輩 我上次就是在找是否有如VB的CreateObject 的東東 原來是CreateOleObject及GetActiveOleObject 真是太謝謝了,我來試試有問題再來請教 另外再請教一下: myDataBase := myDAO.OpenDatabase('C:\Data.mdb'); 及 db := access.OpenDatabase('C:\My Documents\Books.mdb'); 你都不用給第二及第三個參數嗎?因我這樣都會錯誤不能執行 改為myDataBase:=myDAO.CreateDatabase('C:\abc.mdb','',''); 才可以執行?? 真的好奇怪?? 謝謝 hagar前輩,真的感謝啦!!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-14 17:52:32 IP:202.39.xxx.xxx 未訂閱
引言: 另外再請教一下: myDataBase := myDAO.OpenDatabase('C:\Data.mdb'); 及 db := access.OpenDatabase('C:\My Documents\Books.mdb'); 你都不用給第二及第三個參數嗎?因我這樣都會錯誤不能執行 改為myDataBase:=myDAO.CreateDatabase('C:\abc.mdb','',''); 才可以執行?? 真的好奇怪?? 謝謝 hagar前輩,真的感謝啦!!
1.用 OpenDatabase 時小弟這邊不用給其它引數 2.用 CreateDabase 時需要 這裏有一篇利用 ADO/DAO 來 Create/Compact Access Database 的文章 您參考一下: http://www.tech521.com/show_data.asp?tid=465 --- Have you ever wondered what it would be like?
系統時間:2024-07-04 5:50:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!