Foxtable(狐表)用户栏目专家坐堂 → BeforeConnectOuterDataSource 中添加代码,就出现错误?


  共有1739人关注过本帖树形打印复制链接

主题:BeforeConnectOuterDataSource 中添加代码,就出现错误?

帅哥哟,离线,有人找我吗?
lyx4040
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:80 积分:823 威望:0 精华:0 注册:2016/1/10 11:25:00
BeforeConnectOuterDataSource 中添加代码,就出现错误?  发帖心情 Post By:2017/9/27 22:18:00 [只看该作者]

 
在全局代码中读取了一个图片
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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/27 22:39:00 [只看该作者]

试试改成

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
lyx4040
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:80 积分:823 威望:0 精华:0 注册:2016/1/10 11:25:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:80 积分:823 威望:0 精华:0 注册:2016/1/10 11:25:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/27 23:24:00 [只看该作者]

这种代码有问题

 

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

 

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
lyx4040
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:80 积分:823 威望:0 精华:0 注册:2016/1/10 11:25:00
  发帖心情 Post By:2017/9/28 0:03:00 [只看该作者]

问题解决了,问一下,在 BeforeConnectOuterDataSource 中 用什么代码退出程序?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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


 回到顶部