2016-06-28 3 views
0

したがって、ユーザーが変更できる開始日と終了日を持つExcelシートがあります。私は、ユーザーがその情報を取得するために自分のクエリを入力できるセルを持つ2番目のシートを持っています。これらのセルを参照できるように、startDateとenDateをクエリに割り当てました。私が抱えている問題は、Excelからクエリを抽出しているため、開始日を参照せずに終了するということです。これを解決するために何かできることはありますか?ここでは、クエリは次のとおりです。VBAを使用してSQLコードの日付を持つセルを参照する必要があります

select system_date where system_date >= ' " & startDate & "" and 
system_date <= "" & endDate & "# and action_id = 15 and log_desc not 
like '%svc_openlink_p%' order by system_date 

ここでは、コードは次のとおりです。

Sub Button1_Click() 
Dim dbConnectStr As String 
Dim dbConnectStr1 As String 
Dim objmyconn As ADODB.Connection 
Set objmyconn = New ADODB.Connection 
Dim recordCount As Long 
Dim sh1 As Worksheet, s2 As Worksheet 
Dim j As Long, N As Long, r1 As Range 
Dim dat As Variant 
Dim Rng As Range 
Dim startDate As String 
Dim endDate As String 
Dim dataName As String 
Dim passWord As String 
Dim serverName As String 
Dim qryN As String 




'code for the dates 
startDate = Format(Worksheets("TotalExtraction").Range("C6").Value2, "dd-mmm-yyyy") 
endDate = Format(Worksheets("TotalExtraction").Range("C8").Value2, "dd-mmm-yyyy") 

'code for assigment 

dataName = (Range("dataName").Value) 
passWord = (Range("password").Value) 
serverName = (Range("server").Value) 
qryN = (Range("Query").Text) 

dbConnectStr = "Provider=msdaora;User Id=" & Uname 
dbConnectStr1 = "Provider=msdaora;User Id='" & dataName & "';Data Source='" & serverName & "';Pwd='" & passWord & "'" 

    objmyconn.ConnectionString = dbConnectStr & dbConnectStr1 
    objmyconn.Properties("Prompt") = adPromptAlways 
    objmyconn.Open dbConnectStr 'ConnectionString' 
    'Declare variables' 

'Set objmyconn = New ADODB.Connection 
Set Sql = New ADODB.Command 
Set ds = New ADODB.Recordset 
Dim strsql As String 
Dim fld As ADODB.Field 
Dim i As Long 
i = 2 

Worksheets("IndividualUsers").Activate 
ActiveSheet.Range("B4:M30000").Clear 

     'Set and Execture SQL Command 
Set Sql.ActiveConnection = objmyconn 
Sql.CommandText = qryN 
MsgBox qryN 
Sql.CommandType = adCmdText 
Sql.Execute 
+0

ワークブックの名前付き範囲として開始日と終了日を設定できるため、ユーザーは単にクエリ文字列で参照できるだけですか? – Jordan

+0

「開始日を参照して終了しない」とはどういう意味ですか? – Kyle

+0

実際には、日付の書式に問題が生じることがあります。あなたは単に 'Replace'を使うことはできませんか?例えば'QryN = Replace(qryN、" startDate "、startDate)、" endDate "、endDate)' – Jordan

答えて

0

は、あなたが実行する前にVBAのパラメータ日付値をバインドするパラメータ化クエリを使用することを検討してください。これは、推奨されていない習慣であるselect文に値を渡すことを避けます。また、そうする際に、パラメータの前後に引用符を連結する必要はありません。

保存レンジちなみに

="SELECT system_date 
    FROM TableName 
    WHERE system_date BETWEEN ? AND ? 
    AND action_id = 15 
    AND log_desc NOT LIKE '%svc_openlink_p%' 
    ORDER BY system_date" 

VBAスクリプト(端部)

... 

'Set and Execture SQL Command 
With Sql 
    .ActiveConnection = objmyconn 
    .CommandType = adCmdText 
    .CommandText = qryN 

    .Parameters.Append cmd.CreateParameter("startDateParam", adDate, adParamInput) 
    .Parameters(0).Value = startDate 
    .Parameters.Append cmd.CreateParameter("endDateParam", adDate, adParamInput) 
    .Parameters(1).Value = endDate 

    .Execute 
End With 

(疑問符が含まれません)、に必ずクエリで、次のクエリでTableNameを指定し、接続文字列を確認します。最後に、日付形式がデータベースに適切に揃っていることを確認してください。通常、RDMSでは、形式はYYYY-MM-DDです。

関連する問題