2012-12-24 29 views
0

我需要使用VB6中的DAO將某些列添加到FoxPro 2.6 DBF文件。如何使用DAO將列添加到FoxPro文件

如果數據在.MDB文件中,我知道這會起作用。下面是我使用的.mdb的代碼片段:

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

am如果不能確定這個工程的FoxPro。 (我還沒試過)

這可能嗎?有一種可能的選擇 - 我知道會起作用,但不太方便 - 通過從正確結構的空表開始,然後使用來自此的SELECT的INSERT從現有填充文件跨記錄進行復制。

+0

這或' 「ALTER TABLE [」 &CoParms& 「] ADD COLUMN [」 &CoName&「] VARCHAR(30)」' – wqw

+0

謝謝wqw,但是這會給出錯誤3282「在包含數據的表上不支持操作」。 我使用我描述的可能替代方案解決了這個問題 - 請參閱下面的細節。 – finch

+0

錯過了編輯以前註釋的超時時間 - 請參閱下面的解決方案,因爲我看不到如何在此格式化代碼。 – finch

回答

0

謝謝@wqw,因爲你的解決方案當然有效。

這是我的第一選擇,它的工作:

  1. 與所需的列創建一個空文件/表格。
  2. 將此文件複製到「test.dbf」。
  3. 從填充的數據文件「鏈接」插入記錄到此處。

    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的建議是要好得多,因爲沒有預定義的文件需要

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