線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1305
推到 Plurk!
推到 Facebook!

DBGrid Post後會出現錯誤訊息

尚未結案
ctw54
一般會員


發表:9
回覆:7
積分:3
註冊:2005-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-15 10:35:48 IP:61.66.xxx.xxx 未訂閱
請問各位:   我使用DBNavigator及DBGrid來更新資料,   但目前碰到的問題是只要是新增的資料,一旦按了存檔後,我再按其他的按鈕   譬如:清除螢幕...,都會出現如下的訊息,   一行一行除錯後發現是ADOQUERY.CLOSE這行出現問題,   可否麻煩各位幫我看一下為何會出現此異常,謝謝! (清除螢幕)程式碼 procedure TSS_SALE.BTN_CLNClick(Sender: TObject); begin   SEL_GSMP1.Close;    -->此行有問題   DBEdit2.Color:=$00BBFFBB;   DBEdit3.Color:=$00BBFFBB;   DBCBox1.Color:=$00BBFFBB;   DBCBox2.Color:=$00BBFFBB;   Edit2.Text:='';   Edit3.Text:='';   Edit4.Text:='';   CBOX2.Text:=''; end;     發表人 - ctw54 於 2005/11/15 10:38:25
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
ctw54
一般會員


發表:9
回覆:7
積分:3
註冊:2005-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-15 11:54:47 IP:61.66.xxx.xxx 未訂閱
我試了三篇文章中的方法,但仍出現相同的訊息...@_@ 只有新增一筆資料存檔完成後,按別的按鈕才會出現此錯誤 若是將資料查出來只做修改,則不會產生此異常. 我的QUERY採取動態給SQL....所以是沒有PARAMETERS值的 麻煩各位高手幫我解決一下此異常,謝謝!
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-15 21:06:01 IP:61.219.xxx.xxx 未訂閱
煩請貼出程式碼來看一下。
ctw54
一般會員


發表:9
回覆:7
積分:3
註冊:2005-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-16 14:35:00 IP:61.66.xxx.xxx 未訂閱
(1)新增一筆空白資料 procedure TSS_SALE.BTN_INSClick(Sender: TObject); begin SEL_GSMP1.Close; SEL_GSMP1.SQL.Clear; SEL_GSMP1.SQL.Add('SELECT * FROM TYDGSMP1 WHERE SMPNO='''' '); SEL_GSMP1.Open; end; (2)存檔完成後,使用者會按清除螢幕 procedure TSS_SALE.BTN_CLNClick(Sender: TObject); begin SEL_GSMP1.Close; //當程式執行到這行時會出現錯誤 Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:=''; CBOX2.Text:=''; end; **若我將SQL不加WHERE,則執行正常,可是使用者在新增時會先帶出所有資料 若資料量一大,則程式速度將會變慢,不知是否有可解決的方法?
cashxin2002
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-16 18:09:12 IP:202.62.xxx.xxx 未訂閱
您好﹗    覺得您的程式碼有些怪怪的﹒ 新增一筆空白記錄時﹐為何是用Select & Open的敘述句﹐新增空白記錄的語法應該如下﹕
begin
  SEL_GSMP1.Close;
  SEL_GSMP1.SQL.Clear;
  SEL_GSMP1.SQL.Add('Insert Into TYDGSMP1 Values ('''')');
  SEL_GSMP1.ExecSQL;
end;
您清空螢幕的用意不知為何﹖從語法上來看﹐如果沒有手動即時在Edit等元件顯示對應的資料值﹐可以不用將SEL_GSMP1先Close﹐再檢查看看﹐是否有其它程式碼部分的問題﹕
begin
  Edit2.Clear;
  Edit3.Clear;
  Edit4.Clear;
  CBOX2.Text:='';
end;
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-11-16 19:58:43 IP:61.219.xxx.xxx 未訂閱
用DBNavigator及DBGrid來更新資料, 但目前碰到的問題是只要是新增的資料,-->方法為何?DBNavigator 一旦按了存檔後,-->方法為何?DBNavigator或您寫程式碼? 我再按其他的按鈕,譬如:清除螢幕...,都會出現如下的訊息.... ---------------------------------- (1)新增一筆空白資料 procedure TSS_SALE.BTN_INSClick(Sender: TObject); begin SEL_GSMP1.Close; SEL_GSMP1.SQL.Clear; SEL_GSMP1.SQL.Add('SELECT * FROM TYDGSMP1 WHERE SMPNO='''' ');-->明顯用錯語法 SEL_GSMP1.Open; end; -------------------------------- 若我將SQL不加WHERE,則執行正常,可是使用者在新增時會先帶出所有資料,若資料量一大,則程式速度將會變慢,不知是否有可解決的方法? -->應找出加上WHERE,執行異常的真正原因 ------------------------------------- 您可以再貼出畫面及更多的CODE,以供分析。
ctw54
一般會員


發表:9
回覆:7
積分:3
註冊:2005-10-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-11-18 09:57:36 IP:61.66.xxx.xxx 未訂閱
我採用的是DBGrid+Navigator....所有異動都由navigator來控制.. 而Edit也都是用DBEdit帶出資料庫的資料 ******************************************************************** 當USER按[新增一筆]後,程式應先新增一筆空白的資料讓USER輸入,因還要做一些查核的動作,所以必須要按下Navigator的post鍵後才能寫入資料庫. 所以我用SELECT & OPEN先開啟資料庫供使用者新增 目前問題出在當使用者決定Cancel此筆新增時就會出現錯誤,我查出問題為 SELECT * FROM TYDGSMP1 WHERE SMPNO='' =>WHERE的問題 但..若我改用SELECT * FROM TYDGSMP1 WHERE 1=1時就正常,可是畫面會先帶出 資料庫中所有的資料,但,這並不是我想要的..我只想要畫面出現空的資料讓使用者輸入....@_@ 不知各位大大是否看的懂我的需求呢??...@_@
cashxin2002
版主


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-11-18 10:49:55 IP:202.62.xxx.xxx 未訂閱
您好﹗    將程式碼改成如下﹕
procedure TSS_SALE.BTN_INSClick(Sender: TObject); 
begin
  SEL_GSMP1.Close;
  SEL_GSMP1.SQL.Clear;
  SEL_GSMP1.SQL.Add('SELECT * FROM TYDGSMP1');
  SEL_GSMP1.Open;
  SEL_GSMP1.Insert;
end;
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
ctw54
一般會員


發表:9
回覆:7
積分:3
註冊:2005-10-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-11-18 12:03:32 IP:61.66.xxx.xxx 未訂閱
您好:   我試了之後結果等同於"SELECT * FROM TYDGSMP1 WHERE 1=1" 一樣會帶出所有資料,而新增的那一筆會呈現在第一筆. (如同上次回覆訊息內的第二個畫面)
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-11-18 12:30:12 IP:61.219.xxx.xxx 未訂閱
SELECT * FROM TYDGSMP1 WHERE SMPNO='' =>WHERE的問題 您預設where加上去後,應該資料筆數會減少,對嗎? 若是,為何您的語法是用SMPNO='',這樣有過濾少掉資料嗎? 另請教一下smpno為那一個欄位名稱? 您的DB為? 當USER按[新增一筆]後,此BUTTON有另外寫什麼在其中?
ctw54
一般會員


發表:9
回覆:7
積分:3
註冊:2005-10-31

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-11-18 15:57:11 IP:61.66.xxx.xxx 未訂閱
SELECT * FROM TYDGSMP1 WHERE SMPNO='' =>WHERE的問題 您預設where加上去後,應該資料筆數會減少,對嗎?  若是,為何您的語法是用SMPNO='',這樣有過濾少掉資料嗎? 另請教一下smpno為那一個欄位名稱? 是的...就是因為要過濾資料,所以我才用smpno='',因為smpno是序號,為鍵值,一定不會空白,我下sapno=''表示一定找不到資料,而這樣就能新增一筆空白給使用者輸入了 您的DB為? 我的DB是Oracle 8i 當USER按[新增一筆]後,此BUTTON有另外寫什麼在其中? 新增的button內沒其他的程式,查核程式我寫在其他地方
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-11-18 19:39:32 IP:61.219.xxx.xxx 未訂閱
我下sapno=''表示一定找不到資料,而這樣就能新增一筆空白給使用者輸入了 -->要新增一筆空白,何不直接用ADOQUERY.InsertADOQUERY.Append呢?
tonytop
中階會員


發表:6
回覆:114
積分:89
註冊:2003-12-04

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-11-19 20:20:11 IP:203.204.xxx.xxx 未訂閱
之所以不用.insert或append是為了不讓user修改到原本的資料,這麼做雖然方便,但日後可能不好維護,另外請先確定在沒有錯誤訊息的狀況下,post後資料真的儲存到資料庫了嗎?因為oracle需要一些設定,資料才會真正存入,要先檢查一下唷! 試了好久,還是試不出畫面上的錯誤訊息,不知妳在query的beforepost或afterpost事件中是否有其他指令影響到,有的話麻煩貼上來see see,竟然where 1=1會秀出所有資料但正常,那改為SELECT * FROM TYDGSMP1 WHERE 1<>1 即可,妳再測試看看吧!good luck. <[忙盲茫]> ☆俺要升級啊☆
ctw54
一般會員


發表:9
回覆:7
積分:3
註冊:2005-10-31

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-11-22 09:13:44 IP:61.66.xxx.xxx 未訂閱
我已試過1<>1的sql....可是還是出現相同的錯誤訊息..@_@ 我在beforepost有做一些處理...附上程式碼(有點長)...麻煩各位幫我看一下是否有異常之處. Beforepost程式 DBGrid1.Fields[38].AsString:=formatdatetime('yyyymmdd',date); DBGrid1.Fields[40].AsString:=M_MENU.user_id; if SEL_GSMP1.State=dsInsert then //新增模式 begin SEL_QRY.Close; SEL_QRY.SQL.Clear; SEL_QRY.SQL.Add('SELECT * FROM TYDGSMP1 WHERE ODERNO=''' DBEdit2.Text ''' AND ODITM=''' DBEdit3.Text ''' '); SEL_QRY.Open; while not SEL_QRY.Eof do begin showmessage('此訂單號碼及項次已存在,無法新增,請重新確認!!'); abort; end; if DBCBox2.Text='' then begin showmessage('訂單類別不可空白!!'); abort; end; {計算預估OP IN及管制每日樣品筆數} // // if DBEdit10.Text='' then begin showmessage('客戶交期不得空白,請確認ERP中的訂單資料!!'); abort; end; if Length(DBEdit7.Text)=10 then //擷取產品編號的產品階層 begin tmp_pl:=copy(DBEdit7.Text,1,1) copy(DBEdit7.Text,5,1); end else if Length(DBEdit7.Text)=12 then begin tmp_pl:=copy(DBEdit7.Text,1,1) copy(DBEdit7.Text,7,1); end else begin abort; end; SEL_QRY2.Close; SEL_QRY2.SQL.Clear; SEL_QRY2.SQL.Add('SELECT PDLAR,NMTOTAL FROM TYDGSMP6'); SEL_QRY2.SQL.Add('WHERE PDLAR=''' tmp_pl ''' '); SEL_QRY2.Open; {計算fopin date} fopin:=StrToDate(copy(DBEdit10.Text,1,4) '/' copy(DBEdit10.Text,5,2) '/' copy(DBEdit10.Text,7,2)); tmp_date:=FormatDateTime('YYYYMMDD',fopin-sel_qry2.Fields[1].AsFloat); //預估OP IN日期 dat2:=formatdatetime('yyyymmdd',date); if tmp_date
系統時間:2024-06-16 17:52:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!