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

SQL指令

尚未結案
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-28 12:03:16 IP:218.165.xxx.xxx 未訂閱
我依書上的例子,做了一個相仿的專案,用query寫了新增、修改、移除,但執行該功能鍵後會出現error,而且執行完後整個delphi就當了,要關閉再能再開啟,不知原因為何? 附上檔案,請大大指導我一下,謝謝......^^
附加檔案:26555_Projects.exe
hagar
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-28 17:45:05 IP:202.39.xxx.xxx 未訂閱
1.新增按鈕下的 SQL 語法有誤, 改為:
begin
      query1.sql.Clear;
      query1.sql.add('insert into customer.db');
      query1.sql.add('( CustomNO ,');
      query1.sql.add('  SCustomer  ,');
      query1.sql.add('  Customer   ,');
      query1.sql.add('  Number     ,');
      query1.sql.add('  CPhone     ,');
      query1.sql.add('  TPhone     ,');
      query1.sql.add('  TFax       ,');
      query1.sql.add('  TAddress'); // 這行的逗點拿掉
      query1.sql.add(') VALUES    ('); // 這行的逗點拿掉
      query1.sql.add(' ''' edit1.Text ''' ,');
      query1.sql.add(' ''' edit2.Text ''' ,');
      query1.sql.add(' ''' edit3.Text ''' ,');
      query1.sql.add(' ''' edit4.Text ''' ,');
      query1.sql.add(' ''' edit5.Text ''' ,');
      query1.sql.add(' ''' edit6.Text ''' ,');
      query1.sql.add(' ''' edit7.Text ''' ,');
      query1.sql.add(' ''' edit8.Text ''' ,');
      query1.sql.add(' ''' edit9.Text ''' )');
      query1.ExecSQL
end;
2.修改按鈕下的 SQL 語法訂正如下:
begin
   query1.SQL.Clear;
   query1.sql.Add('update customer.db');
   query1.SQL.add('set');
   query1.SQL.add('CustomerNO = ''' edit1.Text ''' ,'); // . 改成逗點
   query1.SQL.add('SCustomer  = ''' edit2.Text ''' ,'); // . 改成逗點
   query1.SQL.add('Customer   = ''' edit3.Text ''' ,'); // . 改成逗點
   query1.SQL.add('Boss       = ''' edit4.Text ''' ,'); // . 改成逗點
   query1.SQL.add('Number     = ''' edit5.Text ''' ,'); // . 改成逗點
   query1.SQL.add('CPhone     = ''' edit6.Text ''' ,'); // . 改成逗點
   query1.SQL.add('TPhone     = ''' edit7.Text ''' ,'); // . 改成逗點
   query1.SQL.add('TFax       = ''' edit8.Text ''' ,'); // . 改成逗點
   query1.SQL.add('TAddress   = ''' edit9.Text '''  ');
end;
chih
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-28 18:39:25 IP:61.217.xxx.xxx 未訂閱
給你一各參考意見... 將Edit的元件全部換成DBEdit,再加上一各UpdateSQL,Query1的CachedUpdates設為True,UpdateObject指向UpdateSQL,然後這些insert,update全部在UpdateSQL設定好,那就不用寫那麼多程式碼了..^^ TRY TRY SEE
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-28 20:36:49 IP:218.165.xxx.xxx 未訂閱
HAGAR大大:我依你的指導做了修正,結果執行後出現了另一個錯誤,指在新增資料的QUERY1.CLOSE,訊息為PARAMETER INVALID,然後整個DELPHI又當了,這是因為我電腦不穩定,還是程式的關係啊? CHIH大大:你的建議我已記下來了,因為我只是一個初學者,你說的東西書上只有介紹UpdateSQL原件,我目前連SQL語法都還不熟(目差只會依書上的例子做修改就像此程式中的新增、修改),最大的問題點也是出在SQL語法,待我將SQL語法弄熟後,我會試著用你的建議^^
chih
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-28 22:19:13 IP:61.225.xxx.xxx 未訂閱
我看你原來新增應該是要改成叫做存檔喔...新增的時候應該是這樣
procedure TForm1.Button5Click(Sender: TObject);
begin//新增資料
      query1.Close;
      edit1.Text:='';
      edit2.Text:='';
      edit3.Text:='';
      edit4.Text:='';
      edit5.Text:='';
      edit6.Text:='';
      edit7.Text:='';
      edit8.Text:='';
      edit9.Text:='';
end;    procedure TForm1.Button5Click(Sender: TObject);
begin//新增資料改成叫做存檔
      query1.sql.Clear;
      query1.sql.add('insert into customer.db');
      query1.sql.add('( CustomerNO ,');
      query1.sql.add('  SCustomer  ,');
      query1.sql.add('  Customer   ,');
 query1.sql.add('  BOSS       ,');//你少加這一各參數
      query1.sql.add('  Number     ,');
      query1.sql.add('  CPhone     ,');
      query1.sql.add('  TPhone     ,');
      query1.sql.add('  TFax       ,');
      query1.sql.add('  TAddress   ');
      query1.sql.add(') VALUES    (');
      query1.sql.add(' ''' edit1.Text ''' ,');
      query1.sql.add(' ''' edit2.Text ''' ,');
      query1.sql.add(' ''' edit3.Text ''' ,');
      query1.sql.add(' ''' edit4.Text ''' ,');
      query1.sql.add(' ''' edit5.Text ''' ,');
      query1.sql.add(' ''' edit6.Text ''' ,');
      query1.sql.add(' ''' edit7.Text ''' ,');
      query1.sql.add(' ''' edit8.Text ''' ,');
      query1.sql.add(' ''' edit9.Text ''' )');
      query1.ExecSQL;
     query1.Close;
     query1.Open;
end;
我試過這樣沒問題了 TRY TRY SEE..^^
發表人 - chih 於 2003/02/28 22:28:20
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-01 10:33:06 IP:218.165.xxx.xxx 未訂閱
喔,原來如此~雖然我看得懂error訊息,卻不知道從何debug...=.=" 我又試了在mainmenu呼叫form1,我是這樣寫的 ExecuteForm(form1);結果也出現了error,(此時存檔的檔名是customer01) [Error] MAIN.PAS(101): Undeclared identifier: 'ExecuteForm' [Fatal Error] MDIAPP.dpr(9): Could not compile used unit 'MAIN.PAS' 可是我回去看範例原始檔並沒有看到executeform的宣告,不知是那裡出了問題@@ 關於updateSQL,我近期會找時間試試^^.....y 謝謝大大們的指導...
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-01 17:45:43 IP:218.165.xxx.xxx 未訂閱
CHIH大大:我依你的指正做了修正,資料也可以新增了,但新增完後就當機了@@ ,不知是不是我系統的問題@@ Project mdiiapp.exe raised exception class EDBEnginError with message 'Key Violation' (這是指我資料型態錯誤嗎?我資料庫所有型態都設成字串,可是你又沒這個問題@@) 然後mdiapp.exe就會卡住,點它它說,mdiapp程式已停止回應,按右鍵關閉,它又說無法關閉,如果在偵錯狀態,請復原或關閉除錯程式! 再來按delphi,用右鍵-關閉,現在每run一次就要開一次@@ 最近發現另一個問題,以此專案為例,若我在此專案新增了兩個表單,當我要run時,我必須把此兩個表單也開啟(就是code的頁籤必須看得到),要是沒開,或是只開一個,一run就當,不然就是run,然後關閉就當了,當機情形和新增資料情形相同,你們在run時也須如此嗎?要是專案有數十個表單的話那不就掛了,我想應該不用如此大費周章才對,是不是只有我才這樣,你會嗎?
chih
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-01 22:35:37 IP:61.217.xxx.xxx 未訂閱
1.我這邊試的情形不會當機喔...你先把資料庫清空再試看看,那個錯誤訊息好像是主鑑值重複... 2.你先試第一點,看看你講的第二點還會不會發生,你重新Compiler一次,直接執行exe檔看看,如果還是不行你再把檔案POST上來吧... TRY TRY SEE BY THE WAY,我不是大大,我只是小小喔... 發表人 -
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-01 23:24:04 IP:218.165.xxx.xxx 未訂閱
我知道了,那關於專案的RUN的問題呢? 我每次要RUN時,都必須把FORM1和RORM2也開啟才能RUN,不然的話也會當機,照理說,應該只要開啟專案,RUN時,DELPHI會自動把專案裡有用到的FORM也一併編譯不是嗎?你能說一下你RUN的情形嗎? 謝謝CHIH小小的指導^^y...........大大,是一種尊稱啊~叫小小總覺得怪怪滴@@
chih
版主


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-01 23:48:53 IP:61.217.xxx.xxx 未訂閱
應該不會喔..你把你有含Form2的程式在傳上來吧,因為我這邊沒有Form2...
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-03-02 01:18:41 IP:218.165.xxx.xxx 未訂閱
CHIH小小,我剛又重覆試了幾次,發現並不是每一次都會這樣,有時候只有開啟專案就能RUN了,但有一點很奇怪的就是,我一RUN後,不執行任何動作,就馬上STOP,一樣會死當,會不會是系統被我試到亂了啊@#@你能不能試一下你這樣做會不會死當,如果你不會的話,我就要重灌了...=.=" 我的主鍵值是客戶編號,我這次新增時有注意沒有重覆,也成功新增了資料,但一按新增就死當,資料還是會上去(後來用DATABASE DESKTOP看的),錯誤訊一樣是Project mdiiapp.exe raised exception class EDBEnginError with message 'Key Violation' 。 我剛拉updateSQL出來看了一下,你說把新增、移除、修改的sql寫在updateSQL,不是只是差在一個寫在updqteSQL,一個是直接寫在程式裡,寫的程式不是一樣多嗎?為何你說程式會短少呢? 還有就是一定要換DBEdit嗎?換了以後會增加那柴便利性嗎?就我目前所知,用Edit應該也能配合updateSQL,但我不知道換DBEdit會改善那些地方。 CHIH小小,你可不可以寫mainmenu呼叫form1的語法給我看啊,我用書上的語法行不通ㄟ 我知道DELPHI的字串左右要加 ' 符號,也是道在字串中要用兩個 ' 符號來當 ' ,你能不能幫我解釋一下''' edit1.Text ''',我看不懂這三對 ' 該如何解釋配對@@ 檔案我已經重新上傳過了,請你再下載一次。
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-03-02 10:55:33 IP:61.70.xxx.xxx 未訂閱
>>''' edit1.Text ''',我看不懂這三對 ' 該如何解釋配對@@ 可以自己測試一下 ShoWMessage('''' edit1.Text ''''); 及 ShoWMessage(''' edit1.Text '''); 在字串中['']=['] '''' edit1.Text ''''= ['] [edit1.Text] [']
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-03-02 11:38:32 IP:218.165.xxx.xxx 未訂閱
我知道在字串中['']=['] 我看你寫的意思,我說一下我的想法,是不是如下: [''''] edit.text ['''']=>[''] edit.text ['']=>['] edit.text ['] 如果是這樣子的話,那一開始就用[''] edit.text [''],也是會變 ['] edit.text [']啊!?為何要用['''']! 我有用showmessage測試了,(edit.text是"我"字) '''' edit.text '''' => '我' ''' edit.text ''' => ' edit.text ' 結果用['''']的出來也不是一個[我]字,旁邊還多了['],如此經過SQL編譯後會變成單純一個[我]字嗎? 但我書上的例題原始碼都是用[''']寫的,存入資料庫後看到的就是單純的字串,像本例的話就是變成[我]。 有點糊塗了@@ 發表人 - nachi 於 2003/03/02 11:58:44
chih
版主


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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-03-02 13:56:51 IP:61.216.xxx.xxx 未訂閱
updateSQL只要你有設定好欄位及主Key,他就會自動產生SQL語法不用在自己寫了.. 如果你是剛開始學,建議你先從單Form作,先將你的程式移到單Form上面,對資料庫的運作比較熟悉了以後再來做MDIForm...
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-03-02 15:13:35 IP:218.165.xxx.xxx 未訂閱
關於updateSQL我會再多找些相關的資料的... 至於其它的部份,我會再多看點書滴^^ 謝謝各位先進們的指導^^y 小弟由衷的感謝...
系統時間:2024-05-04 20:09:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!