資料庫無法使用SQL查詢 |
答題得分者是:cashxin2002
|
pingcha
一般會員 發表:12 回覆:9 積分:4 註冊:2004-09-20 發送簡訊給我 |
|
pingcha
一般會員 發表:12 回覆:9 積分:4 註冊:2004-09-20 發送簡訊給我 |
sorry !!! 忘記加上原始碼!!!
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ADODB, DB, StdCtrls, Grids, DBGrids, ExtCtrls, DBCtrls, Mask; type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
DataSource1: TDataSource;
ADOTable1: TADOTable;
ADOQuery1: TADOQuery;
Button4: TButton;
Button5: TButton;
Edit1: TEdit;
procedure Button4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button4Click(Sender: TObject);
begin
FORM1.CLOSE;
end; procedure TForm1.Button1Click(Sender: TObject);
begin
ADOTABLE1.PRIOR;
end; procedure TForm1.Button2Click(Sender: TObject);
begin
ADOTABLE1.NEXT;
end; procedure TForm1.Button5Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * From 001 Where ');
ADOQuery1.SQL.Add('NAME Like ''' Edit1.Text '%''');
ADOQuery1.Open;
end; end. 發表人 - pingcha 於 2004/11/12 08:46:35
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 解答一﹕
超連接的部分﹐因為您是使用Edit元件供使用者做輸入的動作﹐所以我們把相關
的程式碼寫在對應HTTP的Edit元件之OnDBClick事件中
先將Edit的Cursor屬性值設為crHandPoint //作用﹕使Mouse移到Edit上時呈手指狀 再將Edit的Font屬性之Style子屬性的fsUnderLine值設為True //作用﹕使用Edit顯示的字串有下劃線﹐就像HTTP址一樣 Edit元件的OnDbClick事件中程式碼部分﹕ Uses ShellAPI //在Uses部分加上ShellAPI單元 begin ShellExecute(handle, 'Open', PChar(HTTPEdit.Text), Nil, Nil, SW_SHOWNORMAL); end;解答二﹕ 從您的程式碼部分來看﹐您是使用ADOQuery來做查詢﹐但您的DataSource元件連 接的是上游的ADOTable元件﹐所以即便是做了查詢﹐也無法在DBGrid中顯示對應 的資料﹐您可直接使用ADOTable元件的Locate方法來做查詢﹐程式碼如下﹕ begin if ADOTable1.Locate('Name', NameEdit.Text, [loCaseInsensitive]) then ShowMessage('已經找到符合的資料﹐資料錄指針已指向此筆資料'); end; loCaseInsensitive參數是指字母不分大小寫 loPartialKey參數是指只要部分資料符合﹐此筆資料就算符合﹐若需要加上 可寫成'[loCaseInsensitive, loPartialKey]'========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟 |
pingcha
一般會員 發表:12 回覆:9 積分:4 註冊:2004-09-20 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 您是使用DBEdit資料感知元件的嗎﹖如果是使用DBEdit元件﹐當其DataSource
屬性和DataField屬性有正确的設定后﹐應會隨資料錄指針的變動而顯示對應的
資料錄﹐DBGrid元件也是一樣﹐指定上游的DataSource后就可隨資料錄指針的變動而顯示對應的資料錄了﹒ 在Locate查詢的時候也是一樣﹐當Locate查詢的回傳值為True時﹐DBGrid中就
會將資料錄指針指向該筆資料錄﹐而對應的DBEdit元件也會顯示相對應的資料
錄﹒ =========================
我是您的朋友﹐有您真好﹗
=========================
------
忻晟 |
pingcha
一般會員 發表:12 回覆:9 積分:4 註冊:2004-09-20 發送簡訊給我 |
引言: 您好﹗ 您是使用DBEdit資料感知元件的嗎﹖如果是使用DBEdit元件﹐當其DataSource 屬性和DataField屬性有正确的設定后﹐應會隨資料錄指針的變動而顯示對應的 資料錄﹐DBGrid元件也是一樣﹐指定上游的DataSource后就可隨資料錄指針的變動而顯示對應的資料錄了﹒ 在Locate查詢的時候也是一樣﹐當Locate查詢的回傳值為True時﹐DBGrid中就 會將資料錄指針指向該筆資料錄﹐而對應的DBEdit元件也會顯示相對應的資料 錄﹒ ========================= 我是您的朋友﹐有您真好﹗ =========================sorry !!!再請教版主一下,當其DataSource 屬性和DataField屬性如何正確設定 |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 資料感知元件的DataSource屬性需連接上游的DataSource元件﹐此元件即連接其
上游的資料集元件(即ADOTable, ADOQuery等)﹐在您的例子中﹐此處的屬性值
應是DataSource1
資料感知元件的DataField屬性需在DataSource屬性設定完成后才可設定的屬
性﹐其連接上游DataSource元件對應的資料集元件中的資料欄位﹐在您的例子
中﹐DBEdit元件的此屬性值應設為如下﹕
DBEdit1.DataField := 'Name'
DBEdit2.DataField := 'HTTP'
DBEdit3.DataField := 'E-Mail' 如果經查詢回傳的資料值是多筆﹐您可使用Filter和Filtered屬性配合做過濾的
動作﹐其作用是只顯示符合過濾條件的資料﹐方法如下﹕
begin ADOTable1.Filtered := False; ADOTable1.Filter := 'Name Like ''' Edit1.Text '%'''; ADOTable1.Filtered := True; end; 取消過濾的方法如下﹕ begin ADOTable1.Filtered := False; end;========================= 我是您的朋友﹐有您真好﹗ ========================= 發表人 - cashxin2002 於 2004/11/12 12:23:33
------
忻晟 |
pingcha
一般會員 發表:12 回覆:9 積分:4 註冊:2004-09-20 發送簡訊給我 |
|
pingcha
一般會員 發表:12 回覆:9 積分:4 註冊:2004-09-20 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗
可以直接在查詢前先判斷Edit是否沒有內容﹒ begin if Edit1.Text := '' then begin ShowMessage('請輸入查詢內容'); Edit1.Setfocus; end else begin ...查詢部分的程式碼; end; end; 另外﹐也可通過Try...Except的語法來欄截錯誤信息﹐如下﹕ begin Try ...查詢部分的程式碼; Except On MyError : Exception do ShowMessage('錯誤的信息是﹕' MyError.Message); end; end;========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟 |
pingcha
一般會員 發表:12 回覆:9 積分:4 註冊:2004-09-20 發送簡訊給我 |
加上該程式碼,結果出現
[Error] Unit1.pas(166): Type of expression must be BOOLEAN
[Error] Unit1.pas(183): ';' expected but '.' found
[Error] Unit1.pas(185): Declaration expected but end of file found
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
原始程式碼如下:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBTables, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls, Mask, ADODB, ShellAPI; type TForm1 = class(TForm) DBGrid1: TDBGrid; Label1: TLabel; Label2: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; DBEdit1: TDBEdit; DBEdit2: TDBEdit; DBEdit3: TDBEdit; DBEdit4: TDBEdit; DBComboBox1: TDBComboBox; DBComboBox2: TDBComboBox; DBEdit6: TDBEdit; DBEdit7: TDBEdit; DBComboBox3: TDBComboBox; DBComboBox4: TDBComboBox; DBComboBox5: TDBComboBox; DBComboBox6: TDBComboBox; ADOTable1: TADOTable; DataSource1: TDataSource; ADOQuery1: TADOQuery; Edit1: TEdit; Button11: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure DBEdit2Change(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure DBEdit2DblClick(Sender: TObject); procedure Button11Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ADOTABLE1.Prior; //上一筆 if ADOTABLE1.Bof then showmessage('已經是資料庫第一筆了'); end; procedure TForm1.Button2Click(Sender: TObject); begin ADOTable1.next; //下一筆 if ADOTable1.Eof then showmessage('已經是資料庫最後一筆了'); end; procedure TForm1.Button6Click(Sender: TObject); begin ADOTable1.Insert;//新增 end; procedure TForm1.Button7Click(Sender: TObject); begin IF Application.MessageBox('確定要刪除這筆資料嗎?','注意訊息', MB_YESNO MB_ICONQuestion)=IDYES Then ADOTable1.Delete; IF ADOTable1.EOF Then showmessage('沒有資料了'); end; procedure TForm1.Button3Click(Sender: TObject); begin IF ADOTable1.State in [dsEdit,dsInsert] Then begin ADOTable1.Post; //儲存 showmessage('資料已儲存'); end; end; procedure TForm1.Button8Click(Sender: TObject); begin ADOTable1.First; //第一筆 end; procedure TForm1.Button9Click(Sender: TObject); begin ADOTable1.last; //最後一筆 end; procedure TForm1.Button4Click(Sender: TObject); begin ADOTable1.Edit;//修改 end; procedure TForm1.DBEdit2Change(Sender: TObject); begin if ADOTable1.State = dsInsert then begin //ShellExecute(handle, 'Open', PChar(DBEDIT2.Text), Nil, Nil, SW_SHOWNORMAL); end; end; procedure TForm1.Button5Click(Sender: TObject); begin Form1.Close; end; procedure TForm1.Button10Click(Sender: TObject); begin //ADOQuery1.SQL.Clear; //ADOQuery1.SQL.Add('Select * From 01 Where '); //ADOQuery1.SQL.Add('NAME Like ''' Edit1.Text '%'''); //ADOQuery1.Open; end; procedure TForm1.DBEdit2DblClick(Sender: TObject); begin ShellExecute(handle, 'Open', PChar(DBEdit2.Text), Nil, Nil, SW_SHOWNORMAL); end; procedure TForm1.Button11Click(Sender: TObject); begin if Edit1.Text = '' begin ShowMessage('請輸入查詢內容'); Edit1.Setfocus; end else begin ADOTable1.Filtered := False; ADOTable1.Filter := 'Name Like ''' Edit1.Text '%'''; ADOTable1.Filtered := True; //if ADOTable1.Locate('Name', Edit1.Text, [loCaseInsensitive, loPartialKey]) then //ShowMessage('已經找到符合的資料﹐資料錄指針已指向此筆資料'); end; end; end.發表人 - cashxin2002 於 2004/11/12 14:58:52 |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
pingcha
一般會員 發表:12 回覆:9 積分:4 註冊:2004-09-20 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |