哇..我认为您的做法是错误的...只需对 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 列名限制。然后,像第一个例子一样复制出来。