返回列表 上一主題 發帖

[發問] VBA 用表格內某欄位資料查詢ACCESS資料

[發問] VBA 用表格內某欄位資料查詢ACCESS資料

上網爬過很多文但是都沒辦法成功
可以請各位大大幫個忙嗎
查詢結果存入同列之後

PS一開始就卡住了...型別 'ADODB.Connection' 未定義。= =網路上寫的工具-引用也不行....

回復 1# toxin

這有兩個方法解決

1)    在Excel VBA 使用到 ADO 前先嵌入 ADO Library
其做法為在VBA編輯器中, 使用 工具>設定引用項目
這樣會帶出 "設定引用項目"視窗
於其中核取 "Microsoft ActiveX Data Objects x.x Library"選項 (選擇最新版本的ADO)
如此即可於VBA中取用ADO的函式庫
   
2)    如果你沒有將 ADO Library 嵌入
在宣告時你就不能宣告物件變數為ADODB .Connection  ( ex. Dim DB As ADODB.Connection)
而只能宣告為一般物件變數  (Dim DB As Object)
建立時你不能使用  Set DB = New   ADODB.Connection 這樣的語法
而要用   DB = CreateObject("Adodb.Connection")
Alex

TOP

'引用 Microsoft ActiveX Data Objects 2.x Library
Dim Cnnl As New ADODB.Connection '你是不是忘了new
Cnnl.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=D:\TEST.mdb; "
若是我回答,使您滿意,請您讓我知道!                  
若是我的回覆,您仍有其他見解,也請您不嗇指教!

TOP

不好意思
如果含密碼的話要加什麼?

TOP

回復 4# toxin
假如你用的是Access 的databae
connection string 應該是以下的型式
"Driver={Microsoft Access Driver (*.mdb)};Dbq=d:\databasename.mdb;Uid=yourid;Pwd=yourpassword"
或是
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\databasename.mdb;Jet OLEDB:Engine Type=5;Uid=yourid;Pwd=yourpassword"   這樣也行
Alex

TOP

回復 5# alexliou
ok了
感謝大大
可以另外詢問一下
要查詢排序後第一筆資料
網路上講access可以用一般sql指令
但是下了
SELECT TOP 1 件號, 單價, 廠商 FROM 單價明細 WHERE 件號  = '00002E-A'  ORDER BY 1 DESC

SELECT * 件號, 單價, 廠商 FROM 單價明細 WHERE 件號  = '00002E-A'  ORDER BY 1 DESC
一樣都會出現3筆排序過的資料= =

另外查詢條件'00002E-A'可以用range代替嗎?

TOP

1. Access 的確支援SQL語法
SELECT TOP 1 件號, 單價, 廠商 FROM 單價明細 WHERE 件號  = '00002E-A'  ORDER BY 1 DESC
看起來沒有錯 應該要顯示第一筆資料

2. 查詢條件'00002E-A'可以用range內的值代替
Alex

TOP

回復 7# alexliou
感謝alexliou大大
還是有以下幾個問題
1.理論上應該是只有一筆資料,但是實際上件號相同的都會出現= =
2.請問一下要如何查詢?都失敗說= =
如果方便的話可以幫小弟看一下檔案嗎?
如附件 0510.rar (16.88 KB)
先在此感謝大大

TOP

回復 8# toxin
1. 在與Order by合用時, TOP 述詞不會在相等值中做選擇。
在您的例子裡, 有三筆資料的件號為00002E-A
Top述詞並非根據資料在資料庫的順序來區分誰先誰後,
而是依據Order By 欄位的值來區分
所以它無法區分這三筆的先後順序, 所以查詢會傳回 3 筆記錄

2. 傳回的recordset中有三筆紀錄, 如果要針對個別紀錄做處理
可以利用迴圈配合recordset的Movenext方法與EOF屬性來處理

3.您也可以改變Order by的欄位, ex .改為 Order by 廠商
如果同一件號同一廠商只有一筆紀錄
那就會只傳回一筆紀錄
如果同一件號同一廠商還是有多筆紀錄
但價格都不同
就可以再增加一個order by欄位
如 Order by 廠商, 單價 desc
Alex

TOP

回復 9# alexliou

感謝alexliou大大回覆
說明的很清楚...但是依資料輸入情況來講...好像不太能夠靠其他條件做排序找到所需要的資料
所以只好全部都先寫出來了....要靠inputbox來決定要那一筆資料...
不過碰到一件怪事...把Select  top 1改成Select  *
就會碰到錯誤= =...所以暫時先下Select  top 100(因某些件號明明有好幾筆資料卻只出現一筆)

TOP

        靜思自在 : 【時日莫空過】一個人在世間做了多少事,就等於壽命有多長。因此必須與時間競爭,切莫使時日空過。
返回列表 上一主題