2012-09-04 1 views
2

vb.net 및 ms 액세스 2003을 백엔드로 사용하고 있습니다. 나는 아래와 같이 SQL 쿼리를 사용할 때 내 결과에 어떤 레코드도 얻지 못하고있다. 현재 날짜보다 낮은 날짜 (또는 이전 날짜)의 레코드를 찾으려고합니다. 예를 들어DATETIME SQL 문을 사용하는 경우 VB.Net에서 MS Access 데이터베이스의 형식 문제가 발생합니다.

Dim Sql, CurrentDate as String 

Dim TrDate as Date 

Dim DataVal As Integer 

TrDate=DateTime.Now 

CurrentDate=Format(TrDate, "dd/MM/yyyy hh:mm:ss tt") 

Sql="Select count(*) from Table1 where InvDate<=#" & CurrentDate & "#" 

IF DBConOpen()=True 

     cmdOledb.CommandText = sql 
     cmdOledb.CommandType = CommandType.Text 
     cmdOledb.Connection = ConOledb 
     DataVal = cmdOledb.ExecuteScalar 
     msgbox(DataVal) 

End IF 

내 현재 날짜가 .. 2012년 12월 9일 01/09/2012 또는 2012년 2월 9일 또는 경우 및 데이터베이스의 날짜는 01/09/2012 또는 2012년 2월 9일입니다 또는 .. 12/09/2012. 각각의 레코드 수를 얻어야합니다. 하지만이 경우에는 0 레코드를 얻습니다.

그러나 현재 날짜가 2012 년 1 월 9 일 또는 02/09/2012 또는 2012 년 12 월 9 일이고 데이터베이스의 날짜가 20/08/2012 또는 15/06/2012 또는 30 일인 경우 2012 년 5 월 5 일 올바른 레코드 수를 얻고 있습니다.

MS 액세스 테이블에 정의 된 날짜 형식은 '일반 날짜'입니다. 누구라도 잘못된 점을 발견 할 수 있습니까?

답변

1

당신은 사용해야

CurrentDate=Format(TrDate, "yyyy/MM/dd hh:mm:ss tt") 

액세스 명확한 날짜를 필요로한다.

시간 요소도 제거 할 수 있습니다.

1

쿼리를 제출하기 전에 Dot.Net에서 날짜/시간 값을 결정해야하는 경우가 아니면 Access db 엔진의 Now() 함수를 사용할 수 있습니다.

Sql="Select count(*) from Table1 where InvDate<=Now()" 

이러한 접근 방식은 서식 지정 및 구분 기호 문제를 방지합니다.

현재 시간없이 날짜 만 사용하려면 Now() 대신 Date()을 사용하십시오. (실제로는 Date()이 자정을 시간 구성 요소로 반환합니다.)