如果同一個access庫檔案,對應2個adodc及2個datagrid,一個瀏覽,一個查詢,如果都在form1,則顯示正常;
如果查詢在form2,則顯示的第一條記錄的第一個欄位的值就沒了,其余記錄正常,而原瀏覽資料庫的該欄位的值仍然存在。
不知為什么?請高手指點。代碼為:Form2.Adodc2.Refresh
uj5u.com熱心網友回復:
不要用Adodc訪問資料,用Adodb直接訪問資料庫,得到資料集(Recordset),然后系結到控制元件顯示。參考路徑:http://bbs.csdn.net/topics/390968964
uj5u.com熱心網友回復:
下載windows的adodb.dll后,運行regsvr32 adodb.dll。提示已加載adodb.dll,但沒有找到DLLRegisterServer輸入點。無法注冊這個檔案。不能使用adodb工具。uj5u.com熱心網友回復:
在VB6中參考Microsoft ActiveX Data Object 2.5uj5u.com熱心網友回復:
下載最新的MDAC安裝一下,不是所有的組件只注冊一個dll就能使用的。uj5u.com熱心網友回復:
不要用控制元件,直接用ADOuj5u.com熱心網友回復:
adodb有沒有簡單一點的,與資料庫聯接后,與datagrid系結就可以實作顯示、增、刪、改了。Private Sub Form_Load()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim connect_string As String
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
connect_string = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\電器庫.mdb;Persist Security Info=False"
rs.open connect_string
End Sub
運行后提示實時錯誤3709:無法運行此操作,在此背景關系中可能已被關倍訓無效。
求教該怎樣改,謝謝。
uj5u.com熱心網友回復:
可以顯示了,但是不能更改,不知哪里錯了。Private Sub Form_Load()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.CursorLocation = adUseClient
cn.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\電器庫.mdb;Persist Security Info=False"
cn.open
rs.open ("select * from 電器庫"), cn, adOpenDynamic, adLockBatchOptimistic
Set DataGrid1.DataSource = rs
DataGrid1.AllowAddNew = True
DataGrid1.AllowDelete = True
DataGrid1.AllowUpdate = True
DataGrid1.Refresh
End Sub
uj5u.com熱心網友回復:
首先、整個工程要共用同一個Connection實體,否則就是多個會話。一個會話鎖定了記錄另外一個會話不能編輯是很正常啊。其次、瀏覽的那個RecordSet用只讀模式。
uj5u.com熱心網友回復:
這是一個 Bug。當你的 DataGrid 控制元件一開始就獲得焦點時,就會出現此問題。你在 DataGrid1 的屬性視窗中,將其 TabIndex 改為 0 以外的其他值就可以了。當然,前提是表單上有其他控制元件。uj5u.com熱心網友回復:
哎呀,這是這問題,多謝了。uj5u.com熱心網友回復:
還是沒法避免用戶先點擊DataGrid使其獲得焦點,然后再切換到Form2上執行查詢啊。其實界面設計也有問題,編輯狀態下(打開了Form1),就不應該同時進行查詢(去打開Form2)。
用DataGrid編輯其實是把整個表看成了一個資料單位,這個資料單位沒完成編輯之前,是不能被使用的。
uj5u.com熱心網友回復:
焦點問題解決了其他控制元件的TabIndex 改為 0 以外的其他值,tabstop屬性為true,visible為true就行了。
adodb仍有問題
adodc無法完全關閉,退出按鈕不可用,必須點擊視窗X來關閉,似乎不太好看。adodb的內容不能修改。
整個工程要共用同一個Connection實體,adodb只有這form1 load的一個應用。
cn.CursorLocation = adUseClient
還是rs.CursorLocation = adUseClient
uj5u.com熱心網友回復:
1 cn.CursorLocation = adUseClient,rs 物件會繼承其 Connection 物件的此屬性。2 試試
ADODC1.Recordset.ActiveConnection.Close
另外,同意老虎的意見,既然使用了 ADODB 的 Connection 和 RecordsSet 物件,能不用 ADODC 就不用。這樣比較統一。
你可以在 Form2 中利用已有的 cn 打開一個新的 rs2,然后
Set DataGrid2.DataSource = rs2
3 你說的不能修改,可能是與你設定 adLockBatchOptimistic 有關。試試
rs.UpdateBatch
uj5u.com熱心網友回復:
1、使用rs.CursorLocation = adUseClient 或cn.CursorLocation = adUseClient 效果都一樣。2、ADODC1.Recordset.ActiveConnection.Close與ADODC1.Recordset.Close一樣并沒有退出行程,
如加上Form1.Hide,就能隱藏界面,相當于退出了。
3、把adLockBatchOptimistic更改為 adLockOptimistic ,就可以修改了,rs.Update不用變。
4、adodb,運行程式,點擊退出,提示“當前行不可用”。
Private Sub exit_Click()
rs.Close
Set rs = Nothing
Form1.Hide
Form2.Hide
End Sub
uj5u.com熱心網友回復:
Private Sub exit_Click()rs.Close
Set rs = Nothing
Form1.Hide
Form2.Hide
End Sub
運行無問題,但是退不出行程。
Private Sub exit_Click()
Set rs = Nothing
unload Form2
unload Form1
End Sub
運行后不提示錯誤,也退出了行程。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/102524.html
上一篇:怎樣下載資源
