請教SQL.TEXT的寫法... |
缺席
|
nachi
初階會員 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
procedure TForm1.Button8Click(Sender: TObject); var t_sql:string; begin if edit1.Text ='' then begin showmessage('沒有輸入搜尋條件!'); abort; end else t_sql := 'SELECT CustomerNM FROM customer WHERE CustomerNM LIKE' '%' edit1.text '%'; query1.Close; query1.SQL.Text:=t_sql; query1.Open; end;當我按下搜尋鍵時會出現ERROR,文字如下: invalid:use of keyword token:LIKE line unmber:1 請問我粗字體的那部份,後面的sql語法要如何修正?! 問題是出在那部份嗎?請大大們指教...謝謝 發表人 - nachi 於 2003/03/11 23:12:39 |
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
|
nachi
初階會員 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
nachi
初階會員 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
nachi
初階會員 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
我看了你原來Table的格式應該改成這樣,你原來的Table並沒有 CustomerNM 而是有CustomerNO..
procedure TForm1.Button8Click(Sender: TObject);
var t_sql: string;
begin //快速搜尋
if edit1.Text = '' then
begin
showmessage('沒有輸入搜尋條件!');
abort;
end
else
t_sql := 'SELECT * FROM customer WHERE CustomerNO LIKE' #39 '%' edit1.text '%' #39;
query1.Close;
query1.SQL.Text := t_sql;
query1.Open;
end;
TRY TRY SEE
發表人 - chih 於 2003/03/12 09:53:40
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
nachi
初階會員 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
timhuang:執行前的command?我不明白你所指何處? T.J.B:我用PARADOX7.0 CHIH:我已經改過了,把Customer改成CustomerNM,避免欄位和檔名的名稱相同。
我把語法改成如下則結果和原來一樣,dbgrid和dbedit被清空。
procedure TForm1.Button8Click(Sender: TObject); var t_sql: string; begin //快速搜尋 if edit1.Text = '' then begin showmessage('沒有輸入搜尋條件!'); abort; end else t_sql := 'SELECT * FROM customer WHERE CustomerNO LIKE' #39 '%' edit1.text '%' #39; query1.Close; query1.SQL.Text := t_sql; query1.Open; end;若改成如下,則dbgrid和dbedit畫面都不會清空,但也沒有跳到要搜尋的資料錄。 procedure TForm1.Button8Click(Sender: TObject); begin //快速搜尋 if edit1.Text = '' then begin showmessage('沒有輸入搜尋條件!'); abort; end else query1.Locate('CustomerNO', Edit1.text, [loPartialKey]); end;要把程式上傳給你看看嗎? |
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
下面這一段是可以Run的我用你之前的TableTRY 的如果不行再把程式上傳吧..
procedure TForm1.Button8Click(Sender: TObject); begin //快速搜尋 if edit1.Text = '' then begin showmessage('沒有輸入搜尋條件!'); abort; end else query1.Locate('CustomerNO', Edit1.text, [loPartialKey]); end;發表人 - chih 於 2003/03/12 13:51:02 |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
1. 你按 button8 時 Edit1 的 Text 是甚麼呢?
2. 你是否肯定 Edit1.Text 內的文字是 CustomerNO 橺位內有的呢?
3. CustomerNO 欄位是否文字欄 (A) 或備註欄 (M),因若是數字欄則 like 便行不通了。 你可以試試將你的 sql 句式在 SQL Explorer 或 database desktop 內試行一下,例如若你 Edit1.Text 是 123, 就試試
SELECT * FROM customer WHERE CustomerNO LIKE "123"; 若是沒有資料,即是你的數據庫 CustomerNO 欄沒有類似 "123" 的資料,所以你的程式也沒有選出資料。
|
nachi
初階會員 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
CHIH:你寫的那一段修改後可以搜尋CustomerNO,但我把相關欄位再做修改後不能搜尋CustomerNM~底下是我修改後的程式...
(edit1是CustomerNM用,edit2才是CustomerNO用) 對了,像你這種不是正規(常見)的SQL語法,是要看SQL的書嗎?因為delphi和delphi資料庫的書都是寫較正規傳統的語法....
procedure TForm1.Button8Click(Sender: TObject); begin //快速搜尋 if edit1.Text = '' then begin showmessage('沒有輸入搜尋條件!'); abort; end else query1.Locate('CustomerNM', Edit1.text, [loPartialKey]); end;Justmade: 1.TEXT內容是"文字" 2.TEXT的內容是CustomerNM有的東西,因為是看著dbgrid輸入的! 3.TEXT是文字欄(property要特別設定???) |
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
我那段語法下午就有先post過了...你可能沒有copy過去吧..Locate是資料庫搜尋的標準語法喔,看help就有了,另外你說修改後無法搜尋,我想喔..你其他的按鈕的事件沒有處理好啦...這又是另外一各問題了..
不要一次把問題搞的越來越越複雜了...
TRY TRY SEE...
引言: CHIH:你寫的那一段修改後可以搜尋CustomerNO,但我把相關欄位再做修改後不能搜尋CustomerNM~底下是我修改後的程式... (edit1是CustomerNM用,edit2才是CustomerNO用) 對了,像你這種不是正規(常見)的SQL語法,是要看SQL的書嗎?因為delphi和delphi資料庫的書都是寫較正規傳統的語法.... |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
引言:1.TEXT內容是"文字" 2.TEXT的內容是CustomerNM有的東西,因為是看著dbgrid輸入的!Edit.Text 是"文字" ?? 即是你在 Edit1 內打入 "文字" ? 你 CustomerNM 裡有 "文字" 的嗎 ? 引言:3.TEXT是文字欄(property要特別設定???)不是問 TEXT, 是問你在數據庫中 CustomerNM 是甚麼欄位 如 timhuang兄及小弟之前所言,最佳的辦法就是將你的語句在 SQL Explorer 或 Database desktop 自行測試一下,請先試試,有問題再提出罷。 另,用 locate 的方法只可找尋以 edit1.text 開頭的資料,並不能像原先 sql 那樣查中間包含 edit1.text 的資料。 |
nachi
初階會員 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
procedure TForm1.Button8Click(Sender: TObject); begin //快速搜尋 if edit1.Text = '' then begin showmessage('沒有輸入搜尋條件!'); abort; end else if not query1.Locate('CustomerNM', Edit1.text, [loPartialKey]) then begin showmessage('查無資料!'); abort; end; end; |
nachi
初階會員 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
nachi
初階會員 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
procedure TForm1.Button12Click(Sender: TObject); begin//重讀 query1.Close; Query1.SQL.Add('SELECT * FROM "customer.DB" order by CustomerNO'); query1.Open; end;我寫了一個重讀鈕,可是執行後卻ERROR: EAccess Violation with message Access violation at address 0048c21e in module mdiapp.exe 除了0048c21e,剩下的都一樣,我該如何修正呢? |
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
nachi
初階會員 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
引言:你的句法的問題在於 Query.SQL.Add('...') 是將新的句法加在舊的句法以後,所以便會引起語法錯誤。你可使用我原本的 query.sql.text := '...' 或 chit君提出的先 清除 (clear) 再加上 (add) 的方法。 不過,你的程式碼的錯語訊息應是 sql 語法錯誤訴息而非 access violation... 所以你的程式可能有別的問題。procedure TForm1.Button12Click(Sender: TObject); begin//重讀 query1.Close; Query1.SQL.Add('SELECT * FROM "customer.DB" order by CustomerNO'); query1.Open; end; |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
nachi
初階會員 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
Justmade:我先把程式貼上來,我去查一下CHIH所說的原因...
procedure TForm1.Button8Click(Sender: TObject); var t_sql:string; begin//快速搜尋客戶名稱 if edit1.Text ='' then begin showmessage('沒有輸入搜尋條件!'); abort; end else t_sql :='SELECT * FROM Customer WHERE CustomerNM LIKE ' #39 '%' Edit1.Text '%' #39 ' ORDER BY CustomerNM'; query1.Close; query1.SQL.Text:=t_sql; query1.Open; if query1.isEmpty then begin showmessage('沒有符合條件的資料!'); query1.Free; end; end; |
cmj
高階會員 發表:15 回覆:242 積分:226 註冊:2002-06-12 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |