以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  连接外部数据库时闪退  (http://www.foxtable.com/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.txt

msgbox(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位,好的我尝试下