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.
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~
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)
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
.
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
.