为了防止DSN不存在或其设置被他人修改时造成应用程序运行错误,可以用ADODB.Connection创建一个临时ODBC数据源,这样可以保证我们使用的系统DSN的参数设置是正确的.下面的语句可以创建一个临时ODBC系统DSN,对应一个ACCESS数据库,路径为 C:\Inetpub\wwwroot\test.mdb AConnection.open('Driver={Microsoft
Access Driver (*.mdb)};DBQ=
C:\inetpub\wwwroot\test.mdb')
Access Driver (*.mdb)};DBQ=
C:\inetpub\wwwroot\test.mdb')
'显示主表,子表的内容,主表显示在txtemp(),cboemp()中,子表显示在grddetails中.
strDB = App.Path + "\data\temptest.MDB;Jet OLEDB:Database Password=;"
strSQL = "SHAPE {SELECT icebox_id,icebox_name,icebox_number,icebox_buydate,icebox_repair,name FROM [icebox] ORDER BY icebox_id} AS ParentCMD" & _
" APPEND ({SELECT icebox_id,iceboxdoor_id,temperature_upperlimit,temperature_lowerlimit FROM [icebox_door] ORDER BY icebox_id} AS ChildCMD" & _
" RELATE icebox_id TO icebox_id) AS ChildCMD"
Set db = New ADODB.Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=MSDataShape;Data PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDB
Set adoPrimaryRS = New ADODB.Recordset
adoPrimaryRS.Open strSQL, db, adOpenStatic, adLockOptimistic
For Each oText In Me.txtEmp
Set oText.DataSource = adoPrimaryRS
Next If adoPrimaryRS.RecordCount <> 0 Then
adoPrimaryRS.MoveFirst
Set grdDetails.DataSource = adoPrimaryRS("ChildCMD").UnderlyingValue
For i = 0 To 2
Set CboEmp(i).DataSource = adoPrimaryRS
Next i
End If
end sub
Public Sub cmdAdd_Click()
' 按增加键
On Error GoTo AddErr
Dim i
With adoPrimaryRS
.AddNew
End With
txtEmp(0).SetFocus
End SubPublic Sub cmdUpdate_Click()
' 按存盘键
'On Error GoTo UpdateErr
adoPrimaryRS.UpdateBatch adAffectAll
End Sub我的子表用datagrid显示,可是输入数据在datagrid后,存盘时,竟然没存进去,但修改数据时,又可存盘,请大家邦我看一下.谢谢
adoPrimaryRS.Open strSQL, db, adOpenStatic, adLockOptimistic是不是这句的问题?所带的几个参数对不对取得的记录集的状态可能是locked
请大家都来邦我看看,对于同时输入两个相关联的一对多表,大家用的什么控件?
改用 adOpenDynamic