返回列表 上一主題 發帖

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

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

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

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

0116.rar (16.98 KB) 回復 11# alexliou

請問一下
如果件號後面還有東西
假設
00002E-A 1
00002E-A 2
如附件
這兩筆也要一起顯示的話
我原本設定的語法
strSQL = "SELECT TOP 10 件號, 單價, 廠商 FROM 單價明細 WHERE 件號 = '00002E-A' "
請問要怎麼改?

TOP

回復 11# alexliou


   了解了
感謝alexliou大大

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

回復 9# alexliou

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

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

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

TOP

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

2. 查詢條件'00002E-A'可以用range內的值代替
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

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

        靜思自在 : 改變自己是自救,影響別人是救人。
返回列表 上一主題