以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  BeforeConnectOuterDataSource 中添加代码,就出现错误?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=107428)

--  作者:lyx4040
--  发布时间:2017/9/27 22:18:00
--  BeforeConnectOuterDataSource 中添加代码,就出现错误?
 
在全局代码中读取了一个图片
Public multimg As Image = GetImage("docs.png")

在表 DrawCell 中绘制了这个图片,之前一直正常。

BeforeConnectOuterDataSource 中设置了下数据源,打开项目时就弹出错误
e.ConnectionString = “Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=door;Data Source=LE-PC\\SQLEXPRESS”

我就只添加一个 Messagebox 也会弹出这个错误:

错误所在事件:表,订单表,DrawCell
详细错误信息:
调用的目标发生了异常。
值不能为空。
参数名: image


不知道什么原因?


[此贴子已经被作者于2017/9/27 22:25:55编辑过]

--  作者:有点甜
--  发布时间:2017/9/27 22:39:00
--  

试试改成

 

Public multimg As Image = GetImage(projectPath & "images/docs.png")


--  作者:lyx4040
--  发布时间:2017/9/27 22:51:00
--  
刚又认真试了下,因为我把设置保存在 ini 文件中, 全局代码中定义了一个读写ini 文件的类。只要调用了读ini的函数就会弹出错误。而且ini读取不到数据。但是这个函数不在 BeforeConnectOuterDataSource 时使用是可以正常用的。ini的读写是论坛上找的。

Public Class INIClass
    Public inipath As String
    <DllImport("kernel32")> _
    Private Shared Function WritePrivateProfileString(section As String, key As String, val As String, filePath As String) As Long
    End Function
    <DllImport("kernel32")> _
    Private Shared Function GetPrivateProfileString(section As String, key As String, def As String, retVal As StringBuilder, size As Integer, filePath As String) As Integer
    End Function
    \'\'\' <summary>
    \'\'\' 构造方法
    \'\'\' </summary>
    \'\'\' <param name="INIPath">文件路径</param>
    Public Sub New(INIPath__1 As String)
        inipath = INIPath__1
    End Sub
    \'\'\' <summary>
    \'\'\' 写入INI文件
    \'\'\' </summary>
    \'\'\' <param name="Section">项目名称(如 [TypeName] )</param>
    \'\'\' <param name="Key">键</param>
    \'\'\' <param name="Value">值</param>
    Public Sub IniWriteValue(Section As String, Key As String, Value As String)
        WritePrivateProfileString(Section, Key, Value, Me.inipath)
    End Sub
    \'\'\' <summary>
    \'\'\' 读出INI文件
    \'\'\' </summary>
    \'\'\' <param name="Section">项目名称(如 [TypeName] )</param>
    \'\'\' <param name="Key">键</param>
    Public Function IniReadValue(Section As String, Key As String) As String
        Dim temp As New StringBuilder(500)
        Dim i As Integer = GetPrivateProfileString(Section, Key, "", temp, 500, Me.inipath)
        Return temp.ToString()
    End Function
    \'\'\' <summary>
    \'\'\' 验证文件是否存在
    \'\'\' </summary>
    \'\'\' <returns>布尔值</returns>
    Public Function ExistINIFile() As Boolean
        Return System.IO.File.Exists(inipath)
    End Function
End Class


Public Function ReadConfig(key As String) As String
Dim cfg As new INIClass(ProjectPath & "config.ini")
If cfg.ExistINIFile Then
    Return cfg.IniReadValue("Setting", key)
End If
End Function


Public Function WriteConfig(Key As String, Value As String) As Boolean
Dim cfg As new INIClass(ProjectPath & "config.ini")
If cfg.ExistINIFile Then
    cfg.IniWriteValue("Setting",Key, Value)
    Return True
Else
    Return False
End If
End Function



--  作者:lyx4040
--  发布时间:2017/9/27 22:55:00
--  
BeforeConnectOuterDataSource 中
MessageBox("ip")  \'这不会弹出错误


MessageBox(ReadConfig("ip"))   \'调用函数后就会弹出错误,但是这个函数不在BeforeConnectOuterDataSource 中使用时是正常的

e.ConnectionString = xxxxx Data Source=" & ReadConfig("ip") & "\\SQLEXPRESS"  ‘正真是这样的,因为使用了ReadConfig("ip") 来读取ip ,所以也会弹出错误

而且
MessageBox 显示的是空白,说明连数据都没有读取到,还是函数调用导致内部出问题了,
所以连后面的
Public multimg As Image = GetImage("docs.png") 也不正常了


现在问题出在哪里,怎么解决?

[此贴子已经被作者于2017/9/27 23:24:04编辑过]

--  作者:有点甜
--  发布时间:2017/9/27 23:24:00
--  

这种代码有问题

 

Dim cfg As new INIClass(ProjectPath & "config.ini")

 

BeforeConnectOuterDataSource 事件,不能用红色代码。

 

你要把 e.ProjectPath 传递过去使用。


--  作者:lyx4040
--  发布时间:2017/9/28 0:03:00
--  
问题解决了,问一下,在 BeforeConnectOuterDataSource 中 用什么代码退出程序?

--  作者:有点甜
--  发布时间:2017/9/28 8:44:00
--  
以下是引用lyx4040在2017/9/28 0:03:00的发言:
问题解决了,问一下,在 BeforeConnectOuterDataSource 中 用什么代码退出程序?

 

方法一:

 

Syscmd.Project.Exit() 正常退出Foxtable
Syscmd.Project.Exit(True) 先保存数据,然后退出Foxtable
Syscmd.Project.Exit(False) 不保存数据,强行退出Foxtable

 

方法二:

 

Dim ps As  System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName("foxtable")
For Each p As System.Diagnostics.Process In ps
    msgbox(p.MainWindowTitle)
    If p.MainWindowTitle = Nothing Then  p.kill
Next