Foxtable(狐表)用户栏目专家坐堂 → 老大,关于向表中写入数据的疑问


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

主题:老大,关于向表中写入数据的疑问

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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
老大,关于向表中写入数据的疑问  发帖心情 Post By:2010/5/27 18:15:00 [只看该作者]

生成的窗口表中,如何只填充前两列的内容,来源内容在sql server后台数据源erp的表aam中,这个aam表只有两列

 

窗口表为临时生成,请看附件,不知道filler和fill在这里怎么用了

 


 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目38.table

[此贴子已经被作者于2010-5-27 18:17:05编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/5/27 19:06:00 [只看该作者]

哪两列? 是全部填充吗?

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/5/28 6:46:00 [只看该作者]

数据源erp的表aam只有两列classcode,classname

需要把这两列数据填充到窗口表aaa_table1的分类码和分类名称列


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/5/28 7:47:00 [只看该作者]

先Fill,再增加临时列

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/5/28 8:35:00 [只看该作者]

老大,现在有两个方向

 

第一,就是一次性生成临时表,然后填充数据,代码如下:

 

Dim dtb As New DataTableBuilder("统计")
Dim StartDate As Date = #5/1/2010# '起始日期
Dim Count As Integer = (#01/01/2011# - StartDate).TotalDays '计算间隔天数
dtb.AddDef("分类码", GetType(String), 12)
dtb.AddDef("分类名称", GetType(String), 100)
For i As Integer = 0 To Count '增加日期列
    dtb.AddDef("dc" & i, GetType(Double), "", Format(StartDate.AddDays(i),"yyyy-MM-dd"))
Next
dtb.AddDef("合计", GetType(Double))
dtb.Build()
tables("统计").visible=false
tables("aaa_table1").datasource=dtb.BuildDataSource()
'开始填充数据
dim f As New Filler
f.SourceTable = DataTables("class")
f.SourceCols = "classcode,classname"
f.DataTable = DataTables("aaa_table1")
f.DataCols = "分类码,分类名称"
f.Fill()


但是前提是不能使用外部数据源填充,只能变通通过将外部表aam转变为内部表class,才能实现。这种方法速度很快的

 

第二,就是按照您的方法先填充前两列数据,然后增加临时列,代码如下:

 

Tables("aaa_table1").fill("select classcode as '分类码',classname as '分类名称' from aam00000","erp",true)
Dim StartDate As Date = #5/1/2010# '起始日期
Dim Count As Integer = (#8/10/2010# - StartDate).TotalDays '计算间隔天数
For i As Integer = 0 To Count '增加日期列
    DataTables("aaa_table1").DataCols.Add("dc" & i, GetType(Double), "", Format(StartDate.AddDays(i),"yyyy-MM-dd"))
Next

 

这样实现了从外部数据源填充后再增加列的效果,但是速度就比第一种方法慢了许多。

 

真应了那句老话,鱼与熊掌不可兼得。

 

现在还有一个问题,就是生成日期标题的列后,如何向对应的单元格中填入从后台统计出的结果,来实现交叉统计的结果

不要误会,您该问了,为什么不使用SQLCrossTableBuilder,那多方便,是因为SQLCrossTableBuilder生成这种统计表后,元数据表如果日期列

不连续,那么统计表的列标题就不会连续显示,除非老大将这个方法改进一下,如果是日期列作为列标题显示,设置可选参数,连续日期统计还是如实日期统计

[此贴子已经被作者于2010-5-28 8:42:39编辑过]

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/5/28 11:19:00 [只看该作者]

在增加临时列的流程语句前后加上StopRedraw会好一些。

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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/5/28 13:40:00 [只看该作者]

也许还有第三种方法,就是先使用SQLCrossTableBuilder,然后再进行条件判断来决定增加哪些不存在的列


 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/5/28 18:27:00 [只看该作者]

老大,请指点迷津


 回到顶部