如何使用 DAO 将列添加到 FoxPro 文件

Posted

技术标签:

【中文标题】如何使用 DAO 将列添加到 FoxPro 文件【英文标题】:How to add column to FoxPro file using DAO 【发布时间】:2012-12-11 03:10:17 【问题描述】:

我需要在 VB6 中使用 DAO 将一些列添加到 FoxPro 2.6 DBF 文件中。

如果数据在 .MDB 文件中,我知道这会起作用。这是我用于 .MDB 的代码 sn-p:

Set tdfCoParms = mDBParms.TableDefs(CoParms)
tdfCoParms.Fields.Append tdfCoParms.CreateField("CoName", dbText, 30)

我不确定这是否适用于 FoxPro。 (没试过)

这可能吗?有一个可能的替代方案 - 我知道它会起作用,但不是那么方便 - 从正确结构的空表开始,然后从现有填充文件中复制记录,使用 INSERT 的 SELECT from this。

【问题讨论】:

这个或"ALTER TABLE [" & CoParms & "] ADD COLUMN [" & CoName & "] VARCHAR(30)" 感谢 wqw,但这会产生错误 3282“包含数据的表不支持操作。”我使用我描述的可能替代方案解决了这个问题 - 请参阅下面的详细信息。 错过了编辑上一条评论的超时 - 请参阅下面的解决方案,因为我看不到如何在此处格式化代码。 @wqw 你是对的!再次查看这个问题,根据您的建议,我现在有了一个简单的解决方案。我看不到如何在此处添加代码,因此在下面将其作为答案输入。 【参考方案1】:

谢谢@wqw,因为您的解决方案确实有效。

这是我的第一个替代方案,它奏效了:

    创建一个包含所需列的空文件/表。 将此文件复制到“test.dbf”。 将已填充数据文件“链接”中的记录插入到此。

    Dim dbsWork As Database
    Dim qrd As DAO.QueryDef
    Dim szSqlString As String

    Set dbsWork = OpenDatabase(szWorkDir, False, False, "FoxPro 2.5")
    Dim szFieldList As String
    szFieldList = "field1, field2, field3"
    szSqlString = "INSERT INTO test SELECT " & szFieldList & " FROM link"
    Set qrd = dbsWork.CreateQueryDef("", szSqlString)
    qrd.Execute

    Set qrd = Nothing
    Set dbsWork = Nothing

但是基于@wqw 的建议的以下内容要好得多,因为不需要预定义文件

私有子测试1()

    Dim dbsWork As Database
    将 qrd 调暗为 DAO.QueryDef
    将 szSqlString 调暗为字符串

    设置 dbsWork = OpenDatabase(MyDataBasPath, False, False, "FoxPro 2.5")
    将 szFieldList 调暗为字符串
    szSqlString = "ALTER TABLE work.dbf ADD COLUMN fred VARCHAR(30)"
    设置 qrd = dbsWork.CreateQueryDef("", szSqlString)
    qrd.执行

    设置 qrd = 无
    设置 dbsWork = 无

结束子

【讨论】:

以上是关于如何使用 DAO 将列添加到 FoxPro 文件的主要内容,如果未能解决你的问题,请参考以下文章

在 BASH 脚本中使用“awk”将列添加到 CSV 文件的末尾

利用visual foxpro将dbf文件转为excel文件之后 中文部分都是乱码如何解决呢?

如何使用 ngrok 连接到 Visual FoxPro 数据库

将列动态添加到现有 BigQuery 表

利用visual foxpro将dbf文件转为excel文件之后 中文部分都是乱码如何解决呢?

如何将列添加到现有表?