用戶錄入數據時經常會遇到大量重複數據,即錄入下一條記錄的某個字段時,其值與上一條記錄同字段的值相同。如果編些程序自動錄入相同值會大大提高錄入速度。 |
具體實現方法如下: |
一、程序中主要用到的函數 |
1、FileOpen() 功能:以指定的讀寫模式打開指定的文件,同時返回文件的句柄。 |
2、FileWrite() 功能:從指定文件讀取數據。 |
3、FileClose() 功能:關閉先前用FileOpen()函數打開的文件。 |
4、settext() 功能:得到當前行和列之上的編輯框中的值。 |
5、gettext() 功能:替換在DataWindow控件或DataStore對象的當前行列的編輯框控件中的文本。 |
6、send() 功能:向窗口發送指定的消息並立即執行相應的事件處理程序。 |
7、describe() 功能:返回DataWindow對象或Datastore對象中的其它對象的屬性值。 |
以上函數在有關Pb的函數書中均可以找到,這裏不再詳述,但要注意後面兩個函數的使用方法。 |
二、具體實現方法 |
1、建立window具體控件名稱如圖1所示。
|
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的順序。 |
以上步驟只是簡單的實現快速錄入,如果遇到具體情況還應該做更詳細的編碼。 |