'前言
STUDENT 資料表的欄位為 | SID | VISIT | 兩個欄位資料型別都是文字。
資料分別是
| 1 | NO |
| 2 | NO |
| 3 | NO |
| 4 | NO |
| 5 | NO |
| 6 | NO |
| 7 | NO |
| 8 | NO |
| 9 | NO |
程式一與程式二是分別開來的兩支程式 (@@不同的執行檔@@),他們都連到STUDENT這個資料表。我的問題是,為什麼執行程式一的 cmdOne_Click() 之後,馬上執行程式二的 cmdOne_Click() ,所查到的資料是未更新的。 舉例來說好了,按下程式一更新編號1號的同學的VISIT欄位由NO變為YES,但是 0.5 秒以後按下程式二所查得的資料不是期望的 2 號學生,卻是 1 號學生。這是為什麼呢?
但是如果先執行程式一之後再隔個 2 秒後再執行程式二則可以取得正確所要的資料(2號同學),是不是資料表更新並不是馬上而且立即的呢?
請問各位大大有什麼方法,可以馬上、立即的更新資料庫的資料呢?謝謝。
Program 1(程式一)
Private Sub cmdOne_Click()
Dim nSID as string
'找出學生編號最小的,而且是還沒有拜訪的記錄,
vSQL = " Select Min(SID) as BB from STUDENT Where VISIT = " & "'" & "NO" & "'"
rst.Open vSQL, gCnt, adOpenDynamic, adLockPessimistic
nSID = rst!BB
'將這位學生的 VISIT 欄位由 NO 變為 YES
vSQL = " Select * from STUDENT Where SID = " & "'" & nSID & "'"
rst.Open vSQL, gCnt, adOpenDynamic, adLockPessimistic
rst.Fields("VISIT") = "YES"
rst.Update
Set rst = Nothing
End Sub
Program 2(程式二)
Private Sub cmdOne_Click()
vSQL = " Select Min(SNo) as BB from STUDENT Where VISIT = " & "'" & "NO" & "'"
rst.Open vSQL, gCnt, adOpenDynamic, adLockPessimistic
text1.text = rst.!BB
Set rst = Nothing
End Sub
2007-01-31 15:27:45 · 2 個解答 · 發問者 blueson 2 in 電腦與網際網路 ➔ 程式設計
Hi, 我的按鍵一次只會對一筆資料更新,並不是全部把VISIT欄位更新為NO哦…我想這個問題的重點應該是在程式一處理完0.5秒後就馬上執行程式二,所得到的結果,並非預期…
2007-02-01 04:46:01 · update #1
Program (程式一)
Private Sub cmdOne_Click()
DIM F1 AS DAO.RECORDSET
SET F1=CurrentDb.OpenRecordset(" SELECT SID from STUDENT Where VISIT = ' " & "NO" & " ' ORDER BY SID ASC ;")
IF F1.RecordCount THEN
F1.MOVEFIRST
For f2=1 to F1.RecordCount
F1.EDIT
F1("VISIT") = "YES"
F1.Update
F1.MOVENEXT
NEXT
END IF
SET F1=Nothing
End Sub
PS:如果有子表單_ 加 ME!子表單名稱.Requery
2007-02-01 11:20:04 補充:
如果只要改第一筆資料:
IF F1.RecordCount THEN
F1.MOVEFIRST
For f2=1 to F1.RecordCount '刪除
F1.EDIT
F1("VISIT") = "YES"
F1.Update
F1.MOVENEXT'刪除
NEXT
END IF
2007-02-01 11:20:34 補充:
NEXT '刪除
2007-02-01 11:36:10 補充:
有關你的程式:(Sorry!並未完整)
Dim yc As ADODB.Connection
Dim rst As ADODB.Recordset
Set yc = CurrentProject.Connection
Set rst = New ADODB.Recordset
2007-02-01 11:36:48 補充:
**數字限制
2007-02-01 11:37:14 補充:
rst.Open " SELECT SID from STUDENT Where VISIT = ' " & "NO" & " ' ORDER BY SID ASC ;", yc, adOpenKeyset, adLockOptimistic
IF rst.RecordCount THEN
rst.MOVEFIRST
rst("VISIT") = "YES"
rst.Update
END IF
2007-01-31 17:21:52 · answer #1 · answered by pop 7 · 0⤊ 0⤋
一:加上這一段宣告
Dim yc As ADODB.Connection
Dim rst As ADODB.Recordset
Set yc = CurrentProject.Connection
Set rst = New ADODB.Recordset
二:
, gCnt, adOpenDynamic, adLockPessimistic 更改, yc, adOpenKeyset, adLockOptimistic
三:
text1.text = rst.!BB_此條件在 程式一就可以指定.
以上建議.
2007-02-06 10:28:22 · answer #2 · answered by iam_1_001 5 · 0⤊ 0⤋