用count和2个变量填充新表

时间:2014-01-27 12:33:53

标签: ms-access ms-access-2007 access-vba

我正在尝试从查询(或多个)

获取一个填充计算的新表

我有一个包含以下列的表tomtom: TRIPID DRIVERNAME 开始时间 end_time(日期和时间) start_postext end_postext

我正在尝试使用以下列创建名为woperdayperengineer的表: ID DRIVERNAME end_time(每位工程师1天) woperday

我希望它为每个工程师创建一个记录,记录他到特定地点的旅行次数(可以在tomtom.end_postext中找到)。

我对此进行了查询:

SELECT Count(tomtom.tripid) AS NumberOfTripsToASite
FROM tomtom
WHERE tomtom.end_time BETWEEN #11/12/2013# AND #11/13/2013#
AND tomtom.drivername = "John Johnson"
AND 
(
tomtom.end_postext Like "*S0*" 
Or tomtom.end_postext Like "*S1*"
Or tomtom.end_postext Like "*S2*"
Or tomtom.end_postext Like "*S3*" 
Or tomtom.end_postext Like "*S4*" 
Or tomtom.end_postext Like "*S5*"
Or tomtom.end_postext Like "*S6*" 
Or tomtom.end_postext Like "*S7*" 
Or tomtom.end_postext Like "*S8*" 
Or tomtom.end_postext Like "*S9*" 
Or tomtom.end_postext Like "*K0*" 
Or tomtom.end_postext Like "*K1*" 
Or tomtom.end_postext Like "*K2*" 
Or tomtom.end_postext Like "*K3*" 
Or tomtom.end_postext Like "*K3*" 
Or tomtom.end_postext Like "*K4*" 
Or tomtom.end_postext Like "*K5*" 
Or tomtom.end_postext Like "*K6*" 
Or tomtom.end_postext Like "*K7*" 
Or tomtom.end_postext Like "*K8*" 
Or tomtom.end_postext Like "*K9*"
) 
And tomtom.end_postext Not Like "*Shurgard*";

结果显示了John Johnson在2013年12月11日所做的旅行次数。

我想要自动化,所以它会自动填充表woperdayperengineer。

我确实进行了查询以获取日期列表:

SELECT DISTINCT DateValue(tomtom.end_time)
FROM tomtom;

我确实提出了查询以获取驱动程序列表:

SELECT DISTINCT (tomtom.drivername)
FROM tomtom;

现在我如何将这些组合成一个自动填充表的查询或vba脚本?

我想构建一张支票,以确保它不会输入已经存在于woperdayperengineer表中的日期。

到目前为止我所拥有的实际上是VBA中的循环。我不知道从哪里开始。有人有提示或示例代码吗?

我正在使用Access 2007

在第一个2个响应之后更新:

非常感谢您的回复! 到目前为止,我有这个(基于你的两个代码的组合):

Woperdayperengineer_append_qry:

INSERT INTO woperdayperengineer
SELECT tomtom.drivername AS drivername,
Format (tomtom.end_time, "mm/dd/yyyy") AS end_time,
Count(tomtom.tripid) AS woperday
FROM tomtom
WHERE tomtom.end_time BETWEEN #11/12/2013# AND #11/13/2013#
AND tomtom.drivername = "John Johnson"
AND 
(
tomtom.end_postext Like "*S#*" 
Or tomtom.end_postext Like "*K#*" 
) 
And tomtom.end_postext Not Like "*Shurgard*"
GROUP BY
tomtom.drivername,
Format (tomtom.end_time, "mm/dd/yyyy");

Form3,按钮Command0:

Private Sub Command0_Click()
    Dim dbb As Database
    Set dbb = CurrentDb
    Private Sub ButtonName_Click()
    DoCmd.SetWarnings False
    CurrentDb.Execute "woperdayperengineer_append_qry"
    DoCmd.SetWarnings True
End Sub

当我按下按钮时没有任何反应。

此外,我认为在完全自动化之前还需要一步。 (我不介意它是否在启动时自动触发,或者你必须按一个按钮,当然全自动将是最好的)。日期部分(BETWEEN#11/12/2013#AND#11/13/2013#)应自动选择工程师工作的下一个日期。当工程师的所有旅行完成后,它应该选择下一位工程师(drivername)并生成他工作的所有日期的列表。

当代码完成后,表woperdayperengineer应如下所示:

drivername – end_time – woperday
John Johnson 11/12/2013 2
John Johnson 11/13/2013 3
John Johnson 11/14/2013 5
Jack Jackson 11/12/2013 1
Jack Jackson 11/13/2013 4
Jack Jackson 11/14/2013 5

tomtom数据看起来像这样(组成数据):

tripid - drivername - start_time - end_time - start_postext - end_postext (and more)
123144 - John Johnson - 11/12/2013 1:45:16 PM - 11/12/2013 2:45:16 PM - Kalverstreet, Amsterdam - Longstreet 69, Rotterdam, K0347
123145 - John Johnson - 11/12/2013 3:49:36 PM - 11/12/2013 4:49:36 PM - Coolsingel, Rotterdam, S2345 - Damstreet, Amsterdam, S3345
123146 - Jack Jackson - 11/12/2013 10:49:36 AM - 11/12/2013 1:49:37 PM - Herenstreet, Den Haag - Neudestreet, Utrecht, K8765

您提到“根据需要更改/删除日期/名称标准”,但我不知道如何。

再次感谢迄今为止的所有帮助。

1 个答案:

答案 0 :(得分:0)

未经验证,因为我没有你的桌子,但这应该有效:

(根据需要更改/删除日期/名称标准)

INSERT INTO woperdayperengineer
SELECT
Count(tomtom.tripid) AS ID,
tomtom.drivername AS Drivername,
Format (tomtom.end_time, "mm/dd/yyyy") AS End_time
FROM tomtom
WHERE tomtom.end_time BETWEEN #11/12/2013# AND #11/13/2013#
AND tomtom.drivername = "John Johnson"
AND 
(
tomtom.end_postext Like "*S0*" 
Or tomtom.end_postext Like "*S1*"
Or tomtom.end_postext Like "*S2*"
Or tomtom.end_postext Like "*S3*" 
Or tomtom.end_postext Like "*S4*" 
Or tomtom.end_postext Like "*S5*"
Or tomtom.end_postext Like "*S6*" 
Or tomtom.end_postext Like "*S7*" 
Or tomtom.end_postext Like "*S8*" 
Or tomtom.end_postext Like "*S9*" 
Or tomtom.end_postext Like "*K0*" 
Or tomtom.end_postext Like "*K1*" 
Or tomtom.end_postext Like "*K2*" 
Or tomtom.end_postext Like "*K3*" 
Or tomtom.end_postext Like "*K3*" 
Or tomtom.end_postext Like "*K4*" 
Or tomtom.end_postext Like "*K5*" 
Or tomtom.end_postext Like "*K6*" 
Or tomtom.end_postext Like "*K7*" 
Or tomtom.end_postext Like "*K8*" 
Or tomtom.end_postext Like "*K9*"
) 
And tomtom.end_postext Not Like "*Shurgard*"
GROUP BY
tomtom.drivername,
Format (tomtom.end_time, "mm/dd/yyyy");

将此保存为您喜欢的内容,请说woperdayperengineer_append_qry。将DrivernameEnd_time设为woperdayperengineer表的主键,这样您就不会有重复记录(即每个驱动程序每天有多个条目)。然后使用按钮创建一个表单并分配以下VBA(其中“ButtonName”将替换为您的按钮命名的任何内容):

Dim dbb As Database
Set dbb = CurrentDb
Private Sub ButtonName_Click()
DoCmd.SetWarnings False
CurrentDb.Execute "woperdayperengineer_append_qry"
DoCmd.SetWarnings True
End Sub

这将添加查询中的所有记录,而关闭警告将允许它仅添加新(唯一)记录而不会询问您。