注册 登录
编程论坛 VFP论坛

请教sql SQL Server 连接断了,程序不能关闭这种错误如何处理?谢谢

wxzd123 发布于 2023-08-12 17:26, 1044 次点击
用con = Sqlstringconnect([Driver={SQL Server};Server=192.168.1.10;UID=sa;PWD=a;Database=hztx])
当出现数据没有保存情况下,与服务器连接不上,程序不能退出,请教这种情况写什么代码,写在哪里才能退出?谢谢
只有本站会员才能查看附件,请 登录

23 回复
#2
wxzd1232023-08-15 07:23
在表单eroor中写代码
this.Release
CLEAR EVENTS
quit
都不执行,请各位老师出招,谢谢
#3
wxzd1232023-08-16 08:51
顶一下
#4
吹水佬2023-08-16 09:27
先看看有无触发表单的eroor
#5
wxzd1232023-08-16 21:33
终于等到版主出手
第一出现
只有本站会员才能查看附件,请 登录

第二个出现
只有本站会员才能查看附件,请 登录

第三个出现是表单error中nError=13,nError=1466 nError=1526
第四个是
只有本站会员才能查看附件,请 登录

#6
wxzd1232023-08-16 21:35
不知到从那下手,恳请版主帮助解决,谢谢
#7
吹水佬2023-08-16 21:48
VFP的异常提示,VFP的异常处理过程拦截不了吗?
ON ERROR 可以拦截异常弹窗吗?
#8
wxzd1232023-08-17 17:41
回复 7楼 吹水佬
请教版主在主程序前面
On Error Do MYERROR With Error(), Lineno(1), Message(), Message(1), Program(), Program(1)
在主程序最后
Procedure MYERROR
Parameters nError, nLineno, cMessage, cMessage1, cProgram, cProgram1
    Messagebox(nError)
ENDPROC
这样对吗?没有反应,没有出现对话框?
#9
吹水佬2023-08-17 19:05
回复 8楼 wxzd123
如果还是出现异常弹窗,VFP就没拦截到。
#10
wxzd1232023-08-17 19:26
On Error Do err.prg With Error(), Message(), Message(1), Program(),lineno(1)

err.prg
parameters nError, cMessage, cMessage1, cProgram, nlineno
nvALUE = Messagebox("程序发生错误,详细信息如下:" + Chr(13) + Chr(13) + ;
    "错误代号: " + LTAIM(STR(nError)) + Chr(13) + ;
    "错误行号: " + LTRIM(STR(nLineno)) + Chr(13) + ;
    "错误信息: " + cMessage + Chr(13) + ;
    "错误代码: " + cMessage1 + Chr(13) + ;
    "错误位置: " + cProgram,2+48, "信息")
do case
case vALUE=3
quit
case vALUE=4
retry
case vALUE=5
retun
endcase
也没出现
#11
wxzd1232023-08-17 19:32
是这样
ca=Createobject("CursorAdapter")
With ca
    .Alias = 'cs'
    .Datasource=con  
    .DataSourceType = 'odbc'
    .SelectCmd = "select * from cs "  
    .KeyFieldList = 'id'  
    .Tables = "cs"
    .UpdatableFieldList = "id,姓名,性别"
    .UpdateNameList ="id cs.id,姓名 cs.姓名,性别 cs.性别"
 .CursorFill()
ENDWITH
Select cs
CursorSetProp("buffering",3)
修改数据,没有保存,测试,关掉数据sql server,然后关闭程序
#12
吹水佬2023-08-18 10:09
#13
iswith2023-08-18 11:36
使用try Aerror来捕捉
#14
wxzd1232023-08-19 06:48
请教版主代码放在主程序中吗?
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
#15
吹水佬2023-08-19 07:56
回复 14楼 wxzd123
想在哪开始拦截就放在哪,可以随时开启和关闭。
#16
wxzd1232023-08-19 10:24
我放在主程序了,没拦住,之前还有一个界面,附件上传了
#17
wxzd1232023-08-19 12:46
cDefPath = ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cDefPath)
#define MY_ERROR  0x401    && 自定义消息
DECLARE long AddException IN errdbg long,string@,long,long
DECLARE long RemoveException IN errdbg
DECLARE long GetException IN errdbg long
DECLARE long strlen IN msvcrt long

Do Form 表单1.scx
Read Events
** AddException(nType, cOutFile, hWnd, uMsg) 注册异常处理
** 参数:
**   nType ..... 0->全部忽略跳过,1->提示选择中止、重试、忽略
**   cOutFile .. 输出异常信息的文件名,为空不输出
**   hWnd ...... 接收异常信息的窗口句柄,为 0 不接收
**   uMsg ...... 发送异常信息的用户自定义消息,为 0 不发送
AddException(1, cDefPath+"errinfo.txt", _screen.hWnd, MY_ERROR)
oErr = CREATEOBJECT("CError")
BINDEVENT(_screen.hWnd, MY_ERROR, oErr, "onError")
SYS(1079,1)
? 1111
fun1()
RemoveException()  && 注销异常处理
CLEAR ALL
RETURN

FUNCTION fun1()
    SYS(1079,1)
    ? 2222
    fun2()
ENDFUNC

FUNCTION fun2()
    SYS(2600,0,1," ")
    ? 3333  
ENDFUNC

DEFINE CLASS CError as Session
    PROCEDURE onError(hWnd,Msg,wParam,lParam)  && wParam指向EXCEPTION_RECORD结构的指针
        nCode = CTOBIN(SYS(2600,wParam,4),"4RS")
        pMsg = GetException(nCode)
        ? TRANSFORM(nCode,"@0"), SYS(2600,pMsg,strlen(pMsg))
        FOR i=1 TO PROGRAM(-1)-1
            ? SPACE(i),PROGRAM(i)
        ENDFOR
        **QUIT
    ENDPROC
ENDDEFINE
#18
wxzd1232023-08-19 12:47
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
#19
吹水佬2023-08-19 14:28
回复 17楼 wxzd123
有点乱套
先这样试:“表单1”为顶层表单
程序代码:

cDefPath = ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cDefPath)

ON ERROR myError()

Do Form 表单1.scx
Read Events
RETURN

FUNCTION myError()
    MESSAGEBOX("error!!!")
ENDFUNC

如果异常弹窗显示“error!!!”就OK
否则,再试试:
程序代码:

cDefPath = ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cDefPath)
DECLARE long AddException IN errdbg long,string@,long,long
DECLARE long RemoveException IN errdbg
AddException(0, "", 0, 0)
Do Form 表单1.scx
Read Events
RemoveException()  && 注销异常处理
CLEAR ALL
RETURN



[此贴子已经被作者于2023-8-19 14:30编辑过]

#20
wxzd1232023-08-19 14:54
版主辛苦了
第一段代码出现
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

关不掉,只能到任务管理器终止进程
#21
wxzd1232023-08-19 14:55
第二段代码出现
只有本站会员才能查看附件,请 登录

然后退出
#22
吹水佬2023-08-19 15:08
可能是SQL服务的提示信息弹窗,不是异常处理过程的弹窗。
#23
wxzd1232023-08-19 21:10
请教版主怎么出现不能加载
只有本站会员才能查看附件,请 登录
#24
吹水佬2023-08-19 22:05
回复 23楼 wxzd123
errdbg.dll在默认当前路径
1