当前位置:编程学习 > VB >>

ado recordset addnew语法怎么使用,主要是带的参数不太明白.求助!!

我使用ado和datagrid这2个控件绑定来显示ACCESS数据库,运行时我需要把收到的数据直接在datagrid控件中显示出来,我用ado.recordset.addnew来添加新记录,运行出来确实显示添加了一行可是没数据显示,后来发现addnew打出括号后可以跟参数,我估计就是参数没选,因为datagrid显示ACCESS数据时就要对应列里的标题,不然不能显示.所以我想问下具体参数怎么带??参数好象提示fields,valuae. --------------------编程问答--------------------
引用MSDN:
AddNew 方法
      

创建可更新 Recordset 对象的新记录。

语法

recordset.AddNew FieldList, Values

参数

FieldList   可选。新记录中字段的单个名称、一组名称或序号位置。

Values   可选。新记录中字段的单个或一组值。如果 Fields 是数组,那么 Values 也必须是有相同成员数的数组,否则将发生错误。字段名称的次序必须与每个数组中的字段值的次序相匹配。

说明

使用 AddNew 方法创建和初始化新记录。通过 adAddNew 使用 Supports 方法可验证是否能够将记录添加到当前的 Recordset 对象。

在调用 AddNew 方法后,新记录将成为当前记录,并在调用 Update 方法后继续保持为当前记录。如果 Recordset 对象不支持书签,当移动到其他记录时将无法对新记录进行访问。是否需要调用 Requery 方法访问新记录则取决于所使用的游标类型。

如果在编辑当前记录或添加新记录时调用 AddNew,ADO 将调用 Update 方法保存任何更改并创建新记录。

AddNew 方法的行为取决于 Recordset 对象的更新模式以及是否传送 Fields 和 Values 参数。

在立即更新模式(调用 Update 方法时提供者会立即将更改写入基本数据源)下,调用不带参数的 AddNew 方法可将 EditMode 属性设置为 adEditAdd。提供者将任何字段值的更改缓存在本地。调用 Update 方法可将新记录传递到数据库并将 EditMode 属性重置为 adEditNone。如果传送了 Fields 和 Values 参数,ADO 则立即将新记录传递到数据库(无须调用 Update),且 EditMode 属性值没有改变 (adEditNone)。

在批更新模式(提供者缓存多个更改并只在调用 UpdateBatch 时将其写入基本数据源)下,调用不带参数的 AddNew 方法可将 EditMode 属性设置为 adEditAdd。提供者将任何字段值的更改缓存在本地。调用 Update 方法可将新的记录添加到当前记录集并将 EditMode 属性重置为 adEditNone,但在调用 UpdateBatch 方法之前提供者不将更改传递到基本数据库。如果传送 Fields 和 Values 参数,ADO 则将新记录发送给提供者以便缓存;需要调用 UpdateBatch 方法将新记录传递到基本数据库。

如果 Unique Table 动态属性被设置,并且 Recordset 是对多个表执行 JOIN 操作的结果,那么,AddNew 方法只能将字段插入到由 Unique Table 属性所命名的表中。


        
--------------------编程问答--------------------

            
                
            
--------------------编程问答--------------------

            


下面是完整显示数据库数据的例子 你看看,使用的就是你说的那个控件,
Dim objRs As New Recordset, objCn As New Connection, intPage As Integer
'Dim objDataSource As Recordset

Public Sub ShowData(ByVal intPage As Integer)

    Dim intPageCount As Integer, I As Integer, J As Integer
    objRs.PageSize = Val(txtPageSize)
    objRs.AbsolutePage = intPage
    
    
    MSFlexGrid1.Clear
    For I = 0 To objRs.Fields.Count - 1
        MSFlexGrid1.TextMatrix(0, I) = objRs.Fields(I).Name
    Next
    For I = 1 To objRs.PageSize
        For J = 0 To objRs.Fields.Count - 1
            MSFlexGrid1.TextMatrix(I, J) = objRs.Fields(J)
        Next
        objRs.MoveNext
       If objRs.EOF Then Exit For
    Next
    


'    '创建一个局部的recordset 对象保存objrs 当前记录数据
'    For intRecord = 0 To objRs.Fields.Count - 1
'        objDataSource.Fields.Append objRs.Fields(intRecord).Name, adVarChar, _
'        objRs.Fields(intRecord).DefinedSize
'                                        '确定长度
'     Next
'     objDataSource.Open
'     objRs.PageSize = Val(txtPageSize)
'     objRs.AbsolutePage = intPage
'     For intRecord = 1 To objRs.PageSize
'        objDataSource.AddNew
'        objDataSource!用户名 = objRs!用户名
'        objDataSource!口令 = objRs!口令
'        objDataSource!身份 = objRs!身份
'        objRs.MoveNext
'        If objRs.EOF Then Exit For
'    Next
'
'    Set DataGrid1.DataSource = objDataSource '设置为数据网格数据源
    txtMsg = intPage & "/" & objRs.PageCount


End Sub
Private Sub cmdNext_Click()
    If intPage <> objRs.PageCount Then
        intPage = intPage + 1
        ShowData (intPage)
    End If
    
End Sub

Private Sub command1_Click()
    objDataSource.MovePrevious
    If objDataSource.BOF Then
        objDataSource.MoveFirst
    End If
    
End Sub

Private Sub Command2_Click()
    objDataSource.MoveNext
    If objDataSource.EOF Then
        objDataSource.MoveLast
    End If
    
End Sub

Private Sub comPre_Click()
If intPage <> 1 Then
    intPage = intPage - 1
    ShowData (intPage)
End If

End Sub

Private Sub DataGrid1_Click()

End Sub

Private Sub Form_Load()
    Dim strSQL As String, strCn As String, iRS As Integer, jRS As Integer
    txtPageSize = "5"
    intPage = 1
    '建立数据连接
    strCn = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=false;" & _
    "Data Source=" & App.Path & "\登录.mdb"
    objCn.ConnectionString = strCn
    objCn.Open
    With objRs
        .CursorLocation = adUseClient
        .CursorType = adOpenStatic
        .Open "系统用户", objCn, adOpenStatic, adLockReadOnly
    End With
    '定义MSFLEXGRID控件
    MSFlexGrid1.Cols = objRs.Fields.Count
    MSFlexGrid1.Rows = objRs.RecordCount + 1
    
    
   ShowData (intPage)

    
        
End Sub


Private Sub Form_Unload(Cancel As Integer)
    objCn.Close
    Set objCn = Nothing
    Set objRs = Nothing
    
End Sub


Private Sub txtPageSize_KeyPress(KeyAscii As Integer)
    Dim bOK As Boolean
    If KeyAscii = vbKeyReturn And Trim(txtPageSize) <> "" Then
        '如果按回车键,且记录也大小不为空,刷新当前记录页
        intPage = 1
        ShowData (intPage)
    ElseIf KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Then
        '检查当前设置的记录页是否在有效范围之内
        bOK = Val(txtPageSize & Chr(kayascii) < 1 Or Val(txtPageSize) & Chr(KeyAscii)) > 10
    If bOK Then
        MsgBox "每页显示记录范围为1-10"
        KeyAscii = 0
    End If
End If

        
End Sub


[img=C:\Documents and Settings\Administrator\桌面][/img]





--------------------编程问答-------------------- 小弟新手,回帖求分有问题要请教,谢谢! --------------------编程问答--------------------     rs.AddNew
    rs.Fields(1) = "003"
    rs.Fields(2) = "003"
    rs.Fields(3) = "003"
    rs.Update
补充:VB ,  数据库(包含打印,安装,报表)
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,