以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]fill中的表问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=107266) |
-- 作者:blsu33 -- 发布时间:2017/9/24 17:46:00 -- [求助]fill中的表问题 老师, FILL产生表D来自ABC三个表,如何做能增加D表一行数据,更新ABC三个表三个表呢?思路是什么
|
-- 作者:有点甜 -- 发布时间:2017/9/24 21:30:00 -- datacolchanged事件,判断表D的列,根据表D主键的值,在abc表查找对应的行,然后新增或者修改或者删除。 |
-- 作者:blsu33 -- 发布时间:2017/9/25 9:27:00 -- .NET Framework 版本:2.0.50727.3053 Foxtable 版本:2017.8.19.1 错误所在事件: 详细错误信息: 对于多个基表不支持动态 SQL 生成。 Tables("窗口1_Table1").Fill("Select 部门,姓名,密码,好友,{用户}.[_Identify],{用户}.[_Locked],{用户}.[_SortKey],{用户表}.[_Locked],{用户表}.[_SortKey],权限ID,用户名,{用户表}.[_Identify] F rom {用户} Inner JOIN {用户表} ON {用户表}.[用户名] = {用户}.[姓名]","test",False) 那是不是 只能这么写了 Tables("窗口1_Table1").Fill("Select 部门,姓名,密码,好友,{用户}.[_Identify],{用户}.[_Locked],{用户}.[_SortKey],{用户表}.[_Locked],{用户表}.[_SortKey],权限ID,用户名,{用户表}.[_Identify] F rom {用户} Inner JOIN {用户表} ON {用户表}.[用户名] = {用户}.[姓名]","test",true) |
-- 作者:有点甜 -- 发布时间:2017/9/25 9:29:00 -- 只能用查询表。 |
-- 作者:blsu33 -- 发布时间:2017/9/25 9:45:00 -- datacolchanged 怎么写呢 都不会了 以下代码 都不行 ? \'Dim dt As DataTable=e.Form.Controls("Table1").DataTable \'MessageBox.Show(dt.name) \'MessageBox.Show(E.DataRow("_Identify")) \'If E.DataRow.RowState=DataRowState.Added Then \'MessageBox.Show(E.DataRow("_Identify")) \'End If \'Dim t As Table=Tables("窗口1_table1") \'Dim r As Row=T.Current \'MessageBox.Show(r("_Identify")) [此贴子已经被作者于2017/9/25 9:45:27编辑过]
|
-- 作者:有点甜 -- 发布时间:2017/9/25 9:51:00 -- DataColChanged事件直接判断列名。
比如有 表Aid、表A第一列、表A第二列、表Bid、表B第三列
你修改了【表A第一列】,那么就根据【表Aid】查找表A的行,如果找到,就直接改值;如果没找到,那就给表A新增一行。 |
-- 作者:blsu33 -- 发布时间:2017/9/25 10:16:00 -- 老师, 5楼的意思是怎么引用这个_Identify 列呢 Select Case E.DataRow.RowState Case DataRowState.Added Case DataRowState.Modified MessageBox.Show(E.DataRow("_Identify")) Case DataRowState.Unchanged End Select .NET Framework 版本:2.0.50727.3053 Foxtable 版本:2017.8.19.1 错误所在事件:表,窗口1_Table1,DataColChanged 详细错误信息: 调用的目标发生了异常。 列“_Identify”不属于表 窗口1_Table1。 |
-- 作者:有点甜 -- 发布时间:2017/9/25 10:19:00 -- 你fill的表里面,请把各个表的主键加进来,改一个别名,如
select {表A}.[_Identify] As 表AId, {表B}.[_Identify] As 表BId |
-- 作者:blsu33 -- 发布时间:2017/9/25 11:43:00 -- 老师 看到效果了,把代码放到了保存按钮中,统一完成。 不知是否这样操作? 绿色部分的代码,是列名,但是,FT的类型不好判定,还要弄一个表来记录? Dim flt As String Dim drnames() As String={"部门","姓名","密码"} Dim tb As Table =Tables("窗口1_Table1") Select Case tb.Current.DataRow.RowState Case DataRowState.Added Case DataRowState.Modified Dim r As Row=tb.Current For Each drname As String In drnames flt &=drname & "=\'" & r(drname) & "\'," Next Dim cmd2 As New SQLCommand cmd2.C cmd2.CommandText ="UPDATE {用户} S ET " & flt.TrimEnd(",") & " where" & " [_Identify]=" & r("zbid") MessageBox.Show(cmd2.CommandText ) cmd2.ExecuteNonQuery() tb.DataTable.Save() Case DataRowState.Unchanged e.Form.Close End Select |
-- 作者:有点甜 -- 发布时间:2017/9/25 11:51:00 -- 1、sqlQuery表无法判断 rowState 的值的,你要多加一个辅助列,在datacolchanged事件标记是新增还是修改;
2、绿色的代码,没问题,不需要判断类型,sql语句任何类型的值都可以用单引号括起来。 |