以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 连接外部数据库时闪退 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=177266) |
-- 作者:漂亮美眉vszh -- 发布时间:2022/5/15 7:30:00 -- 连接外部数据库时闪退 老师,连接内部数据库时正常 连接外部数据库时,就会偶发闪退 在打开软件连接数据库,加上弹窗时,查看代码运行到哪一句时,弹窗正常弹出,连接外部数据库正常 一但弹窗去掉,就会偶发闪退 可能是什么原因,怎么查找原因?
|
-- 作者:漂亮美眉vszh -- 发布时间:2022/5/15 7:32:00 -- 我发现不是偶发,是频发,只要毁到外部数据库,并且没加弹窗时,就会闪退 |
-- 作者:有点蓝 -- 发布时间:2022/5/15 20:15:00 -- 闪退一般都是死循环导致的。一是事件互相触发,二是表达式互相引用。 |
-- 作者:漂亮美眉vszh -- 发布时间:2022/5/16 6:45:00 -- 老师,我找到是哪一句话有问题了 Dim s As String = Date.Now & " Step 1 开始运行 " & vbcrlf FileSys.WriteAllText("d:\\Errortable.txt", s, True) If OpenFileArgs.Count = 0 Then \' MessageBox.show("正常情况没按F10,不触发") s = Date.Now & " Step 1 正常运行至连接数据库 " & vbcrlf FileSys.WriteAllText("d:\\Errortable.txt", s, True) If e.name = "database" Then Dim Val2 As String = FileSys.ReadAllText(e.ProjectPath & "zhsy.txt") Dim Val3 As String = DecryptText(Val2,"123456","123456") \'解密,两个密钥必须和加密的时候相同 Dim st_1 As String s = Date.Now & " Step 2 连接 " & Val3 & vbcrlf FileSys.WriteAllText("d:\\Errortable.txt", s, True) 我是将加密字符串放在一个记事本上,软件启动时,读取记事本上的信息来连接字符串 查错时加了一个记事本, 当走到STEP2 是空值,如果是内部数据库的密文,这个就有值;当是外部数据库时,就没有值。所以问题点出在这儿: Dim Val2 As String = FileSys.ReadAllText(e.ProjectPath & "zhsy.txt") Dim Val3 As String = DecryptText(Val2,"123456","123456") \'解密,两个密钥必须和加密的时候相同 这两句话上,弹出来的是空的,有将加密字符串在命令窗口执行,结果是正确的 在连接外部数据库时,就会偶发为空闪退 |
-- 作者:有点蓝 -- 发布时间:2022/5/16 9:04:00 -- 判断是否有内容咯 If e.name = "database" Then Dim Val2 As String = FileSys.ReadAllText(e.ProjectPath & "zhsy.txt") if Val2 > "" then Dim Val3 As String try Val3 = DecryptText(Val2,"123456","123456") \'解密,两个密钥必须和加密的时候相同 catch end try if Val3>"" then Dim st_1 As String |
-- 作者:漂亮美眉vszh -- 发布时间:2022/5/17 11:09:00 -- 老师,加个判断是否为空,依旧会闪退 问题点出在 Dim Val2 As String = FileSys.ReadAllText(e.ProjectPath & "zhsy.txt") 这句话上 是这句话没有读到记事本里的密文 放在命令窗口执行时,将e.ProjectPath改成ProjectPath,能读到信息 我加数据库加个表加个列,能解决眼下问题,但没有解决根本问题
|
-- 作者:有点蓝 -- 发布时间:2022/5/17 11:13:00 -- 把Foxtable设置为“使用管理员身份运行”。如果是发布的程序,就设置exe程序 msgbox(e.ProjectPath & "zhsy.txt") msgbox(FileSys.FileExists(e.ProjectPath & "zhsy.txt")) Dim Val2 As String = FileSys.ReadAllText(e.ProjectPath & "zhsy.txt") msgbox(Val2)
|
-- 作者:漂亮美眉vszh -- 发布时间:2022/5/17 17:10:00 -- msgbox(e.ProjectPath & "zhsy.txt") 读取加密 D:\\*******\\zhsy.txtmsgbox(FileSys.FileExists(e.ProjectPath & "zhsy.txt")) true Dim Val2 As String = FileSys.ReadAllText(e.ProjectPath & "zhsy.txt") msgbox(Val2) 弹出: tN86LfV5Xsq8HjswfaG4dEDT5De9yF7BsJ1l2ocDlXHFrLV6xXDaJKfTtbmQNOnZwRqRA1mVzDudb8g9sH2hOui7U8cFAhWz Val3 = DecryptText(Val2,"123456","123456") \'解密,两个密钥必须和加密的时候相同 那就是这句话有问题,弹出来是空的 |
-- 作者:有点蓝 -- 发布时间:2022/5/17 17:13:00 -- 1、zhsy.txt保存的不是加密后的数据,或者数据不完整,或者有空格回车符等看不见的字符 2、加解密的密钥不一致。 密钥建议使用8位长度
|
-- 作者:漂亮美眉vszh -- 发布时间:2022/5/18 7:13:00 -- 非常感谢老师的解答 1.第一种测试过,在命令口弹出来就是正确的,放在连接数据库事件里才出现这个问题2.密钥肯定 一致,这个代码用了几年了,就这一次换了IP地址才失效,之前换IP地址也正常 最后密钥建议8位,好的我尝试下
|