以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何实现同步更新表  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=46007)

--  作者:9EQ98
--  发布时间:2014/2/15 10:57:00
--  如何实现同步更新表

有两个表:想当其中一个表修改和新增记录后,另一个表同步更新修改或新增记录,

在【表属性】的〖BeforeSaveDataRow〗 事件中写入以下代码,提示出错

 

\'BeforeSaveDataRow 保存目一数据行之前执行,可以在此对数据进行最终的验证

If DataTables.Contains("Equa_GPS") = False Then \'如果表 Equa_GS 没有加载
    DataTables.Load("Equa_GPS") \'加载表 Equa_GPS
End If

If DataTables.Contains("Equa_GPS") = False Then \'如果 Equa_GPS 没有加载
    MessageBox.Show("系统导航表未能加载,无法与菜单权限表同步更新", _
    "同步更新提示", _
    MessageBoxButtons.OK, _
    MessageBoxIcon.Warning)
    \'Ok Retry Cancel Yes No,Error Information None Question Warning
    Return
End If

\'将整行记录同步更新至 Equa_GPS 表
Dim dr_source As DataRow = e.DataRow  \'正在保存的记录行

If (dr_source.RowState = DataRowState.Modified Or _
    dr_source.RowState = DataRowState.Added) = False  Then \'没有已修改或新增记录
    Return
End If

Dim EL_TypeName  As String = e.DataRow("TypeName")  \'分类
Dim EL_PageName  As String = e.DataRow("PageName")  \'导航栏名称
Dim EL_TopicName As String = e.DataRow("TopicName") \'任务栏名称

Dim dr_aim As Row \'定义数据行

Dim dr1 As DataRow              \'定义重复名称检查数据查询
Dim Find_Filter As String = ""  \'定义查询筛选条件
Find_Filter = "[TypeName] ="" & EL_TypeName & """ & " And " & _
"[PageName] ="" & EL_PageName & """ & " And " & _
"[TopicName] ="" & EL_TopicName & """

Tables("EQUA_GPS").Filter = "" \'取消筛选,恢复为所有记录
dr1 = DataTables("EQUA_GPS").Find(Find_Filter,"TypeName",0)  \'执行查询,返回结果集(查找条件,排序)

If dr1 IsNot Nothing Then        \'如果找到记录
Else \'没有找到记录,新增一行
    Tables("EQUA_GPS").AddNew()  \'增加一行
End If

dr_aim = Tables("EQUA_GPS").Current     \'返回当前行(定位到记录行)
dr_aim("IS_Ban")    = dr_source("IS_Ban")     \'是否禁用
dr_aim("TypeName")  = dr_source("TypeName")   \'分类
dr_aim("PageName")  = dr_source("PageName")   \'导航栏名称
dr_aim("PageText")  = dr_source("PageText")   \'导航栏标题
dr_aim("Order_By")  = dr_source("Order_By")   \'显示顺序
dr_aim("TopicName") = dr_source("TopicName")  \'任务栏名称
dr_aim("TopicText") = dr_source("TopicText")  \'任务栏标题
dr_aim("PageICO")   = dr_source("PageICO")    \'图标
dr_aim("ShowICO")   = dr_source("ShowICO")    \'显示图标
dr_aim("CmdText")   = dr_source("CmdText")    \'执行命令
dr_aim("MassText")  = dr_source("MassText")   \'提示信息
Tables("EQUA_GPS").Save()       \'保存数据
\'Tables("EQUA_GPS").Filter = "" \'取消筛选,恢复为所有记录


\'结束

 

出错提示:

Exception has been thrown by the target of an invocation.
Cannot interpret token \'"\' at position 13.

例外被调用的目标投掷。无法解释的标记“”在位置13 


此主题相关图片如下:错误提示.jpg
按此在新窗口浏览图片

 

两个表的表结构信息如下:


此主题相关图片如下:系统导航-表结构.jpg
按此在新窗口浏览图片  
此主题相关图片如下:菜单权限-表结构.jpg
按此在新窗口浏览图片


--  作者:Bin
--  发布时间:2014/2/15 11:06:00
--  
你还是上个例子吧.
--  作者:9EQ98
--  发布时间:2014/2/15 11:15:00
--  

亲,已经是个例子了呀


--  作者:Bin
--  发布时间:2014/2/15 11:18:00
--  
我指的是文件例子, 你这只不过是把代码发出来而已,不好排查.
--  作者:9EQ98
--  发布时间:2014/2/15 11:25:00
--  

Dim Find_Filter As String = ""  \'定义查询筛选条件
MessageBox.Show("提示")
Find_Filter = "[TypeName] ="" & EL_TypeName & """ & " And " & _
"[PageName] ="" & EL_PageName & """ & " And " & _
"[TopicName] ="" & EL_TopicName & """

请问 上面那段代码,有问题吗?


--  作者:Bin
--  发布时间:2014/2/15 11:27:00
--  
我觉得,你应该增加一个唯一的编号列,可以隐藏不显示,这样每次只需要判断查找这个编号即可,不用做大量判断
--  作者:9EQ98
--  发布时间:2014/2/15 11:39:00
--  

我已经测试出来了,是因为 双引号 引起的问题,把双引号改成 如下方式就行了

Find_Filter = "[TypeName] =" & "\'" & EL_TypeName & "\'" & " And " & _
"[PageName] =" & "\'" & EL_PageName & "\'" & " And " & _
"[TopicName] =" & "\'" & EL_TopicName & "\'"

之前是:"""