| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6373 人关注过本帖
标题:VFP+SQL 连接串写在哪里为标准?
取消只看楼主 加入收藏
guitarist
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2012-2-29
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:11 
VFP+SQL 连接串写在哪里为标准?
近期做一个VFP+SQL SERVER 2000 的软件. 在浏览数据时有时候提示错误,有时候没提示。我先具体情况简述如下:

一、首先VFP+SQL的连接串代码写在MAIN.PRG文件里了,程序执行时只需要连接一次。然后其他表单的INIT事件里直接引用连接串的变量就可以实现插入数据,视图浏览等操作。自我感觉这样比较方便。

二、客户端有几个表单,是用来分别浏览SQL数据的。每个表单有一个GRID表格,表单INIT事件代码是将数据表下载到本地的临时表。为了表格好看,每个列宽,标头字体,背景色都做了设定。例如:thisform.grid1.column1.header1.capion='处罚依据'
          ......
          thisform.grid1.column7.header1.capion='日期'
          thisform.grid1.column1.width=180
          ......
          thisform.grid1.column7.width=85
共有5个表单,都有这样的设置。运行时,打开一个表单表格数据显示正常。然后关闭。再打开另一个表单显示或许也是正常的(或许就会错误提示,但关掉错误提示,再次打开该表单显示又正常),再继续打开一个表单同上所述。有时会报错,有时不会。错误提示为“不能识别的成员 COLUMN7” 或是“不能识别的成员 COLUMN5”。
 
经过我的反复查看分析, 我觉得是这样的。首先我把提示的错误关掉,再执行该表单,错误就没有了,一切正常。说明表单里的代码没有问题,否则每次执行都会出错。应该表单与表单之间出现了问题。如果当前打开的表单GRID列只有6列,关闭后在打开下一个表单(GRID有7列),有时就会报错误,提示不能识别COLUMN7;如果当前打开的表单GRID列只有4列,关闭后在打开下一个表单(GRID有5列),也是有时会报错误,提示不能识别COLUMN5。然尔把错误关闭,再次打开报错的表单,显示又一切正常。虽然我发现了这个问题所在,但却不知是何原因。
我现在怀疑是不是我把VFP+SQL连接串写在了MAIN.PRG程序里造成的呢?因为每个表单打开后,直接引用连接串变量与SQL服务器进行交互,但每个表单关闭后又没有与SQL断开的语句,再次打开其他表单造成了程序不稳定?那么要把VFP+SQL连接串在每个表单INIT事件里都写入,然后表单关闭再断开。这样频繁地与服务器连/断可以吗?
标准来说,VFP+SQL连接串代码应该如何处理?请高手指教!!!如果不是这个原因请帮忙分析。
搜索更多相关主题的帖子: 背景色 数据表 客户端 软件 
2016-01-13 16:59
guitarist
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2012-2-29
收藏
得分:0 
断开!嗯,我会试试在表单里使用断开,看看还会不会发生报错。另外,七楼说的各表单的GRID数据源互相影响.......我也感觉应该是互相有影响 ,但从我的代码来看,每个表单的GRID数据源都是单独在各自表单的INIT里设定的,按理说不应该互相影响。除非是因为没有断开而造成的互相影响???!!!我还是试着断开一下看看。谢谢大家的热情帮助。有了结果我会在这里发布。
2016-01-13 23:05
guitarist
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2012-2-29
收藏
得分:0 
错误依旧啊。断开连接并没有解决!我还是把具体代码简单拿出来给大家一起分析
第一个“查询1”表单INIT事件代码:
------------------------------------------------------------------------------------------------------------------------------------------
nhandle=SQLSTRINGCONNECT('DRIVER=SQL SERVER;SERVER=*.*.*.*;UID=sa;PWD=sa;database=tz')      &&nhandle 在MAIN.PRG已经设为全局变量
SQLEXEC(nhandle,'select * from chufa','cf')
SELECT cf
COUNT TO LSJL
GO 1
this.lbjl.Caption=ALLTRIM(STR(lsjl))     &&用来统计临时表记录数,在表单上显示。
this.grid1.recordsource='cf'
this.grid1.column1.header1.caption='名称'
.......
this.grid1.column6.header1.caption='日期'  &&共计6列
.......
this.grid1.headerheight=25
this.grid1.readonly=.t.
SQLDISCONNECT(handle)
-------------------------------------------------------------------------------------------------------------------------------------------------------
第二个“查询2”表单查询INIT事件代码:

nhandle=SQLSTRINGCONNECT('DRIVER=SQL SERVER;SERVER=*.*.*.*;UID=sa;PWD=sa;database=tz')      &&nhandle 在MAIN.PRG已经设为全局变量
SQLEXEC(nhandle,'select * from zhuxiao','zx')
SELECT cf
COUNT TO LSJL
GO 1
this.lbjl.Caption=ALLTRIM(STR(lsjl))     &&用来统计临时表记录数,在表单上显示。
this.grid1.recordsource='zx'
this.grid1.column1.header1.caption='识别号'
.......
this.grid1.column7.header1.caption='人员'  &&共计 7列
.......
this.grid1.headerheight=25
this.grid1.readonly=.t.
SQLDISCONNECT(handle)
------------------------------------------------------------------------------------------------------------------------
实际我共有5个查询的表单,在此列举两个。表单代码基本一样,只是数据源表不同,列数不同。开始我没有加入SQLDISCONNECT(nhandle)这个断开连接语句,今天加入了该语句。
情况是这样的,如果我先打开列数多的表单,关闭后再打开列数少的表单不会报错。例如我先打开“查询2”表单(该表单有7列 COLUMN7),关闭后再打开“查询1”表单(该表单有6列 COLUMN 6),这样就没错。反之则提示“不能识别的成员 COLUMN 7”。但是我把错误提示关掉,再运行“查询2”表单,又可以正常显示GRID表格数据,而没有报错。也就是说任何一个表单,被作为第一个运行都没问题。百思不得解。不知道大家能明白我的意思吗?请指教!
2016-01-14 16:58
guitarist
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2012-2-29
收藏
得分:0 

 第一个“查询1”表单INIT事件代码:
------------------------------------------------------------------------------------------------------------------------------------------
nhandle=SQLSTRINGCONNECT('DRIVER=SQL SERVER;SERVER=*.*.*.*;UID=sa;PWD=sa;database=tz')      &&nhandle 在MAIN.PRG已经设为全局变量
SQLEXEC(nhandle,'select * from chufa','cf')
 SELECT cf
 COUNT TO LSJL
 GO 1
 this.lbjl.Caption=ALLTRIM(STR(lsjl))     &&用来统计临时表记录数,在表单上显示。
this.grid1.recordsource='cf'
 this.grid1.column1.header1.caption='名称'
 .......
this.grid1.column6.header1.caption='日期'  &&共计6列
.......
this.grid1.headerheight=25
 this.grid1.readonly=.t.
 SQLDISCONNECT(handle)
 -------------------------------------------------------------------------------------------------------------------------------------------------------
第二个“查询2”表单查询INIT事件代码:

nhandle=SQLSTRINGCONNECT('DRIVER=SQL SERVER;SERVER=*.*.*.*;UID=sa;PWD=sa;database=tz')      &&nhandle 在MAIN.PRG已经设为全局变量
SQLEXEC(nhandle,'select * from zhuxiao','zx')
SELECT zx
 COUNT TO LSJL

 GO 1
 this.lbjl.Caption=ALLTRIM(STR(lsjl))     &&用来统计临时表记录数,在表单上显示。
this.grid1.recordsource='zx'
 this.grid1.column1.header1.caption='识别号'
 .......
this.grid1.column7.header1.caption='人员'  &&共计 7列
.......
this.grid1.headerheight=25
 this.grid1.readonly=.t.
 SQLDISCONNECT(handle)
 ------------------------------------------------------------------------------------------------------------------------
红色字体那个地方是我上次在这里写的时候着急写错了,源代码是正确的。不是这个地方的原因
2016-01-15 08:48
guitarist
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2012-2-29
收藏
得分:0 
回复 11楼 hepingfly
哦,原来有这一说,好的,我试试。谢谢
2016-01-15 08:55
guitarist
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2012-2-29
收藏
得分:0 
回复 11楼 hepingfly
按照清空数据源的写法加入了this.grid1.recordsource=null语句,但问题依旧啊。晕
2016-01-15 15:52
guitarist
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2012-2-29
收藏
得分:0 
怎么上传文件啊,找不到啊!!!
2016-01-18 10:04
guitarist
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2012-2-29
收藏
得分:0 
楼上说的有理,我会把判断语句加入的。现在我想知道怎么上传附件啊,我怎么没找到方法啊。自己都快被自己笨得气死了
2016-01-18 16:38
guitarist
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2012-2-29
收藏
得分:0 
两个查询表单.zip (11.5 KB)
原来在这里啊,终于看到了。是我电脑颜色的原因吗?那个淡淡的图标,几乎看不到啊。
2016-01-18 16:40
guitarist
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2012-2-29
收藏
得分:0 
问题已得到解决,分析原因应该是各表单的临时表之间互相有影响,在打开新临时表时,旧临时表没有被关闭造成新表单的数据源发生混乱。至于为什么还是不太清楚。总之在各表单的LOAD事件中都加入CLOSE ALL语句,一切运行正常。非常感谢大家的热心帮助,在这个贴子里不仅解决了我的问题,并且还学习到新知识。万分感激!!!!
2016-01-19 10:39
快速回复:VFP+SQL 连接串写在哪里为标准?
数据加载中...
 
   



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

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