MS Access INSERT INTO语句

Jam*_*mes 5 ms-access

我需要将表单数据从我的VB.NET应用程序插入Microsoft Access数据库.

"Syntax error in INSERT INTO statement"使用以下语法时出现错误:

INSERT INTO bs1 (teacher, subject, date, period)
VALUES ('test', 'test', 'test', 'test')
Run Code Online (Sandbox Code Playgroud)

我承认我习惯了MySQL类型的语法,对此问题的任何帮助都将不胜感激,谢谢.

Nat*_*ler 11

我相信这date是一个保守的词.您需要将保留字段名称封装在方括号中:

INSERT INTO bs1 (teacher, subject, [date], period) VALUES ('test', 'test', 'test', 'test')

编辑:有关Access 2002及更高版本中保留字的完整列表,请参阅以下文章:http: //support.microsoft.com/kb/286335

〜〜的md5sum


Fio*_*ala 5

在Access中,插入日期字段的文字值的分隔符是#,对于文本字段是'"和数字字段值没有分隔符,这表明:

INSERT INTO bs1 (teacher, subject, [date], period) 
VALUES ('test', 'test', #2009-12-31#, 0)
Run Code Online (Sandbox Code Playgroud)


one*_*hen 5

在 Access 数据库引擎 SQL 代码中,当需要指定文字值的类型为 时DATETIME,可以显式将该值转换为DATETIME或使用#字符来分隔该值。

使用函数进行显式转换CDATE()

INSERT INTO bs1 (teacher, subject, [date], period) 
   VALUES ('test', 'test', CDATE('2009-12-31 00:00:00'), 0);
Run Code Online (Sandbox Code Playgroud)

使用DATETIME文字值:

INSERT INTO bs1 (teacher, subject, [date], period) 
   VALUES ('test', 'test', #2009-12-31 00:00:00#, 0);
Run Code Online (Sandbox Code Playgroud)

INSERT将值传入 类型的列时DATETIME,如果未指定显式DATETIME值,引擎将隐式尝试将值强制为DATETIME。无法强制输入文字值“test” DATETIME,这似乎是语法错误的根源。

注意:以上内容均不适用于该NULL值。在 Access Database Engine SQL 中,无法将NULL值转换为显式类型,例如

SELECT CDATE(NULL)
Run Code Online (Sandbox Code Playgroud)

生成错误“无效使用 NULL”。因此,要指定NULL DATETIME文字,只需使用NULL关键字即可。

值得记住的是,Access 数据库引擎只有一种时态数据类型,即DATETIME(其同义词为DATETIMEDATETIMETIMESTAMP)。即使您没有显式指定时间元素,结果值仍将具有时间元素,尽管是隐式的。DATETIME因此,在使用文字值时最好始终明确并始终包含时间元素。