氣有浩然,學無止境!數據庫操作,無非增刪改查!
1、SetTransObject( )
- 作用
在使用數據窗口控件檢索數據前,必須通知數據窗口使用哪個事務對象來操作數據庫(實際上也就是告訴數據窗口從哪個數據庫中檢索數據)。一般來說,我們在數據窗口控件所在窗口的Open事件中執行SetTransObject()函數
- 示例
數據窗口控件dw_1與連接數據庫的事務對象SQLCA聯系在一起。dw_1.SetTransObject (SQLCA)
2、Retrieve
- 作用
調用數據窗口控件的對象函數Retrieve()把數據裝入數據窗口
- 示例
返回長整型ll_rows,代表檢索出來的數據行數,返回值<1時返回錯誤提示
long ll_rows
dw_main.SetTransObject(SQLCA)
ll_rows = dw_main.Retrieve()
IF ll_rows < 1 THEN
MessageBox("Database Error","No rows retrieved.")
end if
3、InsertRow( )
- 作用
在數據窗口的主緩沖區中插入一個空行
- 示例
返回長整型的行號
long ll_newrow
ll_newrow = dw_employee.InsertRow(0)
dw_employee.ScrollToRow(ll_newrow) //當在數據窗口主緩沖區的末尾插入一行時,新行并不一定能在數據窗
//中看到,這時可以使用函數ScrollToRow( )。
4、deleterow()
- 作用
在數據窗口的主緩沖區(即顯示在用戶面前的數據中)中刪除一行
- 示例
通過getrow獲取當前鼠標所在行號,然后deleterow刪除,最后update更新數據庫
int s
s = dw_1.getrow( ) //該函數返回一個long型值,表示當前行號。如果沒有選中任一行,則返回0,出錯時返回-1。
dw_1.deleterow( s)
dw_1.update( ) //更新數據庫
5、SetSQLSelect()
- 作用
詳述sql select的查詢狀態
- 示例一
string OldSyn, NewSyn
OldSyn = 'SELECT employee.EMP_Name FROM employee WHERE salary < 70000'
NewSyn = 'SELECT employee.EMP_Name FROM employee WHERE salary < 100000'
IF dw_emp.Retrieve( ) = 0 THEN
dw_emp.SetSQLSelect(NewSyn)
dw_emp.Retrieve()
END IF
- 示例二
按照客戶編號查詢數據,sle_1.text為SigleEdit的窗口輸入內容。
string wheresql,newsql
long lrc
if sle_1.text<>"" then
wheresql="where 客戶編號='"+sle_1.text+"'"
newsql=oldsql+wheresql
dw_1.setsqlselect(newsql)
lrc=dw_1.retrieve( )
//如果lrc<1說明沒有檢索到數據,給出一個提示框
if lrc<1 then
messagebox("提示","沒有檢索到,請檢查客戶編號")
end if
else
messagebox("提示","請輸入客戶代號")
end if
6、setfilter
每次setfilter、filter之后,只用setfilter("")即可,不用再filter,下次你retrieve時,由于setfilter("")了,所以是全數數據。示例如下:
dw_1.settransobject(sqlca)
dw_1.retrieve()
dw_1.setfilter("")
if rb_1.checked then
dw_1.setfilter("(圖書編號 like '%"+sle_1.text+"%')")
elseif rb_2.checked then
dw_1.setfilter("(書名 like '%"+sle_1.text+"%')")
elseif rb_3.checked then
dw_1.setfilter("(作者 like '%"+sle_1.text+"%')")
elseif rb_4.checked then
dw_1.setfilter("(出版社 like '%"+sle_1.text+"%')")
end if
dw_1.filter( )
數據窗口四大數據緩沖區:
1、Primary Buffer
這個緩沖區是存放填充窗口中DataWindow控件中數據的,調用DataWindow的Retrieve()函數和InsertRow()函數可以將數據填入這個緩沖區中。當使用有關DataWindow刪除和過濾函數時,相應記錄將從這一緩沖區中刪除。而在執行DataWindow的Update()函數時,PowerBuilder將查看這一緩沖區中的記錄,以形成SQL INSERT和UPDATE語句。
2、Delete Buffer
這個緩沖區保存的是用DeleteRow()函數從Primary Buffer中刪除的記錄,執行Update()函數時,系統根據這一緩沖區的記錄形成DELETE語句。
3、Filter Buffer
這個緩沖區存儲的是從Original Buffer使用Filter()函數過濾到Primary Buffer中后剩余的記錄。
4、Original Buffer
這一緩沖區存儲的是DataWindow最初執行retrieve()函數時得到的全部記錄。當提交數據庫時,根據Primary Buffer生成的UPDATE語句和根據Delete Buffer生成的DELETE語句都要依據這一緩沖區來構造這些SQL語句中的Where子句。