从SQL Server向VFP拷贝表
先生成与SQL Server表一致的VFP表结构,然后把数据从SQL Server表中拷贝到VFP表中。
要从SQL Server表向VFP表拷贝数据,可以利用 SQLEXEC(),SQLTABLES()以及
⑴从SQL表中取得表的结构信息;
⑵生成与SQL表结构相同的VFP表;
⑶从SQL向VFP表拷贝数据。
示例代码如下:
* 因为SQL Server 表可能包含长字段名,而VFP的自由表不支持长字段名,只有数
据库中的表才能使用长字段名。为了保存SQL Server表中的长字段名,需要先建立一个数据库
CREATE DATABASE SQLDATA
* 建立一个包含表的信息的 cursor
CREATE CURSOR SYS_Tables (Table_Name c(128), Field_Name c(120), ;
Field_Type c(1), Field_len N(3,0), Field_Dec N(3,0))
* 建立一个连接到 SQL Server 服务器的连接字符串
* 使用时请用正确的服务器名称代替下面文字中的对应项
Connect_String=′DRIVER={SQL Server};Server=MY_Server;′+ ;
′DATABASE=PUBS;UID=sa;PWD=′
* 连接 SQL Server 服务器
gnConnHandle=SQLSTRINGCONNECT(Connect_String)
IF gnConnHandle〉0
*发送 USE 命令,打开 PUBS 数据库
SQLCOMMAND="USE PUBS"
=sqlexec(gnConnHandle,SQLCOMMAND)
* 取得 SQL Server 中可以使用的表的数量
SQLConnTables=SQLTABLES(gnConnHandle)
IF SQLConnTables〉0
SELECT SQLResult
* 只操作表,所以SQL的条件子句中表类型 table_type参数设置为TABLE
* 否则取得系统表和视图
SELECT Table_Name FROM SQLResult ;
WHERE UPPER(ALLTRIM(Table_Type))="TABLE" ;
INTO CURSOR SQL_Tables
SELECT SQL_Tables
INCnt=0
DO WHILE !EOF()
* 生成一个执行存贮过程的命令字符串
SQLCOMMAND="SELECT * FROM " + ALLTRIM(Table_Name)
* 执行存储过程,取得数据放到临时 cursor
=sqlexec(gnConnHandle,SQLCOMMAND,′tmp_sys_data′)
* 选择包含数据的 cursor
SELECT tmp_sys_data
* 使用 DBF()函数取得临时文件的实际名称
this_file=DBF()
* 用 AFIELDS() 函数取得字段名和字段属性
=AFIELDS(test_vals)
* 字段数据保存到数组 maketab 中
DIMENSION maketab[alen(test_vals,1),6]
* 用字段数据填充数组元素
FOR i=1 TO ALEN(test_vals,1)
maketab[i,1]=test_vals[i,1]
maketab[i,2]=test_vals[i,2]
maketab[i,3]=test_vals[i,3]
maketab[i,4]=test_vals[i,4]
maketab[i,5]=test_vals[i,5]
maketab[i,6]=test_vals[i,6]
NEXT
* 根据数组 maketab 建立表,先建立命令字符串,然后用宏替换执行
Execute_Cmd="CREATE TABLE "+ALLTRIM(SQL_Tables.Table_Name)+ ;
" FROM ARRAY maketab"
&Execute_Cmd
* 选中新建立的表
current_table=ALLTRIM(SQL_Tables.Table_Name)
SELECT (current_table)
* 从临时文件中填加数据
APPEND FROM &this_file
SELECT SQL_Tables
SKIP
ENDDO
=SQLDISCONN(gnConnHandle)
ENDIF
ENDIF
SELECT SQL_Tables
CLOSE ALL
USE AUTHORS
BROWSE TIMEOUT 15
CLOSE ALL
RETURN
上面的代码执行后会生成一个名为Sqldata.dbc 的VFP数据库,库中包含的表是SQL