2015-01-06 2 views
-2

SQL 문에서 어디에서 부울 결과가 나오는 함수를 사용하려고합니다.다음에 부울 함수 사용 (SQL)?

함수의 기능은 선택한 날짜가 두 개의 const 날짜 내에 있고 결과가 부울인지 확인하는 것입니다. SQL 구문에 문제가 있습니다.

Sqlstring = "Select count() from [Orders].[Date]" & _ 
where " & Function([Orders].[Date]) = True & "" 

SQL 문이 올바른지 확실하지 않습니다.

편집 여기에 코드입니다 :

public StartDate as String 
public EndDate As string 

Private Function GetOrdersNumbers() As Integer 
Dim rsData As ADODB.RecordSet 

Dim szConnect As String 
Dim szSQL As String 
Dim DataSource As String 

DataSource = "C:\Users\user\Desktop\db.mdb" 
szConnect = "Provider=Microsoft.Jet.OLEBD.4.0;" & _ 
"Data Source=" & DataSource & ";" & _ 
"user ID=admin;password=;" 

szSQL = "SELECT COUNT(*) FROM [Et_Journal Livraison Fournisseur] WHERE [Et_Journal Livraison Fournisseur].[Date] BETWEEN [@StartDate] And [@EndDate] " 
Set rsData = New ADODB.RecordSet 

rsData.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText 
If Not rsData.EOF Then 
Range("A01").CopyFromRecordset RecordSet 
GetOrdersNumbers = CInt(Range("A01").Value) 
End If 
End Function 
+3

두 번째 줄의 연결이 잘못되어 Function ([Orders]. [Date]) = True "인 경우''여야합니다. 그 전에 공간을 남겨 두십시오. 그렇지 않으면'[주문]이 있습니다. [날짜] where'' – LittleBobbyTables

+0

왜 함수를 사용해야합니까? –

답변

1

당신은 그럼에도 불구하고 ... 데이터베이스 엔진에 대한 정보를 제공하지 않았다

이 같은 쿼리를 사용하는 것이 좋을 것

:

SELECT COUNT(*) 
FROM Orders 
WHERE [Date] BETWEEN [@date1] AND [@date2] 


@ date1@ date1은 매개 변수입니다.

기능을 사용할 이유가 없습니다.

[편집]

는 설명 주셔서 감사합니다. 아래 코드를보십시오 :

Option Explicit 


Sub Test() 
Dim d1 As Date 
Dim d2 As Date 

d2 = DateSerial(2015, 1, 6) 
d1 = DateAdd("MM", -3, d2) 

MsgBox GetOrdersNumbers(d1, d2) 

End Sub 

Function GetOrdersNumbers(ByVal StartDate As Date, ByVal EndDate As Date) As Long 
Dim oConn As ADODB.Connection, oRst As ADODB.Recordset 
Dim sConnString As String, sQry As String 
Dim retVal As Long 

sConnString = "Provider=Microsoft.Jet.OLEBD.4.0;" & _ 
      "Data Source=C:\Users\user\Desktop\db.mdb;" & _ 
      "user ID=admin;password=;" 

Set oConn = New ADODB.Connection 
With oConn 
    .ConnectionString = sConnString 
    .Open 
End With 

sQry = "SELECT [Date] As MyDate" & vbCr & _ 
     "FROM [Et_Journal Livraison Fournisseur]" & vbCr & _ 
     "WHERE [Et_Journal Livraison Fournisseur].[Date] BETWEEN #" & StartDate & "# And #" & EndDate & "#" 

Set rsData = New ADODB.Recordset 

oRst.Open szSQL, oConn, adOpenStatic, adLockReadOnly 

retVal = oRst.RecordCount 

End If 

Exit_GetOrdersNumbers: 
    On Error Resume Next 
    oRst.Close 
    Set oRst = Nothing 
    oConn.Close 
    Set oConn = Nothing 
    GetOrdersNumbers = retVal 
    Exit Function 

Err_GetOrdersNumbers: 
    MsgBox Err.Description, vbExclamation, Err.Number 
    Resume Exit_GetOrdersNumbers 
End Function 
+1

[악마'BETWEEN' 사용에주의하십시오.] (http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common. aspx). – RubberDuck

+1

@PatrickHofman VBA를 사용하여 다양한 데이터베이스 엔진 호스트에 연결할 수 있습니다. – RubberDuck

+0

@PatrickHofman, VBA + ADODB를 사용하여 SQL 서버 데이터에 액세스 할 수 있습니다.) –