Vb6 如何使用DAO向FoxPro文件添加列
我需要在VB6中使用DAO向FoxPro 2.6 DBF文件添加一些列 如果数据在.MDB文件中,我知道这会起作用。以下是我用于.MDB的代码片段:Vb6 如何使用DAO向FoxPro文件添加列,vb6,dao,foxpro,Vb6,Dao,Foxpro,我需要在VB6中使用DAO向FoxPro 2.6 DBF文件添加一些列 如果数据在.MDB文件中,我知道这会起作用。以下是我用于.MDB的代码片段: Set tdfCoParms = mDBParms.TableDefs(CoParms) tdfCoParms.Fields.Append tdfCoParms.CreateField("CoName", dbText, 30) 我不确定这是否适用于FoxPro。(我没有试过) 这可能吗?有一种可能的替代方法——我知道这是可行的,但不太方便——从
Set tdfCoParms = mDBParms.TableDefs(CoParms)
tdfCoParms.Fields.Append tdfCoParms.CreateField("CoName", dbText, 30)
我不确定这是否适用于FoxPro。(我没有试过)
这可能吗?有一种可能的替代方法——我知道这是可行的,但不太方便——从一个结构正确的空表开始,然后从现有填充的文件中跨记录复制,使用SELECT的INSERT从中进行选择。谢谢@wqw,因为您的解决方案确实有效 这是我的第一个选择,有效:
作为数据库工作
将qrd设置为DAO.QueryDef
将szSqlString设置为字符串
设置dbsWork=OpenDatabase(szWorkDir,False,False,“foxpro2.5”)
将字段列表设置为字符串
szFieldList=“field1、field2、field3”
szSqlString=“插入测试选择”&szFieldList&“从链接”
设置qrd=dbsWork.CreateQueryDef(“,szSqlString)
执行
设置qrd=无
设置工作=无
但是下面基于@wqw的建议要好得多,因为不需要预定义的文件
Private Sub Test1()
Dim dbsWork As Database
Dim qrd As DAO.QueryDef
Dim szSqlString As String
Set dbsWork = OpenDatabase(MyDataBasPath, False, False, "FoxPro 2.5")
Dim szFieldList As String
szSqlString = "ALTER TABLE work.dbf ADD COLUMN fred VARCHAR(30)"
Set qrd = dbsWork.CreateQueryDef("", szSqlString)
qrd.Execute
Set qrd = Nothing
Set dbsWork = Nothing
End Sub
专用子测试1()
作为数据库工作
将qrd设置为DAO.QueryDef
将szSqlString设置为字符串
设置dbsWork=OpenDatabase(mydatabasepath,False,False,“foxpro2.5”)
将字段列表设置为字符串
szSqlString=“ALTER TABLE work.dbf ADD COLUMN fred VARCHAR(30)”
设置qrd=dbsWork.CreateQueryDef(“,szSqlString)
执行
设置qrd=无
设置工作=无
端接头
此或
“ALTER TABLE[”&CoParms&“]ADD COLUMN[”&CoName&“]VARCHAR(30)”
谢谢wqw,但这会导致错误3282“在包含数据的表上不支持操作”。我使用我描述的可能替代方法解决了此问题-请参阅下面的详细信息。错过了编辑上一条注释的超时时间-请参阅下面的解决方案,因为我看不到如何在这里格式化代码。@wqw你说得对!再看看这个问题,根据你的建议,我现在有了一个简单的解决方案。我不知道如何在这里添加代码,所以我在下面输入它作为答案。
Private Sub Test1()
Dim dbsWork As Database
Dim qrd As DAO.QueryDef
Dim szSqlString As String
Set dbsWork = OpenDatabase(MyDataBasPath, False, False, "FoxPro 2.5")
Dim szFieldList As String
szSqlString = "ALTER TABLE work.dbf ADD COLUMN fred VARCHAR(30)"
Set qrd = dbsWork.CreateQueryDef("", szSqlString)
qrd.Execute
Set qrd = Nothing
Set dbsWork = Nothing
End Sub