程式包括“新增,删除,编辑,储存,取消和查询代码。
例如在Form中设置3个Textbox和5个CommandButton
分别为
Textbox=Date(txtdate),Items(txtitems),Price(txtprice).
CommandButton = 新增(cmdadd),储存(cmdsave),删除(cmddelete),
取消新增(cmdcancel),编辑(cmdedit).
以下三段写在General(一般)事件里
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim mode as string
Private Sub Form_Load()
cn.ConnectionString = "provider=Microsoft.jet.OLEDB.4.0" &_
"Persist security info= FalseData source=" &App.Path &"\daily.mdb"
cn.Open
rs.CursorLocation = adUseClient
rs.Open "Daily", cn, adOpenKeyset, adLockPessimistic (Daily为Access 资料表名)
For i = 0 To rs.Fields.Count - 1
List1.AddItem rs.Fields(i).Name
Next i
End Sub
以下自作函数以便文本栏显示资料表资料
Sub LoadControls()
If rs.BOF = False And rs.EOF = False Then
txtdate = rs.Fields("Date")
txtitems = rs.Fields("Items")
txtprice = rs.Fields("Price")
End If
End Sub
以下为新增按钮代码
Private Sub cmdadd_Click()
mode = "add"
txtdate.Text = CStr(Date) (显示系统今天日期)
txtitems.SetFocus
txtitems = ""
txtprice = ""
End Sub
以下为编辑按钮代码
Private Sub cmdedit_Click()
mode = "edit"
Call LoadControls
txtdate.SetFocus
End Sub
以下为删除按钮代码
Private Sub cmddelete_Click()
If rs.EOF = False Then
X = MsgBox("Do you want to delete this record", vbExclamation + vbYesNo)
If X = vbYes Then
rs.Delete
rs.Requery
Call LoadControls
Else
Exit Sub
End If
End If
End Sub
以下为储存按钮代码
Private Sub cmdsave_Click()
If mode = "add" Then
rs.AddNew
rs.Fields("Date") = txtdate
rs.Fields("Items") = txtitems
rs.Fields("Price") = txtprice
rs.Update
MsgBox "Successfully Save Data", vbInformation + vbOKOnly
rs.Requery
txtdate.SetFocus
Call LoadControls
Exit Sub
End If
End Sub
If mode = "edit" Then
rs.Fields("Date") = txtdate
rs.Fields("Items") = txtitems
rs.Fields("Price") = txtprice
rs.Update
MsgBox "Successfully Save Data", vbInformation + vbOKOnly
rs.Requery
txtdate.SetFocus
Call LoadControls
Exit Sub
End If
以下为取消新增按钮代码
Private Sub Cmdcancel_Click()
Call LoadControls
End Sub
-------------------------------
查询:
在form加上1个Textbox,1个commmandbutton和1个Listbox
Textbox=txtfind
CommandButton=cmdsearch
ListBox=List1
可查询日期,文字和数字.
Private Sub cmdsearch_Click()
Select Case rs.Fields(List1.ListIndex).Name
Case "Items"
SQL = "select * from Table Name where Items=" &"'" &txtfind.Text &"'"
Case "Price"
SQL = "select * from Table Name where Price=" &txtfind.Text
Case "Date"
SQL = "select * from Table Name where Date = #" &txtfind.Text &"#"
End Select
If rs.State = adStateOpen Then rs.Close
rs.Open SQL, cn, adOpenStatic, adLockOptimistic
End Sub
你问的应该是数据库并发吧。数据库事务并发带来的问题
数据库事务并发带来的问题有:更新丢失、脏读、不可重复读、幻象读。假设张三办了一张招商yhk,余额100元,分别说明上述情况。
1、更新丢失:一个事务的更新覆盖了另一个事务的更新。事务A:向yhk存钱100元。事务B:向yhk存钱200元。A和B同时读到yhk的余额,分别更新余额,后提交的事务B覆盖了事务A的更新。更新丢失本质上是写 *** 作的冲突,解决办法是一个一个地写。
2、脏读:一个事务读取了另一个事务未提交的数据。事务A:张三妻子给张三转账100元。事务B:张三查询余额。事务A转账后(还未提交),事务B查询多了100元。事务A由于某种问题,比如超时,进行回滚。事务B查询到的数据是假数据。脏读本质上是读写 *** 作的冲突,解决办法是写完之后再读。
3、不可重复读:一个事务两次读取同一个数据,两次读取的数据不一致。事务A:张三妻子给张三转账100元。事务B:张三两次查询余额。事务B第一次查询余额,事务A还没有转账,第二次查询余额,事务A已经转账了,导致一个事务中,两次读取同一个数据,读取的数据不一致。不可重复读本质上是读写 *** 作的冲突,解决办法是读完再写。
4、幻象读:一个事务两次读取一个范围的记录,两次读取的记录数不一致。事务A:张三妻子两次查询张三有几张yhk。事务B:张三新办一张yhk。事务A第一次查询yhk数的时候,张三还没有新办yhk,第二次查询yhk数的时候,张三已经新办了一张yhk,导致两次读取的yhk数不一样。幻象读本质上是读写 *** 作的冲突,解决办法是读完再写。
以上转自:http://www.cnblogs.com/nzbbody/archive/2012/08/29/2661689.html
===============
解决方案:
简单的方案就是每个sql执行过程中都加上一个事物,这样能控制表的并发,但是执行过程中会比较慢。
复杂就是建一个数据库连接,然后进行并发访问控制(lock住),每次数据库读写前都进行数据库连接的获取,用完再释放,期间别的访问过来都会强制等待。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)