DBGrid Post後會出現錯誤訊息 |
尚未結案
|
ctw54
一般會員 發表:9 回覆:7 積分:3 註冊:2005-10-31 發送簡訊給我 |
請問各位:
我使用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 發送簡訊給我 |
|
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
|
ctw54
一般會員 發表:9 回覆:7 積分:3 註冊:2005-10-31 發送簡訊給我 |
(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 發送簡訊給我 |
您好﹗ 覺得您的程式碼有些怪怪的﹒
新增一筆空白記錄時﹐為何是用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 發送簡訊給我 |
用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 發送簡訊給我 |
我採用的是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 發送簡訊給我 |
您好﹗ 將程式碼改成如下﹕
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 發送簡訊給我 |
|
kgt
高階會員 發表:17 回覆:308 積分:165 註冊:2002-03-13 發送簡訊給我 |
|
ctw54
一般會員 發表:9 回覆:7 積分:3 註冊:2005-10-31 發送簡訊給我 |
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 發送簡訊給我 |
|
tonytop
中階會員 發表:6 回覆:114 積分:89 註冊:2003-12-04 發送簡訊給我 |
之所以不用.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 發送簡訊給我 |
我已試過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
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |