将列追加到ADO Recordset

我正在尝试将列添加到VB6中的ADO记录集。我只想在表末尾添加4列。这是我们经常使用的表格,但是我们经常删除其中的所有数据,并用所需的下一个信息重新填充它,基本上只是将其用作临时保存数据的一种方式。

我发现,既然是ADO,我应该可以使用以下内容:

 with rs
     .fields.append "column name","enum dataType"
 end with

从阅读和实验来看,似乎必须关闭记录集才能添加列。

这是我的代码:

rs.Open "MeterReads",DataEnvironment7.cnPTracker,adOpenStatic,adLockOptimistic,adCmdTable
' 2019-11-4 Adding in a section to accomadate for days to depeletion
If gbEnableD2D Then
    bExists = False
    With rs
        For Each fField In rs.Fields
            If UCase(fField.Name) = UCase("eddB") Then
                bExists = True
                Exit For
            End If
        Next
        If bExists = False Then
            .Close
            .Fields.Append "eddB",adDate
            .Fields.Append "eddC",adDate
            .Fields.Append "eddM",adDate
            .Fields.Append "eddY",adDate
            .Open
        End If
    End With
End If

我希望在表中添加其他列。但是,我可以看一下桌子,看看它们不在那儿。关闭记录集后,我可以看到。它试图将列附加到它。但是,我打开记录集备份,并且那些列从表中消失了。当我说它们出现时,是指使用microsoft Visual Basic的调试系统。它基本上有一个部分,其中显示了变量,而对于对象,则显示了其中的项目以及更多信息。所以我知道它会尝试。但是我似乎无法保留它。我搞砸的任何想法或想法都很棒。

ad3344 回答:将列追加到ADO Recordset

如果要修改数据库中表的结构,可以使用 Microsoft ADO Ext。 6.0 for DDL and Security 库(通过“项目”菜单>“引用”将其添加到您的项目中)。您可以通过遍历Catalog对象的Tables集合来找到要修改的表。首先创建一个Catalog对象:

Dim objCatalog As ADOX.Catalog

' Create and Open Catalog
Set objCatalog = New ADOX.Catalog
Set objCatalog.ActiveConnection = DataEnvironment7.cnPTracker

我假设DataEnvironment7.cnPTracker是您当前的ADO Connection对象。

然后遍历表:

Dim objTable As ADOX.Table
Dim sTableName As String

sTableName = "Customers"

' Check if Table exists
For Each objTable In objCatalog.Tables

    If objTable.Name = sTableName Then
        ' Table found,return reference
        Exit For
    End If

Next

然后,一旦有了该表,就可以遍历Columns集合以查看它是否存在:

Dim objColumn As ADOX.Column
For Each objColumn In objTable.Columns

最后,如果找不到该列,则可以添加它:

Set objColumn = New ADOX.Column
With objColumn
    .Name = "FieldName"
    .DefinedSize = 200
    .Type = adVarChar
End With

' Append the new field
objTable.Columns.Append objColumn
,

一种方法是在打开记录集时通过修改检索数据的方式来添加列。代替将rs.Open与adCmdTable一起使用,而将adCmdText与SELECT语句一起使用。

SELECT *,NULL AS eddB,NULL AS eddC,NULL AS eddM,NULL AS eddY FROM MeterReads
,
with rs
     .fields.append "column name","enum dataType"
 end withrs.Open "MeterReads",DataEnvironment7.cnPTracker,adOpenStatic,adLockOptimistic,adCmdTable
' 2019-11-4 Adding in a section to accomadate for days to depeletion
If gbEnableD2D Then
    bExists = False
    With rs
        For Each fField In rs.Fields
            If UCase(fField.Name) = UCase("eddB") Then
                bExists = True
                Exit For
            End If
        Next
        If bExists = False Then
            .Close
            .Fields.Append "eddB",adDate
            .Fields.Append "eddC",adDate
            .Fields.Append "eddM",adDate
            .Fields.Append "eddY",adDate
            .Open
        End If
    End With
End If
本文链接:https://www.f2er.com/3163084.html

大家都在问