線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4769
推到 Plurk!
推到 Facebook!
[<<] [1] [2] [>>]

如何使用ADOConnection1及TADOQuery元件

尚未結案
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-09 14:16:20 IP:61.221.xxx.xxx 未訂閱
剛剛去翻了「DELPHI 6實務經典 第三波 林金霖編著」,想要查看如何取得某一欄的值,查TADOQuery物件,結果只有20-43~20-44兩頁,再往後翻也沒有題到如何取很某一欄的值,到20-50就換另一個主題了,過去只要打入 Emp_No := ADOTable1.FieldByName('A0').AsString; 即可,我該如何取得ADOConnection1欄位某值的內容?盼各位先進再次指導,或告知那本書?我一定用心苦讀,感謝。 發表人 - jawtair 於 2003/05/09 14:31:34
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-09 14:28:57 IP:61.221.xxx.xxx 未訂閱
或是如何規劃ADOConnection1元件 假設開第一個 Form1 .可依各個條件查詢 .可刪除 .可用DBGrid1瀏覽資料選定後按下「修改」或「新增」按鈕,開啟 Form2 .各個修改或新增的欄位 請問我使用以下元件是否正確 ADOConnection1 ← ADOQuery1 ← DataSource1 ← DBGrid1 如果是怎樣,為什麼資料庫無法連結?新手的疑惑,摸了快一個禮拜了
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-09 14:34:33 IP:218.16.xxx.xxx 未訂閱
ADOConnection 只做連接的部份,其他的部份仍時是各 ADOTable / ADOQuery 去做    不用 ADOConnection :
   ───ADOTable1
   ───ADOTable2
數據庫───ADOTable3
   ───ADOQuery1
   ───ADOQuery2
每個DataSet 各自設定獨立連線到數據庫,佔用多資源,要建立多次輸入連線資料,若連線資料修改要多次修改 用 ADOConnection :
             ──ADOTable1
             ──ADOTable2
數據庫───ADOConnection──ADOTable3
             ──ADOQuery1
             ──ADOQuery2
各DataSet 共享同一連線到數據庫,佔用較少資源,只要建立一次連線資料,若連線資料修改只需修改 ADOConnection ADOConnection 只取代 ADOTable / ADOQuery 的 連線部份 ,資料處理部份仍是 ADOTable/ADOQuery 自行處理,與獨立時無異。
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-09 14:50:48 IP:61.221.xxx.xxx 未訂閱
我試不出來的地方,就是 數據庫←ADOConnection1←ADOTable1←DBGrid1 ADOConnection1的ConnectionString有連到數據庫(測試正常) Connected:=True ADOTable1.Connection連到ADOConnection1 但 Active卻不能True 當然DBGrid1也就沒有資料了
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-09 15:24:51 IP:218.16.xxx.xxx 未訂閱
你意思是說,若你將一模一樣的 connection string 抄到 ADOTable1 就能 Active = True 嗎 ? 你 ADOConnection.Connected := true 後, 在 ADOTable1 的 TableName 按 ▼ 是否出現你數據庫的 Tables 給你選呢?若沒的話應是 Connection 沒設去耶
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-09 17:53:17 IP:61.221.xxx.xxx 未訂閱
連到了,目前作法如下: 數據庫←ADOConnection1←ADOTable1←DataSource1←DBGrid1 ←ADOQuery1 但為什麼ADOQuery1元件 Connection連到ADOConnection1 DataSource連到DataSource1 但卻不能Active 是不是我那邊做錯了
hagar
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-09 18:09:57 IP:202.39.xxx.xxx 未訂閱
TADOQuery.SQL 屬性要設定,  例: Select * From TableName; 然後才可以 Active.    --- 每個人都是一本書
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-09 18:15:39 IP:218.16.xxx.xxx 未訂閱
你連到轉了 應是 DataSources 的 DataSet 連到 ADOTable1 ADOTable1 的 DataSources 是讓 Detail Table 連 上 Master Table 的 DataSources 的 -------------------------------------------------------------------- 修正 : 上面的似乎是我看太快看錯了,不用理會 你的 ADOQuery 是 Table1 的 Detail Table 嗎? 若是的話,你可用 : Select * from DetailTable where KeyFieldName = :KeyFieldName; 這樣 ADOQuery1 就只會顯示合乎 Table1 KeyFieldName 的值的資料了 發表人 - Justmade 於 2003/05/09 18:23:29
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-09 19:39:38 IP:61.221.xxx.xxx 未訂閱
謝謝兩位版主,由於我對TADOQuery元件,完全沒有概念,所以不知如何連結,加了TADOQuery元件後,不知怎樣設屬性,以至於Active時,一直出現「Missing Connection or ConnectionString.」的錯誤訊息,不知那邊有這方面的資料,或是能告知,如何使用TADOQuery元件,連接ADOConnection1 抱歉,新手上路,請多包涵。
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-09 20:24:53 IP:218.16.xxx.xxx 未訂閱
ADOQuery1 的 Connection 也要設 ADOConnection1 丫...
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-09 20:41:36 IP:61.221.xxx.xxx 未訂閱
有將ADOQuery1 的 Connection 設為 ADOConnection1 但執行Active時,一直出現「Missing Connection or ConnectionString.」的錯誤訊息
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-09 21:03:36 IP:61.221.xxx.xxx 未訂閱
數據庫←ADOConnection1←ADOTable1←DataSource1←DBGrid1 ←ADOQuery1    將ADOQuery1 的 Connection 設為 ADOConnection1 但執行Active時,一直出現「Missing Connection or ConnectionString.」的錯誤訊息    將ADOQuery1的DataSource設為DataSource1 執行Active時,一直出現「ADOQuery1:Missing SQL property.」的錯誤訊息    DBGrid1已經看得到資料,請問為什麼ADOQuery1無法連接ADOConnection1,我漏了那邊嗎?請用淺顯的方法教我,像:    TADOQuery.SQL 屬性要設定,  例: Select * From TableName; 然後才可以 Active. 要在那裡設,我找不到Select的屬性    這個    你的 ADOQuery 是 Table1 的 Detail Table 嗎? 若是的話,你可用 : Select * from DetailTable where KeyFieldName = :KeyFieldName; 這樣 ADOQuery1 就只會顯示合乎 Table1 KeyFieldName 的值的資料了    我也不了解意思,好想去買書喔,那本書寫的比較好,是否能推薦啊< > 再繼續問這種對版主太簡單的問題,我會不好意思啦< > 發表人 - jawtair 於 2003/05/09 21:09:44
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-05-09 22:09:04 IP:218.16.xxx.xxx 未訂閱
你找找李維先生有一本說明 ADO 的書滿好的 ADOTable 是指定 Table 名稱 來選資料 ADOQuery 是使用 SQL 語法來選資料 (要設定在 SQL 屬性(按[...])) 若你不知 SQL 是甚麼那你暫只用 ADOTable 好了
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-05-10 08:30:34 IP:61.155.xxx.xxx 未訂閱
adoconnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db2.mdb;Persist Security Info=False';    adoconnection1.Connected :=true;    ADOQuery1.Connection :=adoconnection1; ADOQuery1.SQL.Clear ; adoquery1.sql.Add('SQL语句'); ADOQuery1.Close ; ADOQuery1.Open;    风花雪月 e梦情缘
------
风花雪月 e梦情缘
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-05-20 00:31:54 IP:61.221.xxx.xxx 未訂閱
引言: adoconnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db2.mdb;Persist Security Info=False'; adoconnection1.Connected :=true; ADOQuery1.Connection :=adoconnection1; ADOQuery1.SQL.Clear ; adoquery1.sql.Add('SQL语句'); ADOQuery1.Close ; ADOQuery1.Open;
現在已經可以查詢了,但是我如何把查詢記錄傳給DBGrid1並且讓它重新顯示
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-05-20 07:34:58 IP:61.155.xxx.xxx 未訂閱
添加query1、DataSource1、DBGrid1    对于DataSource1、DBGrid1的设置 DataSource1.DataSet :=query1;    DBGrid1.DataSource := DataSource1;    然后就用上述方法查询就可以了!!!!    风花雪月 e梦情缘
------
风花雪月 e梦情缘
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-05-20 16:12:04 IP:61.221.xxx.xxx 未訂閱
再請問一下: ADOQuery1.SQL.Add('SELECT * FROM pm3d WHERE (A1 = 1000)'); 可以查到資料,但如果改成 ADOQuery1.SQL.Add('SELECT * FROM pm3d Where A1 = "' Edit1.Text '"'); 卻會顯示錯誤訊息「無效的資料行名稱」,請問我那打錯了嗎? 另外如何作判斷是否有查詢到資料?
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-05-20 16:20:14 IP:218.16.xxx.xxx 未訂閱
若這個可行 ADOQuery1.SQL.Add('SELECT * FROM pm3d WHERE (A1 = 1000)'); 應該改成這樣罷 : ADOQuery1.SQL.Add('SELECT * FROM pm3d Where (A1 = ' Edit1.Text ')');
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-05-20 16:28:35 IP:211.74.xxx.xxx 未訂閱
補充Justmade兄打的,可能漏掉了,試看看這樣 ADOQuery1.SQL.Add('SELECT * FROM pm3d Where (A1 = ' #39 Edit1.Text #39 ')');
引言: 若這個可行 ADOQuery1.SQL.Add('SELECT * FROM pm3d WHERE (A1 = 1000)'); 應該改成這樣罷 : ADOQuery1.SQL.Add('SELECT * FROM pm3d Where (A1 = ' Edit1.Text ')');
發表人 - chih 於 2003/05/20 16:29:42
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-05-20 16:49:01 IP:61.221.xxx.xxx 未訂閱
可以了! 謝謝各位高手 但如果我要判斷使用者是否有輸入資料 或輸入的資枓是否有查詢到資料 如果沒有即返回, 請問我該如何設計
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#21 引用回覆 回覆 發表時間:2003-05-20 17:03:03 IP:218.16.xxx.xxx 未訂閱
呵呵,大家都知道我經常筆誤,不過這次是其於 WHERE (A1 = 1000) 沒括號所以不加括號的不是漏掉了    
if edit1.text <> '' then //有輸入
begin
  ADOQuery1.SQL.Text := 'SELECT * FROM pm3d Where (A1 = ' Edit1.Text ')';
  ADOQuery1.Active := true;
  if ADOQuery1.isEmpty then // 沒有資料
    ShowMessage('沒有找到資料');
end
else
    ShowMessage('沒有輸入資料');  
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#22 引用回覆 回覆 發表時間:2003-05-20 17:08:51 IP:211.74.xxx.xxx 未訂閱
引言:1.但如果我要判斷使用者是否有輸入資料
假設Edit1就是user輸入 if Trim(Edit1.Text)='' then begin SHOWMESSAGE('資料沒有輸入!!!'); Edit1.SetFocus; end;
引言:2.或輸入的資枓是否有查詢到資料,如果沒有即返回,
ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT * FROM pm3d Where A1= ' #39 Edit1.Text #39); ADOQuery1.Open; if ADOQuery1.IsEmpty then begin SHOWMESSAGE('查無資料!!!'); ADOQuery1.Close end; TRY TRY SEE 發表人 - chih 於 2003/05/20 17:10:58
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#23 引用回覆 回覆 發表時間:2003-05-20 17:46:56 IP:61.155.xxx.xxx 未訂閱
if length(trim(edit1.text))=0 then begin ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT * FROM pm3d Where A1= '+#39+Edit1.Text+#39); ADOQuery1.Close; ADOQuery1.Open; if ADOQuery1.eof and ADOQuery1.bof then  SHOWMESSAGE('没有您需要的数据!'); ADOQuery1.Close end    else SHOWMESSAGE('请输入查询数据!');    风花雪月 e梦情缘
------
风花雪月 e梦情缘
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#24 引用回覆 回覆 發表時間:2003-05-20 18:41:19 IP:61.221.xxx.xxx 未訂閱
再請問一下,如果查詢欄位改成字串,該如何設定查詢 ADOQuery1.SQL.Add('SELECT * FROM pm3d Where A1= ' #39 Edit1.Text #39); #39是什麼意思?
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#25 引用回覆 回覆 發表時間:2003-05-20 19:04:11 IP:61.216.xxx.xxx 未訂閱
引言: 再請問一下,如果查詢欄位改成字串,該如何設定查詢
var abc:string; . . ADOQuery1.SQL.Add('SELECT * FROM pm3d Where A1= ' #39 abc #39);
引言: #39是什麼意思?
#39 就是' 發表人 - chih 於 2003/05/20 19:05:09
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#26 引用回覆 回覆 發表時間:2003-05-20 19:36:15 IP:218.16.xxx.xxx 未訂閱
引言: if length(trim(edit1.text))=0 then begin ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT * FROM pm3d Where A1= ' #39 Edit1.Text #39); ADOQuery1.Close; ADOQuery1.Open; if ADOQuery1.eof and ADOQuery1.bof then SHOWMESSAGE('没有您需要的数据!'); ADOQuery1.Close end else SHOWMESSAGE('请输入查询数据!');
本文沒提出任何新的有用資料,只是將前文有一小點不同,效率更差而且錯了 1. 註 處使用者沒輸入資料才做 Query 有輸入反叫使用者輸入查詢 (不過這只是不小心的小錯) 2. 註 用的方法比 Chih 兄對比的方法效率差 明顯又是一篇提出效率更差方法的模魚文章 詳見 給 wnhoo ,也給關心事件的K.Top網友 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30664
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#27 引用回覆 回覆 發表時間:2003-05-20 19:38:56 IP:61.221.xxx.xxx 未訂閱
ADOQuery1.SQL.Add('SELECT * FROM pm3d Where A2= ' #39 Edit1.Text #39); 奇怪,這行為什麼查詢時會出現錯誤訊息: Project MDIAPP.exe raised exception class EOleException with message '[Microsoft][ODBC SQL Server Driver][SQL Server]資料行前置詞 'From1.Edit1'與用於查詢中的資料表名稱或別名不符。 Process stopped Use step of Run to continue. A2的資料型態是 nvarchar (SQL Server) 是不是字串的查詢方式不一樣?
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#28 引用回覆 回覆 發表時間:2003-05-20 19:54:45 IP:61.217.xxx.xxx 未訂閱
不知道你的Delphi有沒有做過update了?? 請先依照你的版本更新一下. DELPHI 6 Enterprise更新檔Update 2 http://delphi.ktop.com.tw/topic.php?topic_id=179 DELPHI 6 Professional更新檔Update 2 http://delphi.ktop.com.tw/topic.php?topic_id=180 TRY TRY SEE
引言: ADOQuery1.SQL.Add('SELECT * FROM pm3d Where A2= ' #39 Edit1.Text #39); 奇怪,這行為什麼查詢時會出現錯誤訊息: Project MDIAPP.exe raised exception class EOleException with message '[Microsoft][ODBC SQL Server Driver][SQL Server]資料行前置詞 'From1.Edit1'與用於查詢中的資料表名稱或別名不符。 Process stopped Use step of Run to continue. A2的資料型態是 nvarchar (SQL Server) 是不是字串的查詢方式不一樣?
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#29 引用回覆 回覆 發表時間:2003-05-20 20:08:17 IP:218.16.xxx.xxx 未訂閱
引言: ADOQuery1.SQL.Add('SELECT * FROM pm3d Where A2= ' #39 Edit1.Text #39); 奇怪,這行為什麼查詢時會出現錯誤訊息: Project MDIAPP.exe raised exception class EOleException with message '[Microsoft][ODBC SQL Server Driver][SQL Server]資料行前置詞 'From1.Edit1'與用於查詢中的資料表名稱或別名不符。 Process stopped Use step of Run to continue.
應該是你程式的筆誤罷,你大慨打成了 : ADOQuery1.SQL.Add('SELECT * FROM pm3d Where A2= ' 'Form1.Edit1.Text'); 之類罷 你打回 ADOQuery1.SQL.Add('SELECT * FROM pm3d Where A2= ' #39 Form1.Edit1.Text #39); 便應沒事了。
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#30 引用回覆 回覆 發表時間:2003-05-20 20:09:26 IP:61.221.xxx.xxx 未訂閱
我們使用的是 DELPHI 7.0 (Build 4.453)
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#31 引用回覆 回覆 發表時間:2003-05-20 20:52:41 IP:61.221.xxx.xxx 未訂閱
怪事,我把 ADOQuery1.SQL.Add('SELECT * FROM pm3d Where A2= ' #39 Form1.Edit1.Text #39); Form1拿掉就好了 ADOQuery1.SQL.Add('SELECT * FROM pm3d Where A2= ' #39 Edit1.Text #39); 這是怎麼回事?
[<<] [1] [2] [>>]
系統時間:2024-11-23 4:07:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!