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

ACCESS 查詢錯誤

尚未結案
crazycat
一般會員


發表:22
回覆:20
積分:8
註冊:2003-04-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-25 12:28:04 IP:220.132.xxx.xxx 未訂閱
D5+ACS2000 SQL_MESS:='Select * from 會員 where 性別="男"'; 出現 SQL_MESS:='Select * from 會員 where 性別="男" and 地區="北區"; 若我 下兩個條件則會錯誤變成 "...預期個數2...." 類推..三個條件 錯誤變成 "...預期個數2...." 是那兒錯誤?還是ACCESS的問題?
stellos
中階會員


發表:24
回覆:84
積分:51
註冊:2004-06-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-25 13:47:31 IP:61.60.xxx.xxx 未訂閱
那你改成 SQL_MESS="Select * from 會員 where 性別 like '男'"; 試試
crazycat
一般會員


發表:22
回覆:20
積分:8
註冊:2003-04-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-25 14:02:30 IP:220.132.xxx.xxx 未訂閱
我要做多條件搜尋. 所以光是"LIKE"並不能滿足阿(我還有一些 < > 的條件還未加入) 況且: SQL_MESS:='Select * from 會員 where 性別like "男"'; Query1.SQL.Clear; Query1.SQL.Add(SQL_MESS); Query1.Prepare; Query1.CLOSE; Query1.OPEN; 是不是ACCESS用中文做欄位名稱會有問題?
stellos
中階會員


發表:24
回覆:84
積分:51
註冊:2004-06-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-25 16:44:48 IP:61.60.xxx.xxx 未訂閱
我沒實際測試用中文欄名是否有問題 不過還有個方法可以複製Access裡的SQL語法 在Access的查詢頁新增個查詢選[設計檢視] 點選你的資料表,底下一格格的地方 欄位選好,準則填好 再選功能表列的[檢視]->[SQL檢視] 若是你所需要的就剪貼一下到你的程式中 相信對你有幫助
crazycat
一般會員


發表:22
回覆:20
積分:8
註冊:2003-04-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-25 17:13:38 IP:220.132.xxx.xxx 未訂閱
我的[檢視] 沒有 [ src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=20588527&CC=460453">
stellos
中階會員


發表:24
回覆:84
積分:51
註冊:2004-06-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-26 13:03:18 IP:220.138.xxx.xxx 未訂閱
你要先選[查尋]頁,你還停在[資料表]頁 當你新增了查尋就有
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-02-26 13:45:13 IP:220.132.xxx.xxx 未訂閱
Hi, 會出現這個錯誤訊息, 應該是 會員 資料表內沒有性別這個欄位, 或是欄位名稱打錯了, 你先確認一下!
crazycat
一般會員


發表:22
回覆:20
積分:8
註冊:2003-04-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-03-01 12:04:40 IP:220.132.xxx.xxx 未訂閱
stellos 您好 已找到 SQL的語法位置..但是只有 SELECT XX,XX,XX FROM XX 並無法得知 WHERE 以後的 SQL 指令...這樣我依然無法得知條件搜尋到底那兒錯了 >
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-03-01 12:27:18 IP:202.62.xxx.xxx 未訂閱
引言: 我要做多條件搜尋. 所以光是"LIKE"並不能滿足阿(我還有一些 < > 的條件還未加入) 況且: SQL_MESS:='Select * from 會員 where 性別like "男"'; Query1.SQL.Clear; Query1.SQL.Add(SQL_MESS); Query1.Prepare; Query1.CLOSE; Query1.OPEN; 是不是ACCESS用中文做欄位名稱會有問題?
您好﹗ 這個錯誤是因為您把"性別"和運算元"like"寫在一起了﹐SQL語句在執行時只找到名為"性別like"的欄位名稱﹐而沒有找到"like"運算元﹐將其中間加個空格﹐寫成"性別_like"即可(紅色下划線處代表空格) ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-03-01 13:32:49 IP:61.61.xxx.xxx 未訂閱
使用什麼元件? 可使用 ADO 元件試試, ADOConnection 可透過 Jet 直接連接 Access 看你的訊息是透過 ODBC 我用 ADO 試連包含中文表格名、中文欄位名的 SQL, 並無錯誤 且直接連 Access 會比透過 ODBC 來得有效率
stellos
中階會員


發表:24
回覆:84
積分:51
註冊:2004-06-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-03-01 16:21:59 IP:61.60.xxx.xxx 未訂閱
SELECT 會員.ID, 會員.性別 FROM 會員 WHERE (((會員.性別)="男")); 這是我剪貼Access的SQL語法 或者你的資料庫沒連成功呢? 試試下面這段程式碼(我試過有成功!!):   db1.mdb的密碼設1234 ADOQuery1的Connection屬性設ADOConnection1    ADOConnection1->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=1234;Data Source=Db1.mdb;Mode=ReadWrite;Persist Security Info=False";    ADOConnection1->Open(); AnsiString sqlstr="SELECT * FROM 會員 WHERE 性別='男'"; ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add(sqlstr); ADOQuery1->Open(); //// ADOQuery1->Close(); ADOConnection1->Close();
crazycat
一般會員


發表:22
回覆:20
積分:8
註冊:2003-04-29

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-03-01 19:37:59 IP:220.132.xxx.xxx 未訂閱
不好意思..我是從MSSQL 轉戰 ACCESS.所以很習慣用BDE做連結 並以 Tdatabase 作為我的物件...所以連ACCESS時會透過BDE BDE自然會存取ODBC    現在重新學起 聽從Brian77建議.改用ADO.並以相同的語法用於stellos的程式碼 沒有錯誤.但是..... 不好意思...最後兩問 PASSWORD='); Database1.DatabaseName :=' place="北區" >0 THEN begin WHILE (Query1.EOF=False) DO BEGIN S:=Query1.FieLdByName('NAME').AsString; I:=Query1.FieLdByName('AGE').AsInteger; .... ..... //////以上..即可循序的讀出我要的欄位資料 Query1.NEXT; END; END; ================================================================ 我自己試的結果: ADOQuery1.First ; WHILE (ADOQuery1.EOF=False) DO BEGIN S:= ADOQuery1.FieldByName('被害人姓名').AsString; ADOQuery1.Next; END; 為何? 第2問 ADO裡的SQL與法是否與DATABASE Access物件Query語法一樣? 用ADOQuery1.ExecSQL ;即可達到我所需求的SQL指令? 謝謝指導
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-03-01 19:47:36 IP:203.95.xxx.xxx 未訂閱
1. 問題應該是 d5 的 bug, 請參考, http://delphi.ktop.com.tw/topic.php?topic_id=60379 2. SQL Command 基本上都是相同的. 至於用 open 或是 ExecSQL 就看是否傳回 dataset 囉. 3. 基本上你的問題, 應該和 ado 或 bde 的存取方式無關, 照理說是先解決你原來的問題再轉 ado 會好一些, 請問你將 'Select * from 會員 where 性別="男"' 這個 command 貼在 access 的 query 中, 是否是正常的呢?
stellos
中階會員


發表:24
回覆:84
積分:51
註冊:2004-06-08

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-03-01 23:15:50 IP:220.138.xxx.xxx 未訂閱
crazycat您的寫法應該沒錯才對 您應該只貼一小段程式碼 可否貼完整些才能幫您看清潔哪錯
crazycat
一般會員


發表:22
回覆:20
積分:8
註冊:2003-04-29

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-03-02 09:38:15 IP:220.132.xxx.xxx 未訂閱
我的習慣是.學新的東西時.比較不會邊學邊問..全部搞懂時.才開始正式寫 所以我現在都只放於TForm1.FormCreate..以便一執行就知道有沒有問題 程式如下: procedure TForm1.FormCreate(Sender: TObject); VAR S       :STRING; I       :Integer; begin I:=0; ADOConnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=南港所.mdb;Persist Security Info=False'; ADOConnection1.Open ; ADOQuery1.SQL.Clear ; ADOQuery1.SQL.Add ('Select * from [基本資料] where 性別="男" order by "日期"'); ADOQuery1.Open(); StringGrid1.Rowcount:=0; ADOQuery1.First ; WHILE (ADOQuery1.EOF=False) DO BEGIN I:=I+1; StringGrid1.Rowcount:=I; StringGrid1.Cells [0,I-1]:=IntToStr(ADOQuery1.FieldByName('編號').AsInteger); StringGrid1.Cells [1,I-1]:=   ADOQuery1.FieldByName('被害人姓名').AsString;       ADOQuery1.Next;   END;//WHILE (Query1.EOF=False) DO ADOQuery1.Close(); ADOConnection1.Close(); end; ================================================================== 如果是D5 的BUG 那麼如 http://delphi.ktop.com.tw/topic.php?topic_id=60379所說 ADO SevicePack 2 那兒下載? D7不知道會不會有這樣的問題? ================================================================== timhuang兄 我將最前的語法'Select * from 會員 where 性別="男"' 貼於access 的 query 是正常的 ==================================================================
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-03-02 12:00:51 IP:61.61.xxx.xxx 未訂閱
我用 D5 試了一下 ADO 及你的程式碼, 並無該錯訊, 可能也是未 Update 的關係 更新檔案可至 http://info.borland.com/devsupport/delphi/ 下載 使用 ADO 時, 可利用一個 TADOConnection 加一個 TADOQuery 進行 SELECT/UPDATE/DELETE 等動作 如果是新寫的系統, 又時間允許的話, 建議還是換成 ADO 來寫, 效能比 BDE ODBC 好很多 (MS-SQL 和 Access 都合適採用 ADO, Paradox 則合適採 BDE)
crazycat
一般會員


發表:22
回覆:20
積分:8
註冊:2003-04-29

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-03-02 15:30:23 IP:220.132.xxx.xxx 未訂閱
改用ADO     出現 根據http://delphi.ktop.com.tw/topic.php?topic_id=60379 說是D5的BUG 依據 Brian77 說的 至 http://info.borland.com/devsupport/delphi/ 我下載安裝 http://info.borland.com/devsupport/delphi/mdac26.html 問題來了...D5開啟時 ADO 元件不見了.. 重新安裝
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-03-02 23:02:36 IP:220.132.xxx.xxx 未訂閱
引言: ================================================================== 如果是D5 的BUG 那麼如 http://delphi.ktop.com.tw/topic.php?topic_id=60379所說 ADO SevicePack 2 那兒下載? D7不知道會不會有這樣的問題? ================================================================== timhuang兄 我將最前的語法'Select * from 會員 where 性別="男"' 貼於access 的 query 是正常的 ==================================================================
D5 的 bug 在該篇文章內即有對應的連結, 是 borland 網站提供的 update, 安裝後會發生 ado 元件不見? 弟沒有碰過這樣的現像, 應該是不會才對. D6 以後的版本, ado 是沒有這個問題的, D7 也沒有!!
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#19 引用回覆 回覆 發表時間:2005-03-03 09:29:17 IP:61.61.xxx.xxx 未訂閱
在 http://info.borland.com/devsupport/delphi/mdac26.html 有提到, 它要求 D5 需要 Update 到 Pack 1 才適用該更新檔 請連結 http://info.borland.com/devsupport/delphi/downloads/index.html 裡頭有數支 Update 從下往上有 ADO Update, Delphi 5 Update, ADO Update 2 依序更新 我有使用 D5,D7,D8 D7,D8 都沒這個問題, D5 的話, 安裝後就接著上述三項安裝, 也沒出現這些問題.. so.. 再試試吧~
crazycat
一般會員


發表:22
回覆:20
積分:8
註冊:2003-04-29

發送簡訊給我
#20 引用回覆 回覆 發表時間:2005-03-03 16:14:45 IP:220.132.xxx.xxx 未訂閱
已成功UPDATE完成 測試也沒問題了. 開始努力 ADO ACCESS 謝謝各位大大指導
系統時間:2024-05-20 4:31:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!