Office中国论坛/Access中国论坛

标题: 请教导入及表计算问题!未知能否实现!~ [打印本页]

作者: stvent    时间: 2011-5-15 14:51
标题: 请教导入及表计算问题!未知能否实现!~
本帖最后由 stvent 于 2011-5-16 15:07 编辑

详见如下图
作者: stvent    时间: 2011-5-15 21:42
没人能帮忙吗?
作者: stvent    时间: 2011-5-15 22:13
别沉了!~
作者: stvent    时间: 2011-5-16 08:59
没人能帮帮忙吗?
作者: stvent    时间: 2011-5-16 09:41
再顶!~
作者: stvent    时间: 2011-5-16 10:44
好静啊,没人吗?
作者: stvent    时间: 2011-5-16 12:43
麻烦帮个忙
作者: stvent    时间: 2011-5-16 13:31
真没有人帮看个?
作者: stvent    时间: 2011-5-16 14:44

怎么都没人呢!~
作者: todaynew    时间: 2011-5-16 15:10
本帖最后由 todaynew 于 2011-5-16 15:13 编辑
stvent 发表于 2011-5-15 14:51
详见如下图


SELECT 次.*, DSum("财务支付金额","次","合同编号='" & 次.合同编号 & "' and ID<=" & 次.ID) AS 累计支付, 主.合同金额-[累计支付] AS 未支付
FROM 主 INNER JOIN 次 ON 主.合同编号 = 次.合同编号;

[attach]45573[/attach]

作者: stvent    时间: 2011-5-16 15:31
todaynew 发表于 2011-5-16 15:10
SELECT 次.*, DSum("财务支付金额","次","合同编号='" & 次.合同编号 & "' and ID

首先,谢谢版主,但我的数据在外部,表1,怎么引用啊?
作者: stvent    时间: 2011-5-16 15:43
todaynew 发表于 2011-5-16 15:10
SELECT 次.*, DSum("财务支付金额","次","合同编号='" & 次.合同编号 & "' and ID

明了,要先dlookup到次表,再查询的!另外,我想知道,查询得到的“未支付”能否填入到次表内?
作者: todaynew    时间: 2011-5-16 16:01
stvent 发表于 2011-5-16 15:43
明了,要先dlookup到次表,再查询的!另外,我想知道,查询得到的“未支付”能否填入到次表内?

未支付金额本来就是一个计算结果,保留它到字段作甚?
作者: stvent    时间: 2011-5-16 16:17
todaynew 发表于 2011-5-16 16:01
未支付金额本来就是一个计算结果,保留它到字段作甚?

因为我在程序中要显示明细项,窗体结构如下的,窗体主表为主,子窗体中插入次表,主次以合同编号为连接,得到结果类似如下!如果不把查询后的结果填入到次表内,未支付金额就无法显示了!~


作者: stvent    时间: 2011-5-16 16:22
版主,对不起,原来查询表可以代替次表的!~我知道如何处理了
作者: stvent    时间: 2011-5-16 16:32
再一问,因为次表没有供应商名称,要通过主表,如何写个dlookup语句?如要找张三公司的2000元及支付凭证!~~~
作者: todaynew    时间: 2011-5-16 20:10
stvent 发表于 2011-5-16 16:32
再一问,因为次表没有供应商名称,要通过主表,如何写个dlookup语句?如要找张三公司的2000元及支付凭证!~ ...

我建的那个查询中不是已经将主表和次表链接起来了嘛?你可以把主表的字段拖入到字段栏中,想显示哪些就拖入那些。以下是显示主次表所有字段的查询:

SELECT 次.*, 主.*,DSum("财务支付金额","次","合同编号='" & 次.合同编号 & "' and ID<=" & 次.ID) AS 累计支付, 主.合同金额-[累计支付] AS 未支付
FROM 主 INNER JOIN 次 ON 主.合同编号 = 次.合同编号;


作者: stvent    时间: 2011-5-17 10:55
todaynew 发表于 2011-5-16 20:10
我建的那个查询中不是已经将主表和次表链接起来了嘛?你可以把主表的字段拖入到字段栏中,想显示哪些就拖 ...

版主,因我还需要一个导入外部表的功能,在论坛上查了一下,觉得如下语句简洁
DoCmd.RunSQL "INSERT INTO 次 SELECT * FROM [Sheet1$] IN 'E:\桌面\表1.xls'[EXCEL 8.0;]" where 条件
但如何要以限制导入次表中已有的数据,不再导入呢?意思是说,次表中之前已导入的数据,就不再导入了!~(我理解是,先判断表中要导入字段列是否有空,为空则执行导入语句,有没有更简单的?)

作者: hjb016    时间: 2011-5-17 11:08
我以前一般是打开记录集来一条一条判断的.
如果你Excel之前有导入过一部分的话,可以把内容分开在不同的Excel文档里.
不然如果你Excel里的记录修改过了,可能会导致数据不同步的问题.这个时候还是需要再更新以前导入过的记录.
作者: stvent    时间: 2011-5-17 11:17
难道只能存在监时表中,再进行不重复追加查询?
作者: hjb016    时间: 2011-5-17 11:19
那样也是一种方法.
作者: todaynew    时间: 2011-5-17 20:17
本帖最后由 todaynew 于 2011-5-17 20:25 编辑

问题在于何谓“已有的数据”?假设次表已存在的合同编号作为判断已有的数据,则可写为:
dim ssql as string
ssql="INSERT INTO 次 SELECT * FROM [Sheet1$] IN 'E:\桌面\表1.xls'[EXCEL 8.0;] "
ssql=ssql &  "where  合同编号 not in (select 合同编号 from 次表)"
DoCmd.RunSQL ssql

如果假设合同编号与付款日期存在作为已有的数据,则可写为:
dim ssql as string
ssql="INSERT INTO 次 SELECT * FROM [Sheet1$] IN 'E:\桌面\表1.xls'[EXCEL 8.0;] "
ssql=ssql &  "where  合同编号 & 付款日期 not in (select 合同编号 & 付款日期 from 次表)"
DoCmd.RunSQL ssql

更为复杂的判断则需要用EXISTS进行判断,具体方法可参见《求同存异》一文。

作者: stvent    时间: 2011-5-18 08:11
todaynew 发表于 2011-5-17 20:17
问题在于何谓“已有的数据”?假设次表已存在的合同编号作为判断已有的数据,则可写为:
dim ssql as stri ...

简单来说,因为要导入到数据库的外部表1,是不断类加记录的(其实表1为财务用的日记账,每天都会更新的),所以每次导入到数据库的表1数据,只导更新的且满足条件(供应商名称,数据库表中的申请支付金额为条件)!版主以上的代码应该已经满足要求了!~谢谢!~




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3