[Microsoft][ODBC Microsoft Access Driver] INSERT INTO 语句的语法错误。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Microsoft][ODBC Microsoft Access Driver] INSERT INTO 语句的语法错误。相关的知识,希望对你有一定的参考价值。

asp代码如下:
Set rs = Server.Createobject("Adodb.Recordset")
sql = "insert into tb_error (TIME,CODE,TEXT,FUNC,IP,TELL,INFO) values ('" & now & "','错误代码','错误文本','错误子程序','用户IP','用户描述','系统信息') ;"
rs.open sql,conn,1,3

输出的sql语句如下:
insert into tb_error (TIME,CODE,TEXT,FUNC,IP,TELL,INFO) values ('2014-5-15
0:44:46','错误代码','错误文本','错误子程序','用户IP','用户描述','系统信息') ;

错误信息如下:
Microsoft OLE DB Provider for ODBC Drivers '80040e14'
[Microsoft][ODBC Microsoft Access Driver] INSERT INTO 语句的语法错误。
\insert.asp, line 17

参考技术A 在代码中将字段名用中括号"[ ]"括起来即可。
insert into [tb_error] ([TIME],[CODE],[TEXT],[FUNC],[IP],[TELL],[INFO])
values ('2014-5-15 0:44:46','错误代码','错误文本','错误子程序','用户IP','用户描述','系统信息') ;

odbc_exec():SQL 错误:[Microsoft][ODBC Microsoft Access Driver] 参数太少。预期 1.,SQLExecDirect 中的 SQL 状态 0700

【中文标题】odbc_exec():SQL 错误:[Microsoft][ODBC Microsoft Access Driver] 参数太少。预期 1.,SQLExecDirect 中的 SQL 状态 07001【英文标题】:odbc_exec(): SQL error: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1., SQL state 07001 in SQLExecDirect 【发布时间】:2021-11-28 01:51:56 【问题描述】:

我在使用 MS Access 数据库的 PHP 中遇到了一些问题,当我在 PHP 中运行查询时显示错误

但是当我要回显“$query”变量并在 Microsoft Access 中运行语法时运行良好。

这是我的查询:

<?php

// setup database for your microsoft Access
// you can setup password in you microsoft Access

// this is a variable for your connection in odbc
// "zkConnection" is your ODBC Data Source Administrator
$conn = odbc_connect("zkConnection", "", "");

// create condition for testing conecction
if ($conn) 
    // echo "<br>Connection Established</br>";
 else 
    echo "Koneksi Gagal";


$from_date = date('d/m/Y', strtotime($_REQUEST['from_date'])) . ' 00:00:00';
$to_date = date('d/m/Y', strtotime($_REQUEST['to_date'])) . ' 23:59:59';

$query = "INSERT INTO CalculateData(USERID, Name, lastname, CardNo, DEPTID, DEPTNAME, SUPDEPTID, datein, timein, dateout, timeout) SELECT USERID, Name, lastname, CardNo, DEPTID, DEPTNAME, SUPDEPTID, Format(CHECKTIME, \"dd/mm/yyyy\") AS datein, FORMAT(MIN(CHECKTIME), 'h:m:s') AS timein, Format(CHECKTIME, \"dd/mm/yyyy\") AS dateout, FORMAT(MAX(CHECKTIME), 'h:m:s') AS timeout
FROM TransactionLog WHERE CHECKTIME BETWEEN #$from_date# AND #$to_date#
GROUP BY USERID, Name, lastname, CardNo, DEPTID, DEPTNAME, SUPDEPTID, CHECKTIME ";

if ($query) 
    //  echo $query;


$letsgo = odbc_exec($conn, $query);


if ($letsgo === false)

    die(print_r( odbc_error(), true));
else



header("location: index.php");


?>

这是我的表字段 CalculateData : CalculateData

这是我的表字段 TransactionLog : TransactionLog

【问题讨论】:

SQL Server MS Access - 请更正您的标签。 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。 【参考方案1】:

首先,您的 sql 命令的计算结果必须是这样的:

CHECKTIME BETWEEN #2021/09/28 00:00:00# AND #2021/09/29 23:59:59#

因此,尝试:

$from_date = date('Y/m/d', strtotime($_REQUEST['from_date'])) . ' 00:00:00';
$to_date = date('Y/m/d', strtotime($_REQUEST['to_date'])) . ' 23:59:59';

$query = "INSERT INTO CalculateData (USERID, [Name], lastname, CardNo, DEPTID, DEPTNAME, SUPDEPTID, datein, timein, dateout, timeout) SELECT USERID, [Name], lastname, CardNo, DEPTID, DEPTNAME, SUPDEPTID, Format(CHECKTIME, '\#yyyy/mm/dd\#') AS datein, FORMAT(MIN(CHECKTIME), '\#h:m:s\#') AS timein, Format(CHECKTIME, '\#yyyy/mm/dd\#') AS dateout, FORMAT(MAX(CHECKTIME), '\#h:m:s\#') AS timeout
FROM TransactionLog WHERE CHECKTIME BETWEEN #$from_date# AND #$to_date#
GROUP BY USERID, [Name], lastname, CardNo, DEPTID, DEPTNAME, SUPDEPTID, CHECKTIME";

你也可以试试这个更简单的方法:

SELECT USERID, [Name], lastname, CardNo, DEPTID, DEPTNAME, SUPDEPTID, DateValue(CHECKTIME) AS datein, TimeValue(MIN(CHECKTIME)) AS timein, DateValue(CHECKTIME) AS dateout, TimeValue(MAX(CHECKTIME)) AS timeout

【讨论】:

当我这样做时,结果显示此“odbc_exec(): SQL 错误: [Microsoft][ODBC Microsoft Access Driver] 查询表达式中的语法错误(缺少运算符)格式(CHECKTIME, \# dd/mm/yyyy\#)'., SQL 状态 37000 in SQLExecDirect in" 是的,格式表达式是字符串。请查看编辑后的答案。 谢谢 Gustav,一切顺利!!!

以上是关于[Microsoft][ODBC Microsoft Access Driver] INSERT INTO 语句的语法错误。的主要内容,如果未能解决你的问题,请参考以下文章

odbc_exec():SQL 错误:[Microsoft][ODBC Microsoft Access Driver] 参数太少。预期 1.,SQLExecDirect 中的 SQL 状态 0700

odbc_exec():SQL 错误:[Microsoft][ODBC Microsoft Access Driver] 查询表达式中的语法错误(缺少运算符)

PHP 警告:odbc_connect():SQL 错误:[Microsoft][ODBC Microsoft Access Driver]一般错误无法打开临时注册表项(易失性)

无法通过 odbc 连接到 Microsoft Azure 数据库

PYODBC ProgrammingError: ('42000', "[42000] [Microsoft][Pilote ODBC Microsoft Access]

[Microsoft][ODBC Driver Manager] 游标状态无效