返回列表 上一主題 發帖

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

回復 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

回復 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

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

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

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

本帖最後由 alexliou 於 2012-5-12 06:29 編輯
回復  toxin alexliou 發表於 2012-5-11 15:44

* 代表所有的欄位
你已經寫了要選取哪些欄位  
所以 * 就不需要了
要改成
SELECT  件號 , 單價, 廠商 FROM 單價明細 WHERE 件號  = '00002E-A'  ORDER BY 1 DESC
或是
SELECT * FROM 單價明細 WHERE 件號  = '00002E-A'  ORDER BY 1 DESC

PS.  ORDER BY 1 DESC 似乎也不需要
因為Where 條件已指定件號'00002E-A'
查詢結果只有一種件號
就沒有排序的必要了
Alex

TOP

        靜思自在 : 【時間成就一切】時間可以造就人格,可以成就事業,也可以儲積功德。
返回列表 上一主題