以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [讨论] 狐表的保存机制,如何理解,有实例!  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=1556)

--  作者:wcs
--  发布时间:2009/1/5 17:41:00
--  [讨论] 狐表的保存机制,如何理解,有实例!
我用"abc.mdb"数据库作为外部数据源。

数据库里有B表,有23条记录,这个表会有多人同时操作!但是他们不能增加行,也不能减少行,只能在现有的记录里填写信息。

另有A表是SQL查询表,两者格式结构一样,现在有23条记录。

现在用filler填充数据,排除双方重复的内容,结果应为填充后与填充前一模一样!(因为FILLER中的填充字段的内容完全一样,其他字段内容可能不同),填充完了以后,我查阅了一下,TABLE中的记录还是23条!(我已取消了所有的筛选)

但是,一旦用 B表.load 就会出现再次将23条记录作为同不内容保存的情况。结果B表有46条记录,它们的主键值不同(自动编号的)!

为此,我们讨论一下load的保存机制,是不是有问题啦!

LOAD是指保存并同步其他操作者的数据,但我的数据完全一样,应该填充不了任何东西的。


我的想法是这样的:

A表用SQL查询从其他数据源中查询最新的记录,用FILLER来更新B表,排除重复的内容,以使B表能得到最新的内容。
现在不排除任何重复的内容了,直接追加了。

我记得狐表早期的版本没有这个问题的,以前我测试过,但升级以后就出现了这样的结果。

请各们讨论一下,有没有解决这个问题的方法?
[此贴子已经被作者于2009-1-5 18:50:53编辑过]

--  作者:wcs
--  发布时间:2009/1/5 18:45:00
--  

光说没用,实例来了!

项目文件开发者密码:888
项目文件中的会计凭证查询表 就是上面说的A表(被做到内部表里来了,没办法不能远程)
会计计凭证表 就是上面说的B表。

看一下窗口按键里面的代码,点击试一下!

A表中的23条记录被加到数据库 预算管理.mdb 里面,点击一次加一次,但实际上这些记录是重复的。

就是这一段代码:

dim dqpz As New Filler
dqpz.SourceTable = DataTables("会计凭证查询") \'指定数据来源
dqpz.SourceCols = "sszt,pzrqn,pzrqy,pzrqr,pzlx,pzdm,flxh,pzzy,kmdm,jdfx,flje,cjyh,fdzs" \'指定数据来源列
dqpz.DataTable = DataTables("会计凭证") \'指定数据接收表
dqpz.DataCols = "账套编号,年,月,日,pzlx,凭证编号,flxh,凭证摘要,科目代码,jdfx,flje,制证人,附件张数" \'指定数据接收列
dqpz.ExcludeExistValue = true
dqpz.ExcludeNullValue = true
dqpz.Distinct = true
dqpz.Fill() \'填充数据

DataTables("会计凭证总表").load
DataTables("会计凭证").load



我希望只填充不同的记录!
请求解决之道!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:桌面.rar


这个项目文件里面有许多代码,算是我的学习成果吧,大家也可以看看。
[此贴子已经被作者于2009-1-5 18:51:46编辑过]

--  作者:wcs
--  发布时间:2009/1/5 19:36:00
--  

自己顶一下,没有人试过上传的附件吗?


--  作者:狐狸爸爸
--  发布时间:2009/1/5 21:14:00
--  

我在命令窗口测试下面的代码:

 

dim dqpz As New Filler

dqpz.SourceTable = DataTables("会计凭证查询") \'指定数据来源

dqpz.SourceCols = "sszt,pzrqn,pzrqy,pzrqr,pzlx,pzdm,flxh,pzzy,kmdm,jdfx,flje,cjyh,fdzs" \'指定数据来源列

dqpz.DataTable = DataTables("会计凭证") \'指定数据接收表

dqpz.DataCols = "账套编号,年,月,日,pzlx,凭证编号,flxh,凭证摘要,科目代码,jdfx,flje,制证人,附件张数" \'指定数据接收列

dqpz.ExcludeExistValue = true

dqpz.ExcludeNullValue = true

dqpz.Distinct = true

dqpz.Fill() \'填充数据



第一次填充了23条记录,第二次没有填充。
--  作者:czy
--  发布时间:2009/1/5 21:51:00
--  
测试正常。

问题应该出在sql语句中,Select All * From [会计凭证] Where 账套编号 = 11 and 年 = 2008
表中并没有2008年的数据,填充并重载后,会计凭证表中没有一条记录,而Filler是以加载的数据来区别来源表和接收表中的数据是否有重复,在这种情况下Filler后load数据库中出现重复数据就不奇怪了。
--  作者:wcs
--  发布时间:2009/1/5 22:30:00
--  
以下是引用czy在2009-1-5 21:51:00的发言:
测试正常。

问题应该出在sql语句中,Select All * From [会计凭证] Where 账套编号 = 11 and 年 = 2008
表中并没有2008年的数据,填充并重载后,会计凭证表中没有一条记录,而Filler是以加载的数据来区别来源表和接收表中的数据是否有重复,在这种情况下Filler后load数据库中出现重复数据就不奇怪了。


我的实例中没有  Select All * From [会计凭证] Where 账套编号 = 11 and 年 = 2008   啊!

我的会计凭证查询表中只有2009年的数据。

同时,也请老六在代码的后面加上:

DataTables("会计凭证总表").load
DataTables("会计凭证").load


主要问题是不是在这里?

请用ACCESS打开数据库看看里面的情况,不要只看狐表中的表单。

我不明白是这是LOAD有问题?

[此贴子已经被作者于2009-1-5 22:34:28编辑过]

--  作者:wcs
--  发布时间:2009/1/5 22:36:00
--  
以下是引用狐狸爸爸在2009-1-5 21:14:00的发言:

我在命令窗口测试下面的代码:

 

dim dqpz As New Filler

dqpz.SourceTable = DataTables("会计凭证查询") \'指定数据来源

dqpz.SourceCols = "sszt,pzrqn,pzrqy,pzrqr,pzlx,pzdm,flxh,pzzy,kmdm,jdfx,flje,cjyh,fdzs" \'指定数据来源列

dqpz.DataTable = DataTables("会计凭证") \'指定数据接收表

dqpz.DataCols = "账套编号,年,月,日,pzlx,凭证编号,flxh,凭证摘要,科目代码,jdfx,flje,制证人,附件张数" \'指定数据接收列

dqpz.ExcludeExistValue = true

dqpz.ExcludeNullValue = true

dqpz.Distinct = true

dqpz.Fill() \'填充数据



第一次填充了23条记录,第二次没有填充。



请保存以后,再用ACCESS打开数据库看看里面的情况。

我看到是的46、69、92等等,越搞越多!

[此贴子已经被作者于2009-1-5 22:36:38编辑过]

--  作者:czy
--  发布时间:2009/1/5 22:41:00
--  
切换到会计凭证表,管理项目,外部数据表,设置外部数据表,过滤/排序,将 账套编号 = 11 and 年 = 2008 改成:账套编号 = 11 and 年 = 2009
再试试填充加载。

--  作者:狐狸爸爸
--  发布时间:2009/1/5 22:53:00
--  
排除现有内容,是和表中已经加载的数据比较,不是和后台的数据比较。
--  作者:wcs
--  发布时间:2009/1/5 22:54:00
--  
以下是引用狐狸爸爸在2009-1-5 22:53:00的发言:
排除现有内容,是和表中已经加载的数据比较,不是和后台的数据比较。

是的啊!

但是一保存,就重复了!