Foxtable(狐表)用户栏目专家坐堂 → 苦恼.数据在局域网中使用


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

主题:苦恼.数据在局域网中使用

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


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/7/28 21:45:00 [显示全部帖子]

老爹,这个问题我也遇到,从四月份开始,我的系统已经开始投入使用,楼主所说的数据丢失问题的确存在。直到现在我也没找出问题所在。

我那个项目采用SQL外部数据表,比如表A和表B,表A没有引用到项目文件中,数据写入用的是SQL语句,明明已经写入,而且能查询到的,第二天就发

现某些数据行消失了。根本找不出问题所在。而表B引用到项目文件中,则没试过数据行消失的问题。

这里强调一点,表A只提供了写入语句,除了我这个管理员,其他人没有删除功能。请问老爹是怎么回事?
[此贴子已经被作者于2009-7-28 21:51:39编辑过]

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


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/7/29 22:16:00 [显示全部帖子]

今天出现一个问题,请看下面代码。

   cmd.CommandText = "select 住院ID,项目,规格,类别,单位,单价,用量*天数 AS 用量,round(单价*用量*天数,2) AS 金额 from [H_YIZ] where 住院ID = '" & str & "'"
            dt = cmd.ExecuteReader()
            Dim g As New GroupTableBuilder("清单",dt)
            g.Groups.AddDef("住院ID")
            g.Groups.AddDef("类别")
            g.Groups.AddDef("项目")
            g.Groups.AddDef("规格")
            g.Groups.AddDef("单位")
            g.Groups.AddDef("单价")
            g.Totals.AddDef("用量")
            g.Totals.AddDef("金额")
            g.Build()
           
            dim f As New Filler
            f.SourceTable = DataTables("清单")
            f.SourceCols = "住院ID,类别,项目,规格,单位,单价,用量"
            f.DataTable = DataTables("结算")
            f.DataCols = "住院ID,类别,项目,规格,单位,单价,用量"
            f.Distinct = False
            f.Fill()
            DataTables("结算").Save()


为什么结算表偶尔会出现重复的数据行?住院ID,类别,项目,规格,单位,单价,用量完全相同。。。。。这不是所有患者都有此问题,大概一个月下来一个到两,这该如何解释?应如何解决?


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


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/7/30 13:42:00 [显示全部帖子]

以下是引用狐狸爸爸在2009-7-30 8:05:00的发言:
 To: 菜鸟foxtable

可能前后有空格或者回车,这种问题一般都是这样

老爹,请看清楚哦,先用SQL语句生成临时表,再填充。这样会产生空格或回车吗?

计算总金额是直接用SQL计算医嘱表生成的,而结算表金额大于总金额时,多出的部分正好是重复的行的总额。


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


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/7/30 23:24:00 [显示全部帖子]

以下是引用yangming在2009-7-30 16:26:00的发言:

对头,请看下面的说明,你设为False,将不会排除重复内容,也不会排除已有内容和空白值。
Distinct

逻辑型,是否排除重复内容,默认为True;如果设为False,将不会排除重复内容,也不会排除已有内容和空白值。

对啊,但请看看清楚SQL查询语句以及GroupTableBuilder函数生成的临时表,那个是不会产生重复内容吧?按道理就算有重复行,结算表的总金额也应该等于医嘱表总金额啊。

[此贴子已经被作者于2009-7-30 23:26:05编辑过]

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


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/7/31 1:36:00 [显示全部帖子]

以下是引用czy在2009-7-31 0:50:00的发言:

如果可以排除不可见字符的话,是否会是用量和金额两列产生了浮点而导致貌似的重复呢?
现在不明白的是你的总金额,试着用同样的spl语句生成总金额看看两者是不是相等。

[此贴子已经被作者于2009-7-31 0:53:39编辑过]

C版,系统fa piao打印产生的金额是直接针对医嘱表查询进行计算的,这保证了患者总金额的准确性,而汇总清单则是通过对结算表查询生成。
正常情况下,98%的患者这两者总金额是相等的,但总有那么一两个会出现重复数据,导致两者相差几十元甚至上千元,这与浮点应该无关,是生成临时表或填充时重复填充了某些行。

你注意到吗?代码第一行实际上就是医嘱表计算总金额的类似公式。

select sum(round(单价*用量*天数,2)) AS 金额 from [H_YIZ] where 住院ID = '" & str & "'"


为何经过了统计和填充两个步骤就会出现重复行呢?网络传输?或者其他问题?或者是BUG?

            cmd.CommandText = "select 住院ID,项目,规格,类别,单位,单价,用量*天数 AS 用量,round(单价*用量*天数,2) AS 金额 from [H_YIZ] where 住院ID = '" & str & "'"
            dt = cmd.ExecuteReader()
            Dim g As New GroupTableBuilder("清单",dt)
            g.Groups.AddDef("住院ID")
            g.Groups.AddDef("类别")
            g.Groups.AddDef("项目")
            g.Groups.AddDef("规格")
            g.Groups.AddDef("单位")
            g.Groups.AddDef("单价")
            g.Totals.AddDef("用量")
            g.Totals.AddDef("金额")
            g.Build()


            dim f As New Filler
            f.SourceTable = DataTables("清单")
            f.SourceCols = "住院ID,类别,项目,规格,单位,单价,用量"
            f.DataTable = DataTables("结算")
            f.DataCols = "住院ID,类别,项目,规格,单位,单价,用量"
            f.Distinct = False
            f.Fill()
            DataTables("结算").Save()

[此贴子已经被作者于2009-7-31 1:52:18编辑过]

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


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/8/4 21:39:00 [显示全部帖子]

以下是引用mr725在2009-7-31 10:17:00的发言:
试着猜想一下:
1、如果结算表有重复数据行,
2、那么 临时表=》清单 中一定有重复数据行,
3、因为临时表是从后退sql数据库中按条件生成的,
4、那么,sql数据库中应该有重复行,(暂时排除cmd.CommandText = "select 住院ID,项目...= '" & str & "'"
的问题)
5、那么,在录入、修改等动作结束候,保存到sql时,是否检查了原sql库中有没有相同正在保存的这条记录。
如果这些都排除了。。。。。。。。。。~~~~~~~   不懂了~  呵呵。。。

第四点成立的话,那为何总金额不相等?两个SQL语句是在已经办理出院后同时执行的,该患者在医嘱表中的信息早已停止录入。

我觉得还是填充时出现了问题,至于是什么原因造成的就不清楚了。

[此贴子已经被作者于2009-8-4 21:40:55编辑过]

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


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/8/4 22:01:00 [显示全部帖子]

以下是引用mr725在2009-8-4 21:43:00的发言:

充填前能否先清空被充填的表?
     DataTables("结算").DataRows.Clear() '清除原来的数据
试过吗? 呵呵~ 这样应该不会重复了。

[此贴子已经被作者于2009-8-4 21:48:49编辑过]

这个是有的,并且,每行都有患者ID列,不会发生把原来的数据错误引用的问题。


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


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/8/4 23:01:00 [显示全部帖子]

以下是引用mr725在2009-8-4 22:20:00的发言:
再一个就是:你的 [H_YIZ] 如果是主表的话 cmd.CommandText = "select 住院ID,项目,规格,..............  是否可以改为cmd.CommandText = "select DISTINCT 住院ID,项目,规格,..........   彻底避免住院ID的重复行被引入
[此贴子已经被作者于2009-8-4 22:24:05编辑过]

如果出错,为什么不是全部患者?就一两个?我的感觉是,生成临时表时已经出现了重复行,填充时又设定了false,所以出现重复。至于为何生成临时表时出现重复行那就真的搞不懂了。

[此贴子已经被作者于2009-8-4 23:03:15编辑过]

 回到顶部