如何在修改Table資料的時候做檢查的動作 |
答題得分者是:st33chen
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
小弟在程式上寫了 Update Table 的程式
小弟希望如果在Update的時候 1.原本的REPAIR_EMP 欄位是NULL 值的時候就直接Update 2.如果REPAIR_EMP 欄位有資料的時候就檢查 ComboBox2的值是否跟已存在的值相同 相同才可以Update 該列資料的其他欄位 不相同就不准Update 以及秀出警告 以下是我的SQL [code delphi] procedure TForm1.Button6Click(Sender: TObject); begin IF ComboBox1.Text = '' then begin showmessage ('請輸入序號') end else begin With csTemp3 do begin Close; Params.Clear; CommandText := 'Update SAJET.G_SN_DEFECT_SPC ' 'SET REPAIR_RESULT = ''' Edit7.Text ''', ' 'REPAIR_EMP = ''' ComboBox2.Items.Strings[ComboBox2.Itemindex] ''', ' 'WAY = ''' Edit8.Text ''', ' 'REMARK = ''' Edit9.Text ''', ' 'RP_STATUS = ''1'' ' 'Where Serial_Number = ''' ComboBox1.Text ''' ' Execute; showmessage ('處理完成!'); end; Edit7.Clear; Edit8.Clear; Edit9.Clear; ComboBox2.Clear; end; Button1.Click; end; [/code]
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
|
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
用 oracle 的 nvl 如何? // 懶得寫那麼多字, 先存在變數中. wrepair_emp := ComboBox2.Items.Strings[ComboBox2.Itemindex]; CommandText := 'Update SAJET.G_SN_DEFECT_SPC ' ' SET REPAIR_RESULT = ''' Edit7.Text ''', ' ' REPAIR_EMP = ''' wrepair_emp ''', ' ' WAY = ''' Edit8.Text ''', ' ' REMARK = ''' Edit9.Text ''', ' ' RP_STATUS = ''1'' ' 'Where Serial_Number = ''' ComboBox1.Text ''' ' // 如果原為空值, 改成使用者輸入的值, 所以相等或空值都會更新 ' and nvl(repair_emp,''' wrepair_emp ''')=''' wrepair_emp ''''; Execute; if rowsaffected=0 then showmessage('repair_emp 不等於 ' wrepair_emp) else begin showmessage('更新完成'); end; 請試一下, 我沒實測.
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
Dear st33chen 大大
感謝你 已經可以按照名字做檢查的動作了 只是在警訊部份 if rowsaffected=0 then showmessage('repair_emp 不等於 ' wrepair_emp) else begin 我在Delphi 7 好像找不到 rowsaffected 這各 是否有其他可用之函數呢 這函數應該是記算指有更動過的rows ===================引 用 st33chen 文 章=================== 您好, 用 oracle 的 nvl 如何? // 懶得寫那麼多字, 先存在變數中. wrepair_emp := ComboBox2.Items.Strings[ComboBox2.Itemindex]; CommandText := 'Update SAJET.G_SN_DEFECT_SPC ' ' SET REPAIR_RESULT = ''' Edit7.Text ''', ' ' REPAIR_EMP = ''' wrepair_emp ''', ' ' WAY = ''' Edit8.Text ''', ' ' REMARK = ''' Edit9.Text ''', ' ' RP_STATUS = ''1'' ' 'Where Serial_Number = ''' ComboBox1.Text ''' ' // 如果原為空值, 改成使用者輸入的值, 所以相等或空值都會更新 ' and nvl(repair_emp,''' wrepair_emp ''')=''' wrepair_emp ''''; Execute; if rowsaffected=0 then showmessage('repair_emp 不等於 ' wrepair_emp) else begin showmessage('更新完成'); end; 請試一下, 我沒實測.
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
非常抱歉, 我很少用 ttable, 沒注意到 ttable 沒有 rowsaffected
(您是用 ttable 吧) 請改用 tquery, 他有這個屬性. ttable 的話就要找一下有沒類似屬性.
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-04-09 09:13:40, 註解 無‧
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
大大別這麼說 還是很謝謝你
剛剛查詢以及問人 都說 好像沒有這各屬性 那我又想到一各方式 大大你能不能教我改寫成 在UPDATE 之前先檢查 ComboBox 上的值 跟要改的ROw 裡面的Repair_EMP 是否相同 如果不同就提出警訊 像改成這樣可以嗎??? ===================引 用 st33chen 文 章=================== 非常抱歉, 我很少用 ttable, 沒注意到 ttable 沒有 rowsaffected (您是用 ttable 吧) 請改用 tquery, 他有這個屬性. ttable 的話就要找一下有沒類似屬性.
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
我認為沒有必要這樣, 改用 TQUERY 比較快, 就是
1. 先拉一個 QUERY1 2. WITH csTemp3 改成 WITH QUERY1 3. COMMANDTEXT 改成 SQL.TEXT 4. EXECUTE 改成 EXECSQL 應該就 OK 了 若要改成 UPDATE 前先判斷是否存在, 變成要兩段式, 效率不佳 不然就用 TRY 試看看 // 懶得寫那麼多字, 先存在變數中. wrepair_emp := ComboBox2.Items.Strings[ComboBox2.Itemindex]; CommandText := 'Update SAJET.G_SN_DEFECT_SPC ' ' SET REPAIR_RESULT = ''' Edit7.Text ''', ' ' REPAIR_EMP = ''' wrepair_emp ''', ' ' WAY = ''' Edit8.Text ''', ' ' REMARK = ''' Edit9.Text ''', ' ' RP_STATUS = ''1'' ' 'Where Serial_Number = ''' ComboBox1.Text ''' ' // 如果原為空值, 改成使用者輸入的值, 所以相等或空值都會更新 ' and nvl(repair_emp,''' wrepair_emp ''')=''' wrepair_emp ''''; TRY Execute; showmessage('更新完成'); EXCEPT showmessage('repair_emp 不等於 ' wrepair_emp); end;
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
謝謝st33chen大大 我剛剛有想到一各簡單的方法 就是在UPDATE之前 先作一次SELECT 把人名帶出來 然後再還沒UPDATE之前 就先寫 IF SELECT 出來的人名 <> wrepair_emp 就'repair_emp 不等於 ' wrepair_emp 已經可以囉^_^ 還是很謝謝你提供的寶貴意見 ===================引 用 st33chen 文 章=================== 我認為沒有必要這樣, 改用 TQUERY 比較快, 就是 1. 先拉一個 QUERY1 2. WITH csTemp3 改成 WITH QUERY1 3. COMMANDTEXT 改成 SQL.TEXT 4. EXECUTE 改成 EXECSQL 應該就 OK 了 若要改成 UPDATE 前先判斷是否存在, 變成要兩段式, 效率不佳 不然就用 TRY 試看看 // 懶得寫那麼多字, 先存在變數中. wrepair_emp := ComboBox2.Items.Strings[ComboBox2.Itemindex]; CommandText := 'Update SAJET.G_SN_DEFECT_SPC ' ' SET REPAIR_RESULT = ''' Edit7.Text ''', ' ' REPAIR_EMP = ''' wrepair_emp ''', ' ' WAY = ''' Edit8.Text ''', ' ' REMARK = ''' Edit9.Text ''', ' ' RP_STATUS = ''1'' ' 'Where Serial_Number = ''' ComboBox1.Text ''' ' // 如果原為空值, 改成使用者輸入的值, 所以相等或空值都會更新 ' and nvl(repair_emp,''' wrepair_emp ''')=''' wrepair_emp ''''; TRY Execute; showmessage('更新完成'); EXCEPT showmessage('repair_emp 不等於 ' wrepair_emp); end;
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |