2014-12-11 2 views
0

Excel 대시 보드에 연결되어있는 Access 데이터베이스가 있습니다. 작업을 수행하는 쿼리가 있지만 쿼리를 완료하기 전에 몇 가지 날짜를 조건으로 설정해야합니다. 대시 보드 내의 몇 가지 지점을 가리키는 매개 변수를 사용하여 쿼리가 올바르게 수행되는 데 필요한 날짜를 검색합니다.MS Query의 설정 매개 변수

액세스 필드의 날짜는 date/time으로 설정되고 대시 보드의 날짜도 date/time으로 설정됩니다. 어떤 이유로 쿼리를 실행하려고하면 [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression]이 표시됩니다. 앞에서 언급했듯이 가리키는 Excel 위치와 연결하는 액세스 필드는 모두 같은 유형으로 설정됩니다.

날짜를 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 문 다음에 설정 매개 변수가, 3 개 다음은 쿼리에 대한 내 코드입니다. HAVING 이후의 두 번째 매개 변수는 정상적으로 작동하지만 날짜가 필요한 세 개의 매개 변수는 오류를 발생시키는 매개 변수입니다. 데이터 유형이 동일하면이 문제의 원인은 무엇입니까?

+0

Excel에서 날짜가 꽤 이상하게 나올 수 있으며 MS Access에서 명확한 날짜가 필요합니다. 아마도 매개 변수를 제공하는 Excel 코드를 게시 할 수 있습니까? – Fionnuala

+0

추신 : 한동안 별칭을 살펴 보았으므로 SQL을 훨씬 쉽게 읽을 수 있습니다. – Fionnuala

+0

아쉽게도 이것은 MS Query가 디자인보기에서 설정 한 SQL 빌드입니다. 엑셀 코드에 관해서는, 나는 그것이 당신이 무엇을 의미하는지 완전히 확신하지 못합니다. 셀 위치 및 매개 변수가 가리키는 위치를 원하십니까? – Jcmoney1010

답변

0

excel 파일의 날짜를 날짜가 아닌 텍스트 필드로 변경하면 문제를 해결할 수 있습니다. 이로 인해 문제가 해결되었습니다.

+0

날짜를 텍스트로 사용하는 것은 좋지 않습니다. MS Access에서 필드 유형을 확인하십시오. 텍스트 데이트는 1 월 12 일 1 월 12 일로 이어질 수 있습니다. – Fionnuala

+0

나는 이것이 최선의 방법은 아닐 것이라고 생각했지만, 그것이 내가 찾은 유일한 방법이다. Access의 필드 유형이 모두 올바르게 설정되었으므로 Excel의 필드 유형이 변경 될 때까지 해당 유형이 올바르게 설정됩니다. 나는 더 나은 해결책을 찾지 만, 그 동안에는 더 나은 방법을 찾을 수있을 때까지이 길로 갈 것입니다. – Jcmoney1010