想将VFP中的一个表导入到MDB数据库中,必须要用SQLEXEC()函数来完成:
cTime001="T"+SYS(2015)
USE "D:\我的记录.DBF" ALIAS (cTime001)&&有近35000条共14字段,没有备注类型字段.
?sqlexec(nCon,"insert into 记录表 (字段....) SELECT 字段... FROM ?cTime001")
&&VFP表中的字段与MDB表中的字段是一一对应的
问题就是能否在SQLEXEC中使用VFP表的别名作为数据源?
我上面的方式有错,无法完成数据插入.请各位高手指点一下,如果用远程视图方式一条一条导入到临时表(即远程视图)中再TABLEUPDATE()更新,我测试了一下要用2分钟左右,我认为太慢了,所以看有没有办法一次性SQLEXEC()插入整个表的数据到MDB数据库中.

远程视图用TABLEUPDATE()更新用时:160秒

下面代码用时:133秒
我用SQLEXEC()直接完成导入比远程视图用TABLEUPDATE()更新要快点.代码如下:

SET TALK OFF
ON ERROR RETURN .f.
cSYS_MDBFile=GETFILE("mdb")&&已经有"记录表"的MDB文件
nSb=SQLSTRINGCONNECT("Driver={Microsoft Access-Treiber (*.mdb)};dbq=&cSYS_MDBFile.;uId=admin;pwd=123456")
cTB="记录表"
USE ? ALIAS cSB
GOTO TOP IN "CSB"
nRCT=RECCOUNT("CSB")
nNR=1
WAIT "数据更新中..." WINDOW NOWAIT AT SROW()/2,(SCOLS()-len("数据更新中..."))/2
nTim=SECONDS()
DO WHILE !EOF("CSB")
    DT1=编号
    DT2=节号
    DT3=子号
    DT4=年度
    DT5=ALLTRIM(保管)
    DT6=ALLTRIM(分类)
    DT7=ALLTRIM(字号)
    DT8=ALLTRIM(名称)
    DT9=ALLTRIM(说明)
    DT10=IIF(EMPTY(起始时间),NULL,起始时间)
    DT11=IIF(EMPTY(终止时间),NULL,终止时间)
    DT12=份数
    DT13=页数
    DT14=ALLTRIM(备注)
    IF SQLEXEC(NSB,"INSERT INTO ?cTB (编号,节号,子号,年度,保管,分类,字,名称,说明),起始时间,终止时间,份数,页数,备注)"+;
       "VALUES (?DT1,?DT2,?DT3,?DT4,?DT5,?DT6,?DT7,?DT8,?DT9,?DT10,?DT11,?DT12,?DT13,?DT14)")=1
        *WAIT "数据更新中..."+ALLTRIM(PADL(RECNO("CSB")*100/nRCT,20))+"%" WINDOW NOWAIT AT SROW()/2,(SCOLS()-len("数据更新中...")+4)/2
        SKIP 1 IN "CSB"
    ELSE
        EXIT
    ENDIF
ENDDO
nTim=SECONDS()-nTim
WAIT CLEAR
MESSAGEBOX(ALLTRIM(PADL(nTim,10))+"秒!",64,"耗时")
SET TALK On