首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列附加到ADO记录集

将列附加到ADO记录集
EN

Stack Overflow用户
提问于 2019-11-04 23:50:08
回答 3查看 1.7K关注 0票数 2

我试图在VB6中向ADO记录集添加列。我只想在表的末尾添加4列。这是一个我们经常使用的表,但是我们经常删除它中的所有数据,然后用我们想要的下一个信息来填充它,基本上只是把它作为暂时保存数据的一种手段。

我发现既然是ADO,我应该能够使用以下方法:

代码语言:javascript
复制
 with rs
     .fields.append "column name", "enum dataType"
 end with

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

这是我的密码:

代码语言:javascript
复制
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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-05 12:37:25

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

代码语言:javascript
复制
SELECT *, NULL AS eddB, NULL AS eddC, NULL AS eddM, NULL AS eddY FROM MeterReads
票数 2
EN

Stack Overflow用户

发布于 2019-11-05 00:38:43

如果要修改数据库中表的结构,可以使用Microsoft。6.0DDL和Security库(从Project >Reference将其添加到您的项目中)。您可以通过迭代Catalog对象的Tables集合来找到要修改的表。首先创建一个Catalog对象:

代码语言:javascript
复制
Dim objCatalog As ADOX.Catalog

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

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

然后遍历表:

代码语言:javascript
复制
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

然后,一旦您拥有了该表,您就可以查看这些列集合,看看它是否存在:

代码语言:javascript
复制
Dim objColumn As ADOX.Column
For Each objColumn In objTable.Columns

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

代码语言:javascript
复制
Set objColumn = New ADOX.Column
With objColumn
    .Name = "FieldName"
    .DefinedSize = 200
    .Type = adVarChar
End With

' Append the new field
objTable.Columns.Append objColumn
票数 5
EN

Stack Overflow用户

发布于 2020-10-08 03:15:00

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58702641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档