0

我正在尝试将一些 SQL 服务器表放入 FoxPro dbf。

我成功地 bcp 导出数据,这样当我使用 FoxPro 导入向导时,数据可以正确导入。但是当我尝试在命令行中执行此操作时,我最多只能导入前几列,而所有其他列都消失了。

在以下目录中,我将 .CSV 文件和成功的 DBF 导入表都放入了。

这里有 2 个文件的目录

我需要弄清楚的是如何从 FoxPro 的命令行导入这些 CSV 文件。

我尝试了各种组合;

APPEND FROM D:\work\oh\output\sqloutput.csv TYPE CSV
APPEND FROM D:\work\oh\output\sqloutput.csv DELIMITED WITH TAB

它都不起作用。

有任何想法吗?我知道我以前这样做过,我不记得诀窍是什么......

4

2 回答 2

4

哇..我认为您的做法是错误的...只需对 SQL 数据库执行一个简单的 SQLCONNECT(),对数据源、存储过程或其他任何内容运行查询,并且它位于 VFP 中的游标中。 .然后,你可以“复制”到一个DBF,你就完成了......像

lnH = SQLCONNECT()

(为您弹出 ODBC 连接对话框)。

如果不是这样,你可以做

lnH = SQLStringConnect("Provider=... for sql server, server name, etc")

然后

if lnH > 0
   sqlexec( lnH, "select * from someTableOnServer where whateverConditon", "C_LocalCursor" )

   select C_LocalCursor
   copy to PermanentTable

   sqldisconnect( lnH )
endif 

现在,如果有超过 10 个字符的列名的列,并且您没有使用数据库容器,您可能必须通过将查询更改为 GET 列名来进行调整,或者重新选择本地数据以适应到 10 个字符的非 dbc 表上下文中。

构建查询的另一个示例可能是 - 为了在键入时便于阅读,我使用 text/endtext 例如

text to lcSQLCmd noshow pretext 1+2
   select
         t1.Column1,
         t1.AVeryLongColumnName as AVLColName,
         t1.AnotherLongColumn2  as ALC2,
         t1.SomeFlag,
         t2.ColumnFromAnotherTable as CFATbl,
         t2.AnotherCol
      from
         SQLDatabase.dbo.SQLTable1 t1
            join SQLDatabase.dbo.SQLTable2 t2
               on t1.SomeKey = t2.SomeKey
      where
         t1.SomeCriteria = 'whatever'
      order by
         t1.SomeFlag
endtext

*/ Then, to "clean up" the string for VFP to pass properly, 
*/ strip out the cr/lf from the text such as
lcSQLCmd = chrtran( lcSQLCmd, chr(13)+chr(10), "" )

*/ THEN, pass this command through sqlexec()
sqlexec( lnH, lcSQLCmd, "C_LocalCursor" )

第二个显然更容易阅读您想要获得的内容,并注意我还预先将长列名缩短为 VFP 10 char 非 DBC 列名限制。然后,像第一个例子一样复制出来。

于 2012-09-19T23:53:43.913 回答
1

接收 FoxPro 表中的所有字段是否与您尝试添加到其中的 CSV 中的列具有相同的顺序和相同的数据类型?它们都足够大以处理数据吗?您是否确保 CSV 中的所有文本字段都不在其文本中包含字段分隔符?

于 2012-09-19T22:38:32.397 回答