如何實現數據的自動錄入

用戶錄入數據時經常會遇到大量重複數據,即錄入下一條記錄的某個字段時,其值與上一條記錄同字段的值相同。如果編些程序自動錄入相同值會大大提高錄入速度。
具體實現方法如下:
一、程序中主要用到的函數
1、FileOpen() 功能:以指定的讀寫模式打開指定的文件,同時返回文件的句柄。
2、FileWrite() 功能:從指定文件讀取數據。
3、FileClose() 功能:關閉先前用FileOpen()函數打開的文件。
4、settext() 功能:得到當前行和列之上的編輯框中的值。
5、gettext() 功能:替換在DataWindow控件或DataStore對象的當前行列的編輯框控件中的文本。
6、send() 功能:向窗口發送指定的消息並立即執行相應的事件處理程序。
7、describe() 功能:返回DataWindow對象或Datastore對象中的其它對象的屬性值。
以上函數在有關Pb的函數書中均可以找到,這裏不再詳述,但要注意後面兩個函數的使用方法。
二、具體實現方法
1、建立window具體控件名稱如圖1所示。
01_3_1_2a.jpg
2、定義實例變量數組 string is_value[] 和 integer if_File(存放打開文件的句柄)
string is_columncount
3、在window的Open事件中編寫如下代碼
int i
if_File = FileOpen("Sys.ini",LineMode!, Read!, LockRead!)
is_columncount = dw_input.Describe("DataWindow.Column.Count") //取得DataWindow對象的總列數
for i = 1 to integer(is_columncount)
FileRead(if_File, is_value[i])
next
FileClose(if_File)
dw_input.Scrolltorow(dw_input.rowcount()) //將光標設置到最後行列
dw_input.setcolumn(integer(is_columncount))
在window 的Close事件中編寫如下代碼
int i
if_File = FileOpen("Sys.ini",LineMode!, Write!, LockWrite!, Replace!)
for i = 1 to integer(is_columncount)
FileWrite(if_File, is_value[i])
next
FileClose(if_File)
4、給Datawindow control自定義一個回車鍵事件:
Event name: ue_keyenter Event ID: pbm_dwnprocessenter
5、在Datawindow control的ue_keyenter事件中寫入以下代碼
is_value[this.getcolumn()] = this.gettext()
Send(Handle(this),256,9,Long(0,0))
this.settext(is_value[this.getcolumn()])
return 1
在Datawindow control的constructor事件中寫入以下代碼
this.Settransobject(sqlca)
this.retrieve()
6、給cb_append自定義一個回車事件
Event name: ue_keydown Event ID: pbm_keydown
在cb_append的clicked事件中寫入以下代碼
dw_input.Setfocus()
dw_input.ScrollToRow(dw_input.InsertRow(0)) //追加一空記錄並指向新記錄
dw_input.SetColumn(1) //指向公寓名列
dw_input.Settext(is_value[1])
在cb_append的ue_pbm_keydown事件中寫入以下代碼
if keydown(keyenter!) then
this.Triggerevent(clicked!)
end if
※ 注意各個控件的tab order的順序。
以上步驟只是簡單的實現快速錄入,如果遇到具體情況還應該做更詳細的編碼。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章