注册 登录
编程论坛 VFP论坛

关于字符处理的问题

fanjinyu9108 发布于 2022-01-11 15:00, 3244 次点击
有一段代码,如下:
程序代码:
PUBLIC str_youguan,t_youguan,str_pinzhong,t_pinzhong
str_youguan="select * from youguan"
t_youguan="youguan"
str_pinzhng="select * from pinzhong"
t_pinzhong="pinzhong"

PUBLIC 字符串1,表1,字符串2,表2,字符串3,表3,字符串4,表4,字符串5,表5
字符串1=str_youguan
表1=t_youguan

字符串2=str_pinzhong
表2=t_pinzhong
表_数量=2


 连接临时_yk()   &&调用远程连接

 FOR i=1 TO  表_数量
    mystr="字符串"+ALLTRIM(STR(i))
    myt="表"+ALLTRIM(STR(i))
    ac=SQLEXEC(nhandle,mystr,myt)  &&这一步有问题
    IF  Ac<0
       =SQLDISCONNECT(nhandle)
       MESSAGEBOX("读取错误!",0,"错误信息")
       EXIT
       RETURN TO MASTER
    endif  

 ENDFOR

 IF ac<0
    RETURN TO MASTER

 else   
    =SQLDISCONNECT(nhandle)
    MESSAGEBOX("查询成功!")

 endif   

我的问题是如何使变量mystr 表示 "select * from youguan",而不是表示为 字符串1 。myt也是同样的问题


21 回复
#2
ztx192022-01-11 15:13
将:ac=SQLEXEC(nhandle,mystr,myt)
改成:ac=SQLEXEC(nhandle,&mystr.,myt) 试试
#3
fanjinyu91082022-01-12 12:10
用&mystr是可以,但是远程查询还是不能通过,我把出问题的情况简化一下:

str_youguan='"'+'select * from ruku'+'"'+","+'"'+'ruku'+'"'
ac=SQLEXEC(nhandle,str_youguan)  &&这样不能通过,是哪里出了问题?

ac=SQLEXEC(nhandle,"select * from dbo.yonghu ","yonghu")  &&这样可以通过,为什么



[此贴子已经被作者于2022-1-12 12:14编辑过]

#4
mywisdom882022-01-12 12:27
你这样做的目的是什么?
用 TXET TO 来处理,最好
#5
ztx192022-01-12 12:48
回复 3楼 fanjinyu9108
试试这样行不行:
str_youguan=["select * from dbo.yonghu ","yonghu"]
ac=SQLEXEC(nhandle,&str_youguan.)
#6
fanjinyu91082022-01-12 15:46
mywisdom88版主,我这样做的目的是由于有许多远程查询表,我目前的做法是每个远程表做一个程序保存起来,如果有30个表就要写30个程序,我的想法是把每个查询语句作为变量保存
起来,然后写一个统一的小程序,需要用某个远程表的的时候调用变量,执行统一的程序,就是这个目的。ztx19师傅,还是不行。mywisdom88师傅,用TEXT TO 怎么用,能告知吗?


[此贴子已经被作者于2022-1-12 15:47编辑过]

#7
吹水佬2022-01-12 16:52
用 EXECSCRIPT(),整个模块都可以载入运行
#8
fanjinyu91082022-01-12 16:57
请教吹水佬版主具体怎么用,能根据我的情况写一个具体的代码吗?
这样用吗? ac= EXECSCRIPT(SQLEXEC(nhandle,str_youguan)),好像不行

[此贴子已经被作者于2022-1-12 17:13编辑过]

#9
laowan0012022-01-12 17:35
F1帮助里有关于text to 使用方法的说明
30个表的结构是一样的还是不一样的?
#10
吹水佬2022-01-12 18:08
回复 8楼 fanjinyu9108
EXECSCRIPT("MESSAGEBOX(1234567)")
#11
fanjinyu91082022-01-12 21:27
非常感谢吹水佬版主的解答,我已经解决了大部分问题,但还是存在一些疑问,发一个纯粹的字符处理
程序代码:

str_youguan=["select * from dbo.yonghu","yonghu"]

 字符串1=str_youguan

 FOR i=1 TO  1
       mystr="字符串"+ALLTRIM(STR(i))
        =MESSAGEBOX(&字符串1)
        =MESSAGEBOX(&mystr)
      

 endfor

两个消息框显示的内容居然不一样,这是怎么回事?
#12
fanjinyu91082022-01-12 21:30
而且用 &字符串1 可以正确执行远程查询,但是 &mystr 不行
#13
laowan0012022-01-13 08:04
能一样就怪了
& 是把字符串两边的引号去掉以后的结果

&字符串1=str_youguan
&mystr=字符串1
#14
mywisdom882022-01-14 23:21
以下是引用fanjinyu9108在2022-1-11 15:00:13的发言:

有一段代码,如下:
PUBLIC str_youguan,t_youguan,str_pinzhong,t_pinzhong
str_youguan="select * from youguan"
t_youguan="youguan"
str_pinzhng="select * from pinzhong"
t_pinzhong="pinzhong"

PUBLIC 字符串1,表1,字符串2,表2,字符串3,表3,字符串4,表4,字符串5,表5
字符串1=str_youguan
表1=t_youguan

字符串2=str_pinzhong
表2=t_pinzhong
表_数量=2

 连接临时_yk()   &&调用远程连接
 FOR i=1 TO  表_数量
    mystr="字符串"+ALLTRIM(STR(i))
    myt="表"+ALLTRIM(STR(i))
    ac=SQLEXEC(nhandle,mystr,myt)  &&这一步有问题
    IF  Ac<0
       =SQLDISCONNECT(nhandle)
       MESSAGEBOX("读取错误!",0,"错误信息")
       EXIT
       RETURN TO MASTER
    endif  
 ENDFOR
 IF ac<0
    RETURN TO MASTER
 else   
    =SQLDISCONNECT(nhandle)
    MESSAGEBOX("查询成功!")
 endif   

我的问题是如何使变量mystr 表示 "select * from youguan",而不是表示为 字符串1 。myt也是同样的问题

你分别看看mystr,myt是什么内容,和你真实的查询语句,是不是相同
messagebox(mystr)
messagebox(myt)
只这样,才能检查出你哪里出问题
#15
mywisdom882022-01-14 23:32
另外EXECSCRIPT()是在VFP中,执行多条命令,正常情况下,VFP只能支行1条命令的,如:
s1 = "create cursor t1(id i,name c(10))"
&s1 && 生成1个临时表 t1
但你想建立表后,在插入1行数据,那就是2条命令了,单纯的 宏,是不行了,这时,可以用这函数 EXECSCRIPT(),配合 text to
* 建立1个表,插入2个数据,然后,看数据,
TEXT TO s1 TEXTMERGE NOSHOW PRETEXT 4
create cursor t1(id i,name c(10))
INSERT INTO t1(id,name) VALUES (1,"张三")
INSERT INTO t1(id,name) VALUES (2,"李四")
BROWSE
ENDTEXT
EXECSCRIPT(s1)

#16
fanjinyu91082022-01-15 10:19
非常感谢mywisdom88版主的耐心解答,让我学会了TEXT TO 的使用,目前我已经找到了通用远程查询的解决办法,代码如下:
程序代码:
PUBLIC 字符串1,字符串2,字符串3,字符串4,字符串5,字符串6,字符串7,字符串8,字符串_数量


 字符串1=str_yonghu   && str_yonghu是事先设定的

 字符串2=str_baoguan_b  && str_baoguan_b是事先设定的

 字符串_数量=2


 

 连接临时_yk()   &&调用远程连接

 FOR i=1 TO  字符串_数量
      DO case
          CASE i=1
             Ac=SQLEXEC(nhandle,&字符串1)
          CASE i=2
             Ac=SQLEXEC(nhandle,&字符串2)
          CASE i=3
             Ac=SQLEXEC(nhandle,&字符串3)
          CASE i=4
             Ac=SQLEXEC(nhandle,&字符串4)   
          CASE i=5
             Ac=SQLEXEC(nhandle,&字符串5)
          CASE i=6
             Ac=SQLEXEC(nhandle,&字符串6)
          CASE i=7
             Ac=SQLEXEC(nhandle,&字符串7)
          CASE i=8
             Ac=SQLEXEC(nhandle,&字符串8)
      endcase

      IF  Ac<0
           =SQLDISCONNECT(nhandle)
           MESSAGEBOX("读取错误!",0,"错误信息")
           EXIT
           RETURN TO MASTER
     endif  
endfor

 IF ac<0
    RETURN TO MASTER

 else   
    =SQLDISCONNECT(nhandle)
    MESSAGEBOX("查询成功!")

 endif   

可能会有更加简洁的,但我觉得可以了

[此贴子已经被作者于2022-1-15 10:20编辑过]

#17
fanjinyu91082022-01-15 10:36
但是有一点和奇怪,比如下面的代码:
str_yonghu=["select * from dbo.yonghu","yonghu"]
 字符串1=str_yonghu
 FOR i=1 TO  1
       mystr="字符串"+ALLTRIM(STR(i))
        =MESSAGEBOX(&字符串1)
        =MESSAGEBOX(&mystr)
 endfor
  =MESSAGEBOX(&字符串1) 按道理应该显示 "select * from dbo.yonghu","yonghu" 但是奇怪的是显示 select * from dbo.yonghu 而且使用Ac=SQLEXEC(nhandle,&字符串1)
的指令可以通过,但是 =MESSAGEBOX(&mystr)显示的是"select * from dbo.yonghu","yonghu",使用Ac=SQLEXEC(nhandle,&mystr)却不能通过,有点奇怪了?


#18
吹水佬2022-01-15 11:03
MESSAGEBOX(&字符串1) 替换进去看看就清楚了:
实际执行是:
MESSAGEBOX("select * from dbo.yonghu","yonghu")
"select * from dbo.yonghu"是信息内容, "yonghu"是标题
#19
吹水佬2022-01-15 11:05
宏替换不能乱用,能不用就不用,不易读
#20
吹水佬2022-01-15 11:08
宏替换不能乱用,能不用就不用,不易读
#21
吹水佬2022-01-15 11:08
MESSAGEBOX(&字符串1) 替换进去看看就清楚了:
实际执行是:
MESSAGEBOX("select * from dbo.yonghu","yonghu")
"select * from dbo.yonghu"是信息内容, "yonghu"是标题
#22
fanjinyu91082022-01-15 12:38
原来是这样啊,感谢吹水佬版主指点,终于彻底明白了
1