Foxtable(狐表)用户栏目专家坐堂 → [讨论] 狐表的保存机制,如何理解,有实例!


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

主题:[讨论] 狐表的保存机制,如何理解,有实例!

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


加好友 发短信
等级:五尾狐 帖子:1042 积分:7475 威望:0 精华:0 注册:2008/8/31 22:52:00
[讨论] 狐表的保存机制,如何理解,有实例!  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1042 积分:7475 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1042 积分:7475 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By:2009/1/5 19:36:00 [显示全部帖子]

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


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


加好友 发短信
等级:五尾狐 帖子:1042 积分:7475 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1042 积分:7475 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1042 积分:7475 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By:2009/1/5 22:54:00 [显示全部帖子]

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

是的啊!

但是一保存,就重复了!


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


加好友 发短信
等级:五尾狐 帖子:1042 积分:7475 威望:0 精华:0 注册:2008/8/31 22:52:00
  发帖心情 Post By:2009/1/5 23:21:00 [显示全部帖子]

我按CZY版主的方法测试了一下!

没有出现重复的问题了。

我想是不是这样的:

会计凭证表根据外部数据源的设置,只加载2008年的数据。

在填充的时候,总是认为会计凭证表里面没有数据(外部数据源里只有2009年的),所以每一次都是填充23行!

保存时作为新的行保存了,因为填充进来的记录的主键值与原来不同!



一开始,我在家里测试一切都是正常的(因为那是2008年嘛,我家的SQL数据库里只有2008年的数据)!

后来,我们要正式使用预算管理系统了,是2009年了,在单位里面就不正常了,因为单位的数据库里是2009年的数据!

哈哈,明天我在单位去试试!

祝狐表早日开卖!  我也一定尽能力地买!

还有,现在的帮助是深入浅出了,比较好阅读和掌握了。

但是,有很多功能没有介绍,对于想深入掌握的人就不太方便了。

建议同时有一个完整一些的开发手册。


 回到顶部