以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  不知道哪里错了,请指正  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=81915)

--  作者:ycwk
--  发布时间:2016/3/8 20:18:00
--  不知道哪里错了,请指正
If e.DataCol.Name="子任务完成状态" Then 
     If e.DataRow("子任务完成状态")="已完成"  Or e.DataRow("子任务完成状态")="已关闭" Then 
     MessageBox.show(1) 
      Dim dr As DataRow 
      dr = DataTables("任务跟踪").SQLFind(" 任务ID = \'" & e.DataRow("任务ID") & "\' ")    
       \' dr = DataTables("任务跟踪").SQLFind("任务ID=\'34\'")         
   
       Dim str As String = dr("任务_摘要")
     MessageBox.show(str)


想在子表的datacolchanged事件中,当  子任务完成状态   列值为  "已完成"  或"已关闭"时,将父表  的"任务_ID"=子表"任务ID" 的"子任务摘要"复制到父表中去,可是运行不到   MessageBox.show(str)    就报错,不知何故,即使换成下面注释的一行也报错。

--  作者:大红袍
--  发布时间:2016/3/8 20:37:00
--  

那就是查不到对应的任务ID号

 

dr = DataTables("任务跟踪").SQLFind(" 任务ID = \'" & e.DataRow("任务ID") & "\' ")  

If dr Is Nothing Then

    msgbox("没找到")

Else

    Dim str As String = dr("任务_摘要")

    MessageBox.show(str)

End If


--  作者:ycwk
--  发布时间:2016/3/8 20:54:00
--  
问题是我测试了, e.datarow("任务ID")  值为34   ,父表中确有 任务ID值等于34的行,  但是父表的 "任务ID" 为表达式列=[_identity]  也为整型
--  作者:ycwk
--  发布时间:2016/3/8 20:54:00
--  
邪门啊
--  作者:wyz20130512
--  发布时间:2016/3/8 21:09:00
--  
传实例看看。
--  作者:wyz20130512
--  发布时间:2016/3/8 21:16:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20160308211436.png
图片点击可在新窗口打开查看

--  作者:大红袍
--  发布时间:2016/3/8 21:45:00
--  

表达式列不在数据库里面的。也就是不能用sqlFind查询得到。

 

你试试 dr = DataTables("任务跟踪").SQLFind("[_Identify] = \'" & e.DataRow("任务ID") & "\' ")  


--  作者:ycwk
--  发布时间:2016/3/9 8:54:00
--  
确实是表达式列不能响应 datacolchanged事件的原因,现在不报错了,但是执行后,父表在前台表中及数据库中 “任务_摘要” 始终看不到值,这是什么原因啊?
 MessageBox.show(dr1("任务_摘要"))  也有值,但就是表中看不到


If e.DataCol.Name="任务ID" Then 
     e.DataRow("子任务ID") = CurrentTable.Compute("MAX(子任务ID)", "任务ID= \'" &  e.DataRow("任务ID") &  "\'")+1
End If


Dim dr As DataRow =e.DataRow
Dim  dr1 As DataRow = DataTables("任务跟踪").SQLFind(" [_identify] = \'" & e.DataRow("任务ID") & "\' ")     
If e.DataCol.Name="子任务完成状态" Then 
     If e.DataRow("子任务完成状态")="已完成"  Or e.DataRow("子任务完成状态")="已关闭" Then  
             If e.DataRow("子任务摘要") IsNot Nothing Then    \'如果摘要不为空返回摘要,否则返回子任务说明  
             dr1("任务_摘要")=   e.DataRow("子任务摘要")            
             MessageBox.show(e.DataRow("子任务摘要"))
             MessageBox.show(dr1("任务_摘要"))
             Else 
             dr1("任务_摘要")=   e.DataRow("子任务说明")
             End If
            \' MessageBox.show(dr1("_identify"))
            \' MessageBox.show(dr1("任务_摘要"))
     End If 
 End If

 MessageBox.show(dr1("_identify"))
 MessageBox.show(dr1("任务_摘要"))

--  作者:大红袍
--  发布时间:2016/3/9 10:09:00
--  

 你用的是sqlfind,也就是后台查找,后台完成,不显示到前台的。

 

 你改成比如这样

 

Dim  dr1 As DataRow = DataTables("任务跟踪").Find(" [_identify] = \'" & e.DataRow("任务ID") & "\' ")  

If dr1 Is Nothing Then

    dr1 = DataTables("任务跟踪").SQLFind(" [_identify] = \'" & e.DataRow("任务ID") & "\' ")  

End If


--  作者:ycwk
--  发布时间:2016/3/9 11:10:00
--  
果然,袍哥威武,之所以没用find,是因为 datatables("表名").  后按table键,没有find函数,我一直以为find函数只能用在tables("表名")