Inserir no extracto de acesso do MS

Preciso de inserir os dados do meu formulário. VB.NET aplicação a uma base de dados Microsoft Access.

estou a obter o erro "Syntax error in INSERT INTO statement" ao usar a seguinte sintaxe:

INSERT INTO bs1 (teacher, subject, date, period)
VALUES ('test', 'test', 'test', 'test')
Admito que estou habituado à sintaxe do tipo MySQL, qualquer ajuda nesta matéria seria muito apreciada, obrigado.

 5
Author: Tony, 2009-11-23

3 answers

Eu acredito {[[0]} é uma palavra reservada. Precisa de encapsular os nomes dos Campos reservados entre parêntesis rectos:

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

Editar: veja o seguinte artigo para uma lista completa de palavras reservadas no Access 2002 e maior: http://support.microsoft.com/kb/286335

~md5sum~

 10
Author: Nathan Wheeler, 2009-11-23 14:41:54

No acesso, o delimitador de valores literais inseridos nos campos de data é #, para os campos de texto é ' ou " e os valores dos campos numéricos não têm um delimitador, o que sugere:

INSERT INTO bs1 (teacher, subject, [date], period) 
VALUES ('test', 'test', #2009-12-31#, 0)
 5
Author: Fionnuala, 2018-03-23 15:01:18

No Access Database Engine SQL code, quando tiver de indicar que um valor literal é do tipo DATETIME, poderá escolher explicitamente o valor para DATETIME ou usar # caracteres para delimitar o valor.

Usando um elenco explícito usando a função CDATE():

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

Usando um valor literal DATETIME:

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

Quando INSERT introduz um valor numa coluna do tipo DATETIME, Se não indicar um valor DATETIME explícito, o motor irá implicitamente tentar coagir um valor para DATETIME. O valor literal 'test' não pode ser coagido a digitar DATETIME e esta parece ser a fonte do seu erro de sintaxe.

Nota: nenhuma das disposições acima se aplica ao valor NULL. No Access Database Engine SQL não há forma de converter o valor NULL para um tipo explícito, por exemplo

SELECT CDATE(NULL)

Gera um erro, "uso inválido De NULL". Por conseguinte, para especificar um NULL DATETIME literal, basta usar a palavra-chave NULL.

Vale a pena lembrar que o motor do Access Database tem mas um tipo de dados temporais, sendo DATETIME (seus sinônimos são DATE, TIME, DATETIME, e TIMESTAMP). Mesmo que você não especifique explicitamente um elemento de tempo, o valor resultante ainda terá um elemento de tempo, embora implícito. Portanto, é melhor ser sempre explícito e sempre incluir o elemento tempo ao usar valores literais DATETIME.
 3
Author: onedaywhen, 2009-11-24 10:41:50