以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]网络自动编号问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=33724)

--  作者:syzsyk
--  发布时间:2013/5/23 12:49:00
--  [求助]网络自动编号问题

在网络环境下复杂编号例程中 

If e.name = "编号" Then
    e.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & e.ProjectPath & "编号.mdb;Persist Security Info=False"
End If

在网络环下红色部分怎么改?


--  作者:Bin
--  发布时间:2013/5/23 14:05:00
--  
网络环境红色部分不需要更改

If e.name = "编号" Then
    e.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & e.ProjectPath & "编号.mdb;Persist Security Info=False"
End If

更改蓝色部分是局域网文件对应路径即可.

如果是外网,还是使用MSSQL吧

--  作者:syzsyk
--  发布时间:2013/5/23 14:27:00
--  
完全照例程做的,运行时显示没有编号数据源。
--  作者:Bin
--  发布时间:2013/5/23 14:32:00
--  
完全按照帮助例子不会不行的,帮助例子都经过千百人 千百次是测试的.


你要做的是检查自己哪一步做错了.

--  作者:syzsyk
--  发布时间:2013/5/23 14:32:00
--  
我用的是外网。MSSQL。
--  作者:syzsyk
--  发布时间:2013/5/23 16:21:00
--  

错误提示,帮忙看一下是怎么回事?

.NET Framework 版本:2.0.50727.6400
Foxtable 版本:2013.4.30.1
错误所在事件:表,动物屠宰检疫,BeforeSaveDataRow
详细错误信息:
调用的目标发生了异常。
未将对象引用设置到对象的实例。


--  作者:狐狸爸爸
--  发布时间:2013/5/23 16:32:00
--  

其实错误提示已经告诉你是哪一个事件出问题,通常你可以用下面的方法找出到底是哪一行代码出错了:

 

http://www.foxtable.com/help/topics/1485.htm

 

 

然后分析原因,你搞不定的话,贴出动物屠宰检疫表的BeforeSaveDataRow事件代码,告诉我哪一行代码出错,我帮你看看。


--  作者:syzsyk
--  发布时间:2013/5/23 17:00:00
--  

BeforeSaveDataRow事件代码:

Dim dr As DataRow = e.DataRow
Dim pf As String
If dr.RowState <> DataRowState.Added Then \'如果不是新增行
    Return \'那么返回
ElseIf dr.IsNull("登记日期") Then \'如果没有输入日期
    e.Cancel = True \'取消保存此行
    MessageBox.Show("必须输入登记日期!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return
Else
    pf = Format(dr("登记日期"),"yyyyMMdd") \'否则获得编号的前缀,两位年,两位月
End If
Dim cmd1 As New SQLCommand
Dim cmd2 As New SQLCommand
Dim Key As Integer
cmd1.C \'设置数据源名称
cmd2.C
cmd1.commandText = "Select Count(*) From [编号] Where [前缀] = \'" & pf & "\'"
If cmd1.ExecuteScalar = 0 Then \'如果编号表不存在前缀的行,那么增加一行
    cmd1.commandtext = "Insert Into 编号 (前缀, 顺序号) Values(\'" & pf & "\',1)"
    cmd1.ExecuteNonQuery
End If
cmd1.commandText = "Select [顺序号] From [编号] Where [前缀] = \'" & pf & "\'"
Do
    Key = cmd1.ExecuteScalar() \'从后台获得顺序号
    cmd2.commandText = "Update [编号] Set [顺序号] = " & (Key + 1) & " Where [顺序号] = " & Key & " And [前缀] = \'" & pf & "\'"
    If cmd2.ExecuteNonQuery() > 0 Then \'更新顺序号
        Exit Do \'更新成功则退出循环
    End If
Loop
e.DataRow("编号") = pf & "-" & Format(Key,"0000")

刚才按照例程重做了一遍,保存后仍然显示不存在名为“编号”的数据源。表或项目事件少东西了?

项目事件:

BeforeConnectOuterDataSource

AfterOpenProject

表事件:

BeforeSaveDataRow

DataRowAdding


--  作者:狐狸爸爸
--  发布时间:2013/5/23 18:14:00
--  

用这个方法:

http://www.foxtable.com/help/topics/1485.htm

 

看看那一行出错,测试的时候,修改一行数据,然后保存。


--  作者:syzsyk
--  发布时间:2013/5/24 18:05:00
--  
整个检查了,发现是数据源问题,数据.mdb无法连接上,服务器在一个局域网内部,我在外网操作,数据.mdb应该在我外网的电脑上还是在服务器上?