| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6441 人关注过本帖
标题:VFP+SQL 连接串写在哪里为标准?
只看楼主 加入收藏
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
**是不是次次都这样?增加判断语句看看,看颜色的字;另外18楼说的,也是可行的。
nhandle=SQLSTRINGCONNECT('DRIVER=SQL SERVER;SERVER=*.*.*.*;UID=sa;PWD=sa;database=tz')      &&nhandle 在MAIN.PRG已经设为全局变量
if nhandle>0 &&增加这个
SQLEXEC(nhandle,'select * from chufa','cf')
IF USED("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.
ENDIF
SQLDISCONNECT(handle)
ENDIF


[此贴子已经被作者于2016-1-18 17:29编辑过]

2016-01-18 17:27
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:0 
普及一点小常识:
在执行类似 SQLEXEC()这样的语句时,即使 SQL语句有语法或字段不存在之类的错误,VFP 也不会触发自身的错误处理机制(如:Try...Catch 或 ON Error),必须通过其返回值来判断语句是否执行成功。当返回值>0时,表示SQL语句执行成功;当返回值<0时,表示SQL执行失败;当返回值=0时,一般与设置了连接的 BatchMode属性为.t.有关,说明系统还没有准备好结果集合,需继续等待完成。

泉城飞狐
2016-01-19 08:58
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
proj1.rar (6.73 KB)
2016-01-19 10:33
guitarist
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2012-2-29
收藏
得分:0 
问题已得到解决,分析原因应该是各表单的临时表之间互相有影响,在打开新临时表时,旧临时表没有被关闭造成新表单的数据源发生混乱。至于为什么还是不太清楚。总之在各表单的LOAD事件中都加入CLOSE ALL语句,一切运行正常。非常感谢大家的热心帮助,在这个贴子里不仅解决了我的问题,并且还学习到新知识。万分感激!!!!
2016-01-19 10:39
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
SQLIDLEDISCONNECT() 是VFP9.0新增的重要功能
2016-01-19 10:52
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
以下是引用guitarist在2016-1-19 10:39:21的发言:

问题已得到解决,分析原因应该是各表单的临时表之间互相有影响,在打开新临时表时,旧临时表没有被关闭造成新表单的数据源发生混乱。至于为什么还是不太清楚。总之在各表单的LOAD事件中都加入CLOSE ALL语句,一切运行正常。非常感谢大家的热心帮助,在这个贴子里不仅解决了我的问题,并且还学习到新知识。万分感激!!!!
程序中,不建议用 CLOSE ALL (除非是主程序的入口和出口)
2016-01-19 10:59
guitarist
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2012-2-29
收藏
得分:0 
回复 25楼 kiff
哦,我用的是VFP8 我会用9试试看。谢谢
2016-01-19 13:36
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:0 
我一开始曾怀疑是各表单的游标之间相互覆盖造成的,但是从楼主贴上来的代码来看,各个游标的别名是不一样的。在缺省数据工作期下,不同表单里的游标由于别名不同也不应该相互覆盖呀!没有源代码靠猜谜语,也真难为我们大家了。在实际应用中,我都是使用表单的私有数据工作期,这样,不同表单里的游标是绝不可能相互影响的,我也从来没有出现过类似问题。

泉城飞狐
2016-01-19 15:33
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
楼主这样查询SQLEXEC(nhandle,'select * from chufa','cf') 不可取,不应把后台数据全搬到本地再查询。应是在查询那构建SQL查询语句,条件返回结果。
2016-01-19 15:48
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
借这VFP+SQL这主题贴,也想说说我的想法。以下代码均是借用楼主的代码作适当修改(VFP9)。
1、在主程序连接SQLSERVER
    PUBLIC nhandle
    SQLSETPROP(0,"DispLogin" ,3)
    nhandle=SQLSTRINGCONNECT("driver=sql server;server=71.24.26.100;UID=sa;pwd=sa;database=tz")
    IF nhandle=-1
        =messagebox('不能连接数据库',48,'提示')
        RETURN
    ENDIF
    =SQLIDLEDISCONNECT(nhandle) &&不要奇怪为什么在这断开连接,对了,只是被临时断开,以便以后查询时会自动唤醒,期间网络出现问题恢复正常后,也会自动唤醒。
2、表单采用私有数据表(同一表单可以同时多次打开而互不影响)。在grid的init中初始数据源
LOCAL  table_tmp,ret,grid_tmp,i
table_tmp=SYS(2015)
=SQLIDLEDISCONNECT(nhandle)
ret=SQLEXEC(nhandle,"select * from chufa where 1=2",table_tmp) &&建议列示所需的字段
=SQLIDLEDISCONNECT(nhandle)
IF ret=-1
    =MESSAGEBOX('查询失败',64,'提示')
    RETURN
ENDIF
&& 这样设置grid,目的是为了方便以后代码移植及数据列位置调整
SELECT (table_tmp)
grid_tmp=this
grid_tmp.ColumnCount=7 &&根据实际修改这列值
grid_tmp.recordsource=table_tmp
i=0

i=i+1
grid_tmp.Columns[I].ControlSource =table_tmp+'.'+FIELD(i)
grid_tmp.Columns[I].header1.caption="纳税人识别号"
grid_tmp.Columns[I].header1.forecolor=RGB(255,255,255)
grid_tmp.Columns[I].header1.fontbold=.t.
grid_tmp.Columns[I].header1.backcolor=RGB(111,119,230)
grid_tmp.Columns[I].header1.alignment=2
grid_tmp.Columns[I].width=180
grid_tmp.Columns[I].backcolor=RGB(245,250,254)

i=i+1
grid_tmp.Columns[I].ControlSource =table_tmp+'.'+FIELD(i)
grid_tmp.Columns[I].header1.caption="纳税人名称"
grid_tmp.Columns[I].header1.forecolor=RGB(255,255,255)
grid_tmp.Columns[I].header1.fontbold=.t.
grid_tmp.Columns[I].header1.backcolor=RGB(111,119,230)
grid_tmp.Columns[I].header1.alignment=2
grid_tmp.Columns[I].width=270
grid_tmp.Columns[I].backcolor=RGB(226,238,252)

i=i+1
grid_tmp.Columns[I].ControlSource =table_tmp+'.'+FIELD(i)
grid_tmp.Columns[I].header1.caption="违法事实"
grid_tmp.Columns[I].header1.forecolor=RGB(255,255,255)
grid_tmp.Columns[I].header1.fontbold=.t.
grid_tmp.Columns[I].header1.backcolor=RGB(111,119,230)
grid_tmp.Columns[I].header1.alignment=2
grid_tmp.Columns[I].width=270
grid_tmp.Columns[I].backcolor=RGB(245,250,254)

i=i+1
grid_tmp.Columns[I].ControlSource =table_tmp+'.'+FIELD(i)
grid_tmp.Columns[I].header1.caption="案件编号"
grid_tmp.Columns[I].header1.forecolor=RGB(255,255,255)
grid_tmp.Columns[I].header1.fontbold=.t.
grid_tmp.Columns[I].header1.backcolor=RGB(111,119,230)
grid_tmp.Columns[I].header1.alignment=2
grid_tmp.Columns[I].width=85
grid_tmp.Columns[I].backcolor=RGB(226,238,252)


i=i+1
grid_tmp.Columns[I].ControlSource =table_tmp+'.'+FIELD(i)
grid_tmp.Columns[I].header1.caption="处罚依据"
grid_tmp.Columns[I].header1.forecolor=RGB(255,255,255)
grid_tmp.Columns[I].header1.fontbold=.t.
grid_tmp.Columns[I].header1.backcolor=RGB(111,119,230)
grid_tmp.Columns[I].header1.alignment=2
grid_tmp.Columns[I].width=270
grid_tmp.Columns[I].backcolor=RGB(245,250,254)

i=i+1
grid_tmp.Columns[I].ControlSource =table_tmp+'.'+FIELD(i)
grid_tmp.Columns[I].header1.caption="罚款金额"
grid_tmp.Columns[I].header1.forecolor=RGB(255,255,255)
grid_tmp.Columns[I].header1.fontbold=.t.
grid_tmp.Columns[I].header1.backcolor=RGB(111,119,230)
grid_tmp.Columns[I].header1.alignment=2
grid_tmp.Columns[I].width=85
grid_tmp.Columns[I].backcolor=RGB(226,238,252)

i=i+1
grid_tmp.Columns[I].ControlSource =table_tmp+'.'+FIELD(i)
grid_tmp.Columns[I].header1.caption="执法人员"
grid_tmp.Columns[I].header1.forecolor=RGB(255,255,255)
grid_tmp.Columns[I].header1.fontbold=.t.
grid_tmp.Columns[I].header1.backcolor=RGB(111,119,230)
grid_tmp.Columns[I].header1.alignment=2
grid_tmp.Columns[I].width=85
grid_tmp.Columns[I].backcolor=RGB(245,250,254)
grid_tmp.headerheight=25
grid_tmp.ReadOnly=.t.
thisform.Refresh

*注意在 在grid的Destroy 中关闭数据源
IF NOT EMPTY(this.RecordSource) AND USED(this.RecordSource)
    USE IN (this.RecordSource)
ENDIF
3、在“查询”按钮构建SQL查询语句,条件返回查询结果,填充grid数据源
cSQL=''
SELECT (thisform.grid1.RecordSource)
DO CASE
    CASE ALLTRIM()=='纳税人识别号'
        cSQL="nsrsbh"
    CASE ALLTRIM()=="纳税人名称"
        cSQL="nsrmc"
    CASE ALLTRIM()=="案件编号"
        cSQL="ajbh"
    OTHERWISE
        cSQL="zfry"
ENDCASE
cSQL="select * from chufa where "+cSQL+" like '%"+ALLTRIM(thisform.text1.value)+"%'"
LOCAL  table_tmp,ret
table_tmp=SYS(2015)
=SQLIDLEDISCONNECT(nhandle)
ret=SQLEXEC(nhandle,cSQL,table_tmp)
=SQLIDLEDISCONNECT(nhandle)
IF ret=-1
    =MESSAGEBOX('查询失败',64,'提示')
    RETURN
ENDIF
IF RECCOUNT(table_tmp)=0
    MESSAGEBOX("没有找到符合条件的记录!",0,"提示信息")
ENDIF
this.lbjl.Caption=TRANSFORM(RECCOUNT(table_tmp))
ZAP IN (thisform.grid1.RecordSource)
SELECT (thisform.grid1.RecordSource)
APPEND FROM (DBF('table_tmp'))
USE IN (table_tmp)
GO TOP IN (thisform.grid1.RecordSource)
thisform.Refresh


[此贴子已经被作者于2016-1-19 17:10编辑过]

2016-01-19 16:59
快速回复:VFP+SQL 连接串写在哪里为标准?
数据加载中...
 
   



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

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