你应该使用参数化查询,像这样:
var adDate = 7;
var adVarWChar = 202;
var adParamInput = 1;
// test data
var showDashboard = "test_dshb";
var showKPI = "test_kpi";
var dateValueHere = new Date(2015, 10, 20); // November 20, 2015
var conn = new ActiveXObject("ADODB.Connection");
conn.Open(
"Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=C:\\Users\\Public\\Database1.accdb;"
);
var cmd = new ActiveXObject("ADODB.Command");
cmd.ActiveConnection = conn;
cmd.CommandText =
"SELECT * FROM tblname " +
"WHERE dshb_name=? AND monkpi_name=? AND mnth=?";
cmd.Parameters.Append(cmd.CreateParameter("?", adVarWChar, adParamInput, 255));
cmd.Parameters.Append(cmd.CreateParameter("?", adVarWChar, adParamInput, 255));
cmd.Parameters.Append(cmd.CreateParameter("?", adDate, adParamInput));
cmd.Parameters(0).Value = showDashboard;
cmd.Parameters(1).Value = showKPI;
cmd.Parameters(2).Value = dateValueHere.getVarDate();
var rst = cmd.Execute();
while (!rst.EOF) {
WScript.Echo(rst(0).Value);
rst.MoveNext();
}
rst.Close();
conn.Close();
如果你想要检索的结果整整一个月,那么你可以做一个方式,它会
var adDate = 7;
var adVarWChar = 202;
var adParamInput = 1;
// test data
var showDashboard = "test_dshb";
var showKPI = "test_kpi";
var dateValueHere = new Date(2015, 0, 1); // January 1, 2015
var conn = new ActiveXObject("ADODB.Connection");
conn.Open(
"Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=C:\\Users\\Public\\Database1.accdb;"
);
var cmd = new ActiveXObject("ADODB.Command");
cmd.ActiveConnection = conn;
cmd.CommandText =
"SELECT * FROM tblname " +
"WHERE dshb_name=? AND monkpi_name=? " +
"AND mnth>=? AND mnth<DateAdd('m', 1, ?)";
cmd.Parameters.Append(cmd.CreateParameter("?", adVarWChar, adParamInput, 255));
cmd.Parameters.Append(cmd.CreateParameter("?", adVarWChar, adParamInput, 255));
cmd.Parameters.Append(cmd.CreateParameter("?", adDate, adParamInput));
cmd.Parameters.Append(cmd.CreateParameter("?", adDate, adParamInput));
cmd.Parameters(0).Value = showDashboard;
cmd.Parameters(1).Value = showKPI;
cmd.Parameters(2).Value = dateValueHere.getVarDate();
cmd.Parameters(3).Value = dateValueHere.getVarDate();
var rst = cmd.Execute();
while (!rst.EOF) {
WScript.Echo(rst(0).Value);
rst.MoveNext();
}
rst.Close();
conn.Close();
你是积极的,查询时,您删除第二个及部分工作正常?在我看来,Access引擎会被'[tbl_1]'和'[tbl_2]'混淆,因为'tblname'是'FROM'子句中引用的唯一数据源。 – HansUp
此外,你必须格式化你的日期值为一个适当的字符串表达式,比如说:'mnth =#“+”2015/11/20“+”#“' – Gustav