SQLEXEC()还能限制SELECT--SQL语句???????

LAIYANGPJ 2004-10-16 02:46:31
我的一段SPT源代码如下:
OPEN DATABASE('E:\GZ\GZGL')
cnn=sqlconnect("myconn")
if cnn<=0
=messagebox("连接错误!",16,message())
else
con=sqlexec(cnn,'SELECT * FROM CJBM','mycurr')
if con<0
messagebox('你输入的数据表名称找不到!',16,message())
=sqldisconnect(cnn)
else
sqlexec(cnn,'SELECT * FROM CJBM','MYCURSOR')
cursorsetprop('TABLES','CJBM','MYCURSOR')
cursorsetprop('KEYFIELDLIST','CJBM,CJMC','MYCURSOR')
cursorsetprop('UPDATABLEFIELDLIST','CJBM,CJMC','mycursor')
cursorsetprop('updatenamelist','cjbm cjbm.cjbm,cjmc cjbm.cjmc','mycursor')
cursorsetprop('sendupdates',.t.,'mycursor')
=sqlsetprop(cnn,'batchmode',.t.)
=sqlprepare(cnn,'select * from cjbm','mycursor')
=sqlexec(cnn)
&&***************************************************
sele * from cjbm into table mycursor.dbf
&&****************************************************
sele mycursor
&&****************************************************
brow
if con=1
sqlcommit(cnn)
else
sqlrollback(cnn)
endif
=SQLDISCONNEC(CNN)
endif
endif
以上打*****错误处!本来我的CJBM.DBF里输入了两数据.可是在这却显示空值.如果*****中的代码做如下修改,则会显示临时表记录.
&&***************************************************
sele * from cjbm into table NDcursor.dbf
&&****************************************************
sele NDcursor
&&****************************************************
为什么这临时表的名称与SQLEXEC()中的不同就能读出记录呢?想不通?那错了?高手明示!!!!!!!
...全文
251 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
LAIYANGPJ 2004-10-19
  • 打赏
  • 举报
回复
代码没有问题,是我的ODBC数据源弄错了.现出问题已解决!!!谢谢JohnShen(因果网)
JohnShen 2004-10-17
  • 打赏
  • 举报
回复
我的系统环境有点问题,不能添加vfp有关的odbc,只能猜测一下:将MICROSOFT FOXPRO VFP DRIVER(*.DBF)换成MICROSOFT VISUAL FOXPRO DRIVER后试一下
LAIYANGPJ 2004-10-17
  • 打赏
  • 举报
回复
我换了一个目录,E:\GZGL还是不行这样吧你看一下我的数据源创建过程有问题吗?
开始--->程序--->管理工具--->数据源(ODBC)--->系统DSN--->添加--->MICROSOFT FOXPRO VFP DRIVER(*.DBF)--->完成--->DATA SOURCNAME(我这为:MYODBC);DESCRIPTION(我这为空);DATABASETYPE(我这选定:VISUAL FOXPRO DATABASE);PATH(我这为E:\GZ\GZGL.DBC)--->
OK--->确定
LAIYANGPJ 2004-10-17
  • 打赏
  • 举报
回复
对了,还有:在创建ODBC数据源时,用户DSN.系统DSN.文件DSN应用那一个.我是用的系统DSN.
LAIYANGPJ 2004-10-17
  • 打赏
  • 举报
回复
我的这套软件已生成了安装程序,安装在E:\GZGL子目录下并且数据库GZGL.DBC已升迁.能不能与这个有关?
JohnShen 2004-10-17
  • 打赏
  • 举报
回复
出现这个问题估计是你在vfp中已经打开这个数据库文件了,你可以先将E:\GZ\GZGL.DBC和相关的dbf文件另外拷贝一个目录,然后通过odbc去连接。
LAIYANGPJ 2004-10-17
  • 打赏
  • 举报
回复
TO : JohnShen(因果网)
是啊!我在建立ODBC连接GZGL.DBC时,给出提示:CANNOT OPEN FILE E:\GZ\GZGL.DBC,就是你所说的数据库不能访问.这要怎么处理呢??等待回信.......
JohnShen 2004-10-17
  • 打赏
  • 举报
回复
那就有可能是你的数据库不能访问了,你可以试一下,在odbc里能否连接成功.
我先前的测试步骤如下:
先建立odbc连接Cq_school,测试连接成功,
然后执行如下语句:
CREATE CONNECTION myconn DATASOURCE 'cq_school' USERID 'sa' PASSWORD '***'
n=SQLCONNECT('myconn')
SQLEXEC(n,"select * from xx_JBQK",'cJbqk')
select cJbqk
brow
可以成功。
LAIYANGPJ 2004-10-17
  • 打赏
  • 举报
回复
大哥,我照你说的去做了我的代码如下:
nhandle=sqlstringconnect("driver=sql server;server=bi112;uid=zdq;pwd=13567860023;database=gzgl")
if nhandle>0
messagebox("数据库连接成功!",0,"提示")
else
messagebox("数据库连接成功!",0,"提示")
con=sqlexec(nhandle,'sele * from cjbm','mycursor') &&888
sele mycursor
brow
endif
可是却提示"连接句柄无效"
JohnShen 2004-10-17
  • 打赏
  • 举报
回复
你的临时表MYCURSOR估计都没有生成。

uid与pwd就是你的ZDQ和135678呀
LAIYANGPJ 2004-10-17
  • 打赏
  • 举报
回复
TO: JohnShen(因果网) (嗓子都冒烟了!给我点水!好事可要做到底啊!!!!!!)

我的机器是在域网中的,这UID与PWD我都不知道,只有管理员知道.我只想测试一一下我的软件.对了,这个SQLEXEC()生成的临时表MYCURSOR一般在那个目录里我去弄出来看一下.
还有,你以前是不是也在同一台机器上测试过.你如果不怕麻烦的话.给我说一下你的测试过程.从开始建ODBC数据源开始(不用远程视图,只要这SPT就好).我总想是认为可能我那给漏了,不过这同一组代码怎么会在昨天与今天的垫行结果不同呢?一句话:就是想不通!!!!!1
JohnShen 2004-10-17
  • 打赏
  • 举报
回复
你的问题是比较奇怪,照你现在的写法,应该是可以的,不知道哪儿出了问题。
你干脆换种写法,不使用sqlconnect建立连接,改用SqlStringConnect来建立:
请参考,使用SqlStringConnect来建立连接,或者连接句柄

如连接服务器为aa,用户名为bb,密码为cc,数据库为dd
nhandle=sqlstringconnect("driver=sql server;server=aa;uid=bb;pwd=cc;database=dd")
if nhandle>0
messagebox("数据库连接成功!",0,"提示")
else
messagebox("数据库连接成功!",0,"提示")
endif
LAIYANGPJ 2004-10-17
  • 打赏
  • 举报
回复
对不起搞错了上面的
2.CREATE CONNECTION MYCONN2 DATASOURCE 'MYODBC' USERID 'ZDQ' PASSWORD '135678'
应是:
2.CREATE CONNECTION MYCONN DATASOURCE 'MYODBC' USERID 'ZDQ' PASSWORD '135678'

LAIYANGPJ 2004-10-17
  • 打赏
  • 举报
回复
TO : JohnShen(因果网) (接着帮我啊!!!!!!)
我用了以下两种方法:
1.CREATE CONNECTION MYCONN2 DATASOURCE 'MYODBC' USERID 'ZDQ' PASSWORD '135678' DATABASE 'GZGL'
2.CREATE CONNECTION MYCONN2 DATASOURCE 'MYODBC' USERID 'ZDQ' PASSWORD '135678'
其中MYODBC是我用SQL SERVER建立的ODBC数据源
我的测试如下:
OPEN DATABASE('E:\GZ\GZGL')
cnn=sqlconnect("myconn") &&或用MYCONN2都一样
if cnn<=0
=messagebox("连接错误!",16,message())
else
con=sqlexec(cnn,'SELECT * FROM CJBM','mycurr')
if con<0
messagebox('你输入的数据表名称找不到!',16,message())
=sqldisconnect(cnn)
ELSE
SELECT mycurr
BROWSE
=sqldisconnect(cnn)
ENDIF
ENDIF
昨天我的测试还到了:SELECT MYCURR
BROWSE
这.可今天又到这了messagebox('你输入的数据表名称找不到!',16,message())
真是麻烦了.
JohnShen 2004-10-17
  • 打赏
  • 举报
回复
还没有解决?

OPEN DATABASE('E:\GZ\GZGL')
cnn=sqlconnect("myconn") && myconn这个连接在什么地方定义的?是odbc连接吗?还是在数据库中已定义?
if cnn<=0
=messagebox("连接错误!",16,message())
else
con=sqlexec(cnn,'SELECT * FROM CJBM','mycurSOR')
SELECT mycuRSOR
BROWSE
ENDIF
LAIYANGPJ 2004-10-17
  • 打赏
  • 举报
回复
问题没解决!顶.........
LAIYANGPJ 2004-10-16
  • 打赏
  • 举报
回复
我又用了以下三种做法:
1.
OPEN DATABASE('E:\GZ\GZGL')
cnn=sqlconnect("myconn")
if cnn<=0
=messagebox("连接错误!",16,message())
else
con=sqlexec(cnn,'SELECT * FROM CJBM','mycurSOR')
SELECT mycuRSOR
BROWSE
ENDIF
没用.
2.
OPEN DATABASE('E:\GZ\GZGL')
cnn=sqlconnect("myconn")
if cnn<=0
=messagebox("连接错误!",16,message())
else
SELECT * FROM CJBM INTO MYCURSOR
SELE mycurSOR
BROWSE
ENDIF
ENDIF
没用.
3.
OPEN DATABASE('E:\GZ\GZGL')
cnn=sqlconnect("myconn")
if cnn<=0
=messagebox("连接错误!",16,message())
else
SELECT * FROM CJBM
&&或SELECT * FROM CJBM NDCRUSOR这我上午在SQLEXEC()里用了好几个临时表名现在在SELECT 语句里也不能用.
ENDIF
好了
LAIYANGPJ 2004-10-16
  • 打赏
  • 举报
回复
你有没有这样的实例发个过来?如果方便的话.真是气死了.
十豆三 2004-10-16
  • 打赏
  • 举报
回复
OPEN DATABASE('E:\GZ\GZGL')
cnn=sqlconnect("myconn")
if cnn<=0
=messagebox("连接错误!",16,message())
else
con=sqlexec(cnn,'SELECT * FROM CJBM','mycurr')
if con<0
messagebox('你输入的数据表名称找不到!',16,message())
=sqldisconnect(cnn)
ELSE
*-------------------------
SELECT mycurr
BROWSE
* 看看有没有数据,如果有,就是下面有问题!!!
*////////////////

*////////////////
*内的代码是否有问题
*-------------------------
*///////////////////////////////////////////////////////
sqlexec(cnn,'SELECT * FROM CJBM','MYCURSOR')
cursorsetprop('TABLES','CJBM','MYCURSOR')
cursorsetprop('KEYFIELDLIST','CJBM,CJMC','MYCURSOR')
cursorsetprop('UPDATABLEFIELDLIST','CJBM,CJMC','mycursor')
cursorsetprop('updatenamelist','cjbm cjbm.cjbm,cjmc cjbm.cjmc','mycursor')
cursorsetprop('sendupdates',.t.,'mycursor')
=sqlsetprop(cnn,'batchmode',.t.)
=sqlprepare(cnn,'select * from cjbm','mycursor')
=sqlexec(cnn)
*//////////////////////////////////////////////////////
&&***************************************************
sele * from cjbm into table mycursor.dbf
&&****************************************************
sele mycursor
&&****************************************************
brow
if con=1
sqlcommit(cnn)
else
sqlrollback(cnn)
endif
=SQLDISCONNEC(CNN)
endif
endif
LAIYANGPJ 2004-10-16
  • 打赏
  • 举报
回复
TO :十豆三
没有.那个下面啊!我的代码就这么多全弄出来了.
加载更多回复(8)

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧