在数据库操作中,有时需要把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 |