志翔科技有限公司後勤網

後勤等待處理訊息站,請各位成員努力消除待工區
 
首頁首頁  會員註冊會員註冊  登入登入  

分享 | 
 

 有關客戶端資料庫維護工具database_correct

向下 
發表人內容
flying
Admin
avatar

文章數 : 207
注冊日期 : 2008-11-11

發表主題: 有關客戶端資料庫維護工具database_correct   周三 11月 26, 2008 11:11 am

問題: 客戶資料庫在遠端,但有時會新增修改欄位,或變更 Trigger,Stored procedure 內容,總不能都跑到現場去處理吧? 有何省時省力辦法?

此工具用以維護客戶端database架構,使本公司人員不必親自到場修改database
修改database包含更改table架構,加改stored procedure,function,傳送文件檔給database的某table吃下

1.放在客戶MIS的c:\id21
2.含database_correct.exe 與 database_correct.ini

database_correct.ini配置多個執行區段,舉範例內容並說明如下

[database] 代表要處理的database,透過 inifile去連結database
inifile=c:\id21\policeprj.ini

[workdb] 該專案附屬work.db
inifile=c:\id21\policeprjwork.ini

[work] 代表要執行的簡易SQL子句
sql1=alter table watch_sub1 modify remark char(200);
sql2=alter table watch_sub2 modify remark char(200);
sql3=create table ptype (typename char(20) primary key);
sql4=alter table findcar add needcall char(1),add callover char(1);
(註:SQL右邊有無加;號都沒有關係)

[msg] 對應[work]指令回應的訊息
msg1=修改治安顧慮場所犯罪事實備註到200bytes
msg2=修改治安顧慮場所民眾檢舉備註到200bytes
msg3=增加營業型態選單TABLE
msg4=車輛協尋增加是否通報與通報截止

[workfile] 代表開啟該文字檔內容執行SQL,複雜到多行的SQL子句或stored procedure,function以此方式處理
file1=c:\id21\create_table_watchplaceman.sql
file2=c:\id21\get_policeunit_name.sql


[filemsg] 對應於[workfile]的回應訊息
msg1=增加table watchplaceman 治安顧慮場所人員名冊
msg2=修改database function取單位名稱

[appfile] 欲新增填表的資料文件檔,當需要幫客戶執行insert rowdata的時候會用到
file1=c:\id21\baseman.txt

[apptable] 對應新增文件檔的database table對象
table1=baseman

idoncys6 在 星期三 十二月 29, 2004 5:58 pm 作了第 2 次修改


flying 在 周日 12月 14, 2008 5:47 pm 作了第 1 次修改
回頂端 向下
檢視會員個人資料 http://idon.666forum.net
flying
Admin
avatar

文章數 : 207
注冊日期 : 2008-11-11

發表主題: 回復: 有關客戶端資料庫維護工具database_correct   周三 11月 26, 2008 11:11 am

系統劇本(工作視窗設定維護)已經暫不開放客戶端操作,需改設計客戶專用任務分配視窗,所以期間有新增功能鈕要發怖
必須透過database_correct將工作任務發怖出去
底下範例為針對使用者群組21發怖第71號工作任務視窗,圖鈕位於工作底槁位置暫放左上方,由客戶自行調整位置與設定按鈕圖形
該鈕權等rightlev設成5,為一般權限
有關第71號窗非任務發怖相關的議題,諸如datawindow配置等是放在小鐵鎚檔,其隸屬work.db管轄

insert into emp_work emp_id,work_id,picturename,x,y,height,width,gotit,readdata,levelpos,rightlev) values(21,71,'c:\id21\button\factory.bmp',1,1,200,200,1,1,1,5);
回頂端 向下
檢視會員個人資料 http://idon.666forum.net
flying
Admin
avatar

文章數 : 207
注冊日期 : 2008-11-11

發表主題: 回復: 有關客戶端資料庫維護工具database_correct   周三 11月 26, 2008 11:11 am

如果所有欄位處理包含新增與修改屬性等湊在一個SQL子句,須把握可以在客戶端執行成功,因為其中一個欄位失敗,將造成整行SQL失敗
最常見於某欄位已存在,卻被列為add 欄位
碰到不確定的多欄位處理SQL,最好將之分成單一欄位單一SQL子句處理.

[work]
sql1=alter table buyer_item add allowbat char(1),add leaddate numeric(4),add thirdno char(14),modify item_name not null;

執行失敗,改成
[work]
sql1=alter table buyer_item add allowbat char(1)
sql2=alter table buyer_item add leaddate numeric(4)
sql3=alter table buyer_item add thirdno char(14)
sql4=alter table buyer_item modify item_name not null
回頂端 向下
檢視會員個人資料 http://idon.666forum.net
flying
Admin
avatar

文章數 : 207
注冊日期 : 2008-11-11

發表主題: 回復: 有關客戶端資料庫維護工具database_correct   周三 11月 26, 2008 11:11 am

案例研究

table : endpap 年終獎金明細,yearend年終獎金表頭,其中endpap透過yearnum char(2)年度值與yearend產生關連

endpap並沒有建foreign key與yearend相連,但在yearend有建trigger,其內容為當刪除yearend資料時,要將提到的年度
所有endpap相同年度者一併刪除, trigger內容如下
ALTER trigger delete_also_endpap before delete order 2 on
DBA.yearend
referencing old as old_name
for each row
begin
 delete from endpap where yearnum = old_name.yearnum
end

修改命令如下
---->客戶要求將93年改成94,因為年度打錯,但資料已輸入完畢
因此工程師填在database_correct.ini檔的指令如下
[work]
sql1=update yearend set yearnum='94' where yearnum='93'
sql2=update endpap set yearnum='94' where yearnum='93'

這樣看似沒錯,但當sql1執行後,yearend成功將yearnum改成94,但它卻會觸發其主鍵修改,主鍵修改一般預設是
insert before delete

結果它在過程執行了刪除93年度指令,之後才新增一筆94 年度,問題就出在它刪除93年度剎那,93年度位於endpap的資料也被刪掉了

修正:將執行順序對調

sql1=update endpap set yearnum='94' where yearnum='93'
sql2=update yearend set yearnum='94' where yearnum='93'

如過endap有建 foreugn key,指令應改為
sql1=insert into yearend (yearnum) values('94')
sql2=update endpap set yearnum='94' where yearnum='93'
sql3=delete yearend where yearnum='93'
回頂端 向下
檢視會員個人資料 http://idon.666forum.net
 
有關客戶端資料庫維護工具database_correct
回頂端 
1頁(共1頁)

這個論壇的權限:無法 在這個版面回復文章
志翔科技有限公司後勤網 :: 後勤主題與待工區 :: 後勤標準化-
前往: