2014-12-11 67 views
0

我有一个连接到Excel仪表板的Access数据库。我有一个执行任务的查询,但在完成查询之前需要将一些日期设置为条件。我使用参数指向仪表板中的一些位置,以检索查询正确执行所需的日期。MS Query中的问题设置参数

访问字段中的日期设置为date/time,并且仪表板中的日期也设置为date/time。出于某种原因,当我尝试运行查询时,它说[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression]。正如我前面提到的,它所指向的Excel位置以及它所连接的Access字段都被设置为相同的类型。

如果我将日期硬编码到SQL中,查询运行良好,在将它们键入到参数弹出窗口中时它也会正确运行。唯一不行的是当我尝试将它指向仪表板中的日期时,导致上面的错误消息。这里是我的查询代码:HAVING

SELECT tbl_Master_Phone.ID, 
    tbl_Master_Bill_Cycle_Date.Bill_Cycle_Date, 
    tbl_Master_ECPD.Client_ID, 
    tbl_Master_Client.Client_Name, 
    tbl_Master_ECPD.ECPD_ID, 
    tbl_Master_Account.Account_Number, 
    tbl_Master_Phone.Wireless_Number, 
    tbl_Master_Username.User_Name, 
    tbl_Master_Cost_Center.Cost_Center, 
    Max(tbl_Inventory.Bill_Cycle_Date) , 
    tbl_Master_Device.Device_Model, 
    tbl_Master_Device.Device_Type, 
    tbl_Inventory.Device_ID, 
    tbl_Inventory.SIM, 
    tbl_Inventory.Contract_Activate_Date, 
    tbl_Inventory.Contract_End_Date, 
    tbl_Inventory.Upgrade_Eligibility_Date 
    FROM tbl_Master_Username 
     INNER JOIN ((tbl_Master_Client 
     INNER JOIN ((tbl_Master_Account 
     INNER JOIN tbl_Master_ECPD 
     ON tbl_Master_Account.ECPD_ID = tbl_Master_ECPD.ID) 
     INNER JOIN (tbl_Master_Device 
     INNER JOIN (tbl_Master_Phone 
     INNER JOIN tbl_Inventory 
     ON tbl_Master_Phone.ID = tbl_Inventory.Wireless_Number) 
     ON tbl_Master_Device.ID = tbl_Inventory.Device_Model) 
     ON tbl_Master_Account.ID = tbl_Inventory.Account_Number) 
     ON tbl_Master_Client.ID = tbl_Master_ECPD.Client_ID) 
     INNER JOIN (tbl_Master_Bill_Cycle_Date 
     INNER JOIN (tbl_Master_Cost_Center 
     INNER JOIN tbl_Phone_Details 
     ON tbl_Master_Cost_Center.ID = tbl_Phone_Details.Cost_Center) 
     ON tbl_Master_Bill_Cycle_Date.Bill_Cycle_Date = tbl_Phone_Details.Bill_Cycle_Date) 
     ON tbl_Master_Phone.ID = tbl_Phone_Details.Wireless_Number) 
     ON tbl_Master_Username.ID = tbl_Phone_Details.Username 
Where ((tbl_Inventory.Bill_Cycle_Date<=?)) 
GROUP BY tbl_Master_Phone.ID, 
     tbl_Master_Bill_Cycle_Date.Bill_Cycle_Date, 
     tbl_Master_ECPD.Client_ID, 
     tbl_Master_Client.Client_Name, 
     tbl_Master_ECPD.ECPD_ID, 
     tbl_Master_Account.Account_Number, 
     tbl_Master_Phone.Wireless_Number, 
     tbl_Master_Username.User_Name, 
     tbl_Master_Cost_Center.Cost_Center, 
     tbl_Master_Device.Device_Model, 
     tbl_Master_Device.Device_Type, 
     tbl_Inventory.Device_ID, 
     tbl_Inventory.SIM, 
     tbl_Inventory.Contract_Activate_Date, 
     tbl_Inventory.Contract_End_Date, 
     tbl_Inventory.Upgrade_Eligibility_Date 
HAVING ((tbl_Master_Bill_Cycle_Date.Bill_Cycle_Date>=?) 
     AND (tbl_Master_ECPD.Client_ID=?) 
     AND (tbl_Master_Bill_Cycle_Date.Bill_Cycle_Date<=?)); 

正如你所看到的,有设立WHERE语句之后正确的参数,还有三个。 HAVING后的第二个参数工作正常,但需要日期的三个参数是引发错误的参数。如果数据类型相同,可能会导致此问题?

+0

Excel可以得到相当奇怪的日期和MS Access要求明确的日期,也许你可以张贴提供参数的Excel代码? – Fionnuala 2014-12-11 03:25:22

+0

PS在某些时候会查看别名,它们使SQL更具可读性。 – Fionnuala 2014-12-11 03:26:29

+0

不幸的是,这是MS Query在设计视图中设置后构建的SQL。至于Excel代码,我不完全确定你的意思。你想要的单元格的位置,以及参数指向的位置? – Jcmoney1010 2014-12-11 03:33:03

回答

0

看起来问题可以通过将excel文件中的日期更改为文本字段而不是日期来解决。这解决了这个问题。

+0

将日期作为文本并不是一个好主意。检查MS Access中的字段类型。文本日期可能导致1月12日为12月1日。 – Fionnuala 2014-12-11 04:16:20

+0

我想这不会是最好的方法,但它是我发现的唯一的作品。在Access中的字段类型都设置正确,所以在Excel中的字段类型(直到我改变它们)。我愿意提供更好的解决方案,但同时,我会走这条路,直到找到更好的方式。 – Jcmoney1010 2014-12-11 13:02:54