标题:sqlexec 循环多次查询sql
只看楼主
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
结帖率:100%
已结贴  问题点数:100 回复次数:5 
sqlexec 循环多次查询sql
sqlexec(vconn,mysql)  **这个语句第二次循环是没有执行到位,仍然用上一次的数。

整个思路是先连接SQL,然后通过vfp调用.sql文件来执行查询(可以很多个查询)并保存至本地。


程序代码:
  public vodbc,vuser,vpwd,vconn
    vodbc='a'       &&连接SQL SERVER数据库ODBC数据源名称
    vuser='sa'                     &&访问SQL SERVER数据库的登录用户名,sa为系统用户
    vpwd='1234'          &&用户登录密码,为sa系统用户设置的密码
    vconn=SQLCONNECT(vodbc, vuser,vpwd)
    if vconn>0
    messagebox('连接成功!',64,'ODBC数据源')
    else
    messagebox('连接失败!',64,'ODBC数据源')
    endif


CLOSE TABLES ALL 
USE file 
go top 
FOR x =1 TO reccount()
    IF ALLTRIM(扩展名)='SQL' THEN 
    PRG =LOWER(f)
    
    mysql =Filetostr('d:\' + ALLTRIM(prg) + '.sql')
    ?prg
    sqlexec(vconn,mysql)  **这个语句第二次循环是没有执行到位,仍然用上一次的数。
    COPY TO 'd:\' + ALLTRIM(prg)+''
    ENDIF
skip
ENDFOR




[此贴子已经被作者于2017-3-31 11:11编辑过]

搜索更多相关主题的帖子: 数据库 数据源 color mysql 
2017-03-31 11:10
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:100 
go top
SCAN
     IF ALLTRIM(扩展名)='SQL'
        PRG =LOWER(f)
        mysql =Filetostr('d:\' + ALLTRIM(prg) + '.sql')
        ?mysql && 看看语句变化了没
        if sqlexec(vconn,mysql) >0  &&执行成功了才复制
           brow            
           COPY TO 'd:\' + ALLTRIM(prg)+''
        endif
     ENDIF
 ENDSCAN


收到的鲜花
  • hyz000012017-03-31 15:10 送鲜花  5朵   附言:好文章
2017-03-31 11:32
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
得分:0 
感谢答复,但该语句一直未执行,要如何操作?
感谢您的答复,但我的目的是希望让这个语句能成功执行。我自己添加了一个循环,语句却一直未执行。



程序代码:
CLOSE TABLES ALL 
USE file 
go top 
SCAN
     IF ALLTRIM(扩展名)='SQL'
        PRG =LOWER(f)
        mysql =Filetostr('d:\' + ALLTRIM(prg) + '.sql')
        ?mysql && 看看语句变化了没
    FOR x =1 TO 5000    ***我在这里循环5000次都未能执行该查询。
        n = sqlexec(vconn,mysql)
        IF n>0 THEN 
           brow            
           COPY TO 'd:\' + ALLTRIM(prg)+''
            exit for         
        ENDIF
    NEXT x  
     ENDIF

 ENDSCAN




以下是循环过程中执行的第一段sql代码,也是目前唯一一段sql查询。

程序代码:
select top 500
cast(fsubsystem as varchar(8)) fsubsystem,
cast(ftableid as varchar(8)) ftableid,
cast(ftablename as varchar(8)) ftablename,
cast(fdescription as varchar(8)) name
from t_tabledescription


以下是引用mywisdom88在2017-3-31 11:32:58的发言:

go top
SCAN
     IF ALLTRIM(扩展名)='SQL'
        PRG =LOWER(f)
        mysql =Filetostr('d:\' + ALLTRIM(prg) + '.sql')
        ?mysql && 看看语句变化了没
        if sqlexec(vconn,mysql) >0  &&执行成功了才复制
           brow            
           COPY TO 'd:\' + ALLTRIM(prg)+''
        endif
     ENDIF
 ENDSCAN


[此贴子已经被作者于2017-3-31 14:20编辑过]

2017-03-31 14:14
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
得分:0 
回复 3楼 hyz00001
是我自己的sql代码错误,找到方法了,继续测试。
2017-03-31 14:31
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
以下是引用hyz00001在2017-3-31 14:31:02的发言:

是我自己的sql代码错误,找到方法了,继续测试。

所以要判断,
if sqlexec(vconn,mysql) >0  &&执行成功了才复制
2017-03-31 15:38
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
得分:0 
有创新精神,加油!
2017-03-31 23:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-475675-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.379715 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved