将列附加到 ADO 记录集

ruc*_*k64 2 vb6 ado

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

我发现因为它是 ADO,所以我应该能够使用以下内容:

 with rs
     .fields.append "column name", "enum dataType"
 end with
Run Code Online (Sandbox Code Playgroud)

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

这是我的代码:

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
Run Code Online (Sandbox Code Playgroud)

我希望在我的表中添加额外的列。但是,我可以看看桌子,发现它们不在那里。我可以看到我已经关闭了记录集。它试图将列附加到它。但是,我打开记录集备份,这些列从表中消失。当我说它们出现时,我的意思是使用 Microsoft Visual Basic 的调试系统。它基本上有一个部分,它显示您的变量,对于对象,它向您显示里面的项目和更多信息。所以我知道它会尝试。但我似乎无法让它保留它。任何关于我搞砸的想法或想法都会很棒。

Éti*_*lle 5

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

Dim objCatalog As ADOX.Catalog

' Create and Open Catalog
Set objCatalog = New ADOX.Catalog
Set objCatalog.ActiveConnection = DataEnvironment7.cnPTracker
Run Code Online (Sandbox Code Playgroud)

我假设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
Run Code Online (Sandbox Code Playgroud)

然后,一旦你有了这个表,你就可以通过 Columns 集合来查看它是否存在:

Dim objColumn As ADOX.Column
For Each objColumn In objTable.Columns
Run Code Online (Sandbox Code Playgroud)

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

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

' Append the new field
objTable.Columns.Append objColumn
Run Code Online (Sandbox Code Playgroud)

  • 扩展艾蒂安的答案。“ADO Ext. 6.0 for DDL...”中的 **DDL** 代表[数据定义语言](https://en.wikipedia.org/wiki/Data_definition_language),是一种面向对象的 RDBMS - 不可知的库。 (2认同)