| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6259 人关注过本帖
标题:VFP+SQL 连接串写在哪里为标准?
只看楼主 加入收藏
guitarist
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2012-2-29
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:31 
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
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册:2015-3-25
收藏
得分:2 
我是在MIAN.PRG中
PUBLIC nhandle
在表单需要读取数据的时候才连接,读取数据完成后,关闭连接
*csql=[driver=sql server;server=]+cServer+[;uid=]+cUid+[;pwd=]+cPwd+[;database=]+cdbs
*nhandle=sqlstringconnect(csql)
nhandle=sqlstringconnect("driver=sql server;server=atm8505;uid=sa;pwd=123456;database=master")
IF nhandle>0
   ?"连接成功"
   sqlexec(nhandle,'select * from sql_table','sql_table') &&读取数据到sql_table,这个sql_table是不可以修改的
   if used("sql_table")
      select * from sql_table into curs sql_tmp readwrite &&转为可以读写的临时表
      use in sql_table &&关闭sql_table表
   endif
   SQLDISCONNECT(nhandle) &&关闭连接
ELSE
   ?"连接失败"
ENDIF
收到的鲜花
  • 静夜思2016-01-18 17:51 送鲜花  50朵   附言:在这个论坛,认真的交流理应被尊重。
2016-01-13 17:24
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:2 
以下是引用mywisdom88在2016-1-13 17:24:35的发言:

我是在MIAN.PRG中
PUBLIC nhandle
在表单需要读取数据的时候才连接,读取数据完成后,关闭连接
*csql=[driver=sql server;server=]+cServer+[;uid=]+cUid+[;pwd=]+cPwd+[;database=]+cdbs
*nhandle=sqlstringconnect(csql)  
nhandle=sqlstringconnect("driver=sql server;server=atm8505;uid=sa;pwd=123456;database=master")
IF nhandle>0
   ?"连接成功"
   sqlexec(nhandle,'select * from sql_table','sql_table') &&读取数据到sql_table,这个sql_table是不可以修改的
   if used("sql_table")
      select * from sql_table into curs sql_tmp readwrite &&转为可以读写的临时表
      use in sql_table &&关闭sql_table表
   endif
   SQLDISCONNECT(nhandle) &&关闭连接
ELSE
   ?"连接失败"
ENDIF
这个应该当选
2016-01-13 18:13
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9828
专家分:27146
注 册:2012-2-5
收藏
得分:0 
我怎么感觉楼上的口气与十豆三如出一辙啊

坚守VFP最后的阵地
2016-01-13 19:45
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
十豆三是csdn的大侠
2016-01-13 20:08
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11807
专家分:43421
注 册:2006-5-13
收藏
得分:2 
连接不可能一次性完成,就算不主动断开链接,也可能会因为其他原因而意外中断,此时就需要重新建立链接。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2016-01-13 20:18
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:5 
  这样的连接方式是现用现连接方式,用前需要建立连接,用后立刻关掉。否则会像楼上所说的有意外中断现象。
这不同于 DBC 数据库方式连接。后者可以只建立一次连接,只要不主动删除这个数据库,整套程序中任何地方,都可以直接使用这个DBC数据库,来方便的操作 sql server 数据库。
  楼主的问题好像与连接无直接关系,应该查查各表单的grid 数据源是否相互影响。
2016-01-13 22:41
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
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册:2015-3-25
收藏
得分:2 
第二个“查询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
2016-01-14 17:32
快速回复:VFP+SQL 连接串写在哪里为标准?
数据加载中...
 
   



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

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