全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1340
推到 Plurk!
推到 Facebook!

資料庫無法使用SQL查詢

答題得分者是:cashxin2002
pingcha
一般會員


發表:12
回覆:9
積分:4
註冊:2004-09-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-12 08:26:49 IP:210.202.xxx.xxx 未訂閱
有兩個問題,誰能救救我!! 1.資料庫網址如何能配合超連結!! 2.如何在edit欄位中輸入資料配合資料庫作連結!! 如下圖所示!!謝謝!!!     發表人 - pingcha 於 2004/11/12 08:45:01
pingcha
一般會員


發表:12
回覆:9
積分:4
註冊:2004-09-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-12 08:33:29 IP:210.202.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-12 09:12:02 IP:202.62.xxx.xxx 未訂閱
您好﹗    解答一﹕ 超連接的部分﹐因為您是使用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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-12 11:05:37 IP:210.202.xxx.xxx 未訂閱
可是當資料庫有兩筆資料相逝如姓名 PING 及 PINGOK 可是查詢過後只會指向最後一筆資料,不會指向第一筆資料 發表人 - pingcha 於 2004/11/12 11:43:20
cashxin2002
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-12 11:17:48 IP:202.62.xxx.xxx 未訂閱
您好﹗    您是使用DBEdit資料感知元件的嗎﹖如果是使用DBEdit元件﹐當其DataSource 屬性和DataField屬性有正确的設定后﹐應會隨資料錄指針的變動而顯示對應的 資料錄﹐DBGrid元件也是一樣﹐指定上游的DataSource后就可隨資料錄指針的變動而顯示對應的資料錄了﹒    在Locate查詢的時候也是一樣﹐當Locate查詢的回傳值為True時﹐DBGrid中就 會將資料錄指針指向該筆資料錄﹐而對應的DBEdit元件也會顯示相對應的資料 錄﹒        ========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
pingcha
一般會員


發表:12
回覆:9
積分:4
註冊:2004-09-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-12 11:48:26 IP:210.202.xxx.xxx 未訂閱
引言: 您好﹗ 您是使用DBEdit資料感知元件的嗎﹖如果是使用DBEdit元件﹐當其DataSource 屬性和DataField屬性有正确的設定后﹐應會隨資料錄指針的變動而顯示對應的 資料錄﹐DBGrid元件也是一樣﹐指定上游的DataSource后就可隨資料錄指針的變動而顯示對應的資料錄了﹒ 在Locate查詢的時候也是一樣﹐當Locate查詢的回傳值為True時﹐DBGrid中就 會將資料錄指針指向該筆資料錄﹐而對應的DBEdit元件也會顯示相對應的資料 錄﹒ ========================= 我是您的朋友﹐有您真好﹗ =========================
sorry !!!再請教版主一下,當其DataSource 屬性和DataField屬性如何正確設定
cashxin2002
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-12 12:16:54 IP:202.62.xxx.xxx 未訂閱
您好﹗    資料感知元件的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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-12 12:38:51 IP:210.202.xxx.xxx 未訂閱
謝謝版主!!! 讓我受益良多!!!
pingcha
一般會員


發表:12
回覆:9
積分:4
註冊:2004-09-20

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-12 12:53:45 IP:210.202.xxx.xxx 未訂閱
請問版主!!! 如何做出(查詢時)除錯的功能!!! 例如EDIT1.TEXT 空白時查詢會出現,如何排除!! 初學DELPHI的新生
cashxin2002
版主


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-11-12 14:12:30 IP:202.62.xxx.xxx 未訂閱
您好﹗
可以直接在查詢前先判斷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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-11-12 14:33:41 IP:210.202.xxx.xxx 未訂閱
加上該程式碼,結果出現 [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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-11-12 14:49:52 IP:202.62.xxx.xxx 未訂閱
您好﹗    不好意思﹐筆誤了﹒判斷語法應是=﹐而不是:=﹐如下 if Edit1.Text = '' then 最后的end.之前少了一個end; 請記得以后在上貼程式碼的時候用【code】程式碼【/code】的方法將其進行 縮排﹐以利用觀察﹐我先幫您做縮排的整理﹒ ========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
pingcha
一般會員


發表:12
回覆:9
積分:4
註冊:2004-09-20

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-11-12 15:04:36 IP:210.202.xxx.xxx 未訂閱
版主,你真是太神了!! 謝謝!! /code 我會留意!!! 謝謝!!!
系統時間:2024-11-23 12:26:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!