![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно писать дату в запросе? [D5]
.alex © (2003-07-05 18:24:00)База MS Access, подключаюсь с помощью АДО. Пишу запрос:
sSQLQuery := "INSERT INTO table (ID, Name, Date) VALUES(111, ""Name"", 01/01/1983,)";
После его выполнения вылетает исключение - "синтаксическая ошибка в запросе" - это из-за того что не правильный синтаксис у даты. Как нужно писать правильно?
.alex (2003-07-06 12:16:00) [1]Спасибо, всё теперь понятно...
sniknik (2003-07-06 01:43:00) [2]ошибка небось
"Ошибка синтаксиса в инструкции INSERT INTO"
или
"Неопределенная функция "CONVERT" в выражении"
? (желательно приводить, а то может лечиш не то ...)
потому как Date зарезервированое слово а CONVERT функция из MSSQL (для Access актуально когда подключение к MSSQL через файл *.adp (в справке поэтому есть, минимум правда, полная в BOL), для подключения из дельфей через Jet не актуально совсем)
(вобще забавно как люди находят именно неработающие решения, в jet автоматическое преобразование и проходит большинство вариантов, тем не менее выбирают именно единственный нерабочий, странно, это не наезд, сам первым делом часто натыкался именно на нерабочие)
рабочие варианты (только для даты, с остальными типами вроде проблем нет)
sSQLQuery :=
"INSERT INTO table ([Date]) VALUES ("01.01.1987")";
"INSERT INTO table ([Date]) VALUES ("01/01/1987")";
"INSERT INTO table ([Date]) VALUES ("01,01,1987")";
"INSERT INTO table ([Date]) VALUES ("01-01-1987")";
"INSERT INTO table ([Date]) VALUES ("Январь 1, 1987")"; //для английской версии естественно исправить
"INSERT INTO table ([Date]) VALUES (31778)";
"INSERT INTO table ([Date]) VALUES (#01/01/1987#)"; //рекомендуемый способ после параметра (см хелп почему)
"INSERT INTO table ([Date]) VALUES (DateValue("Январь 1, 1987"))";
"INSERT INTO table ([Date]) VALUES (DateValue("1 1, 1987"))";
"INSERT INTO table ([Date]) VALUES (DateValue("1,1,1987"));
... также ранее использованые без DateValue строки (т.к. это одно и тоже просто сначала будет автоконвертация)
+ DateValue можно заменить на CDate или CVDate
и +
"INSERT INTO table ([Date]) VALUES (DateSerial(1987, 1, 1));
(боюсь что варианты далеко не все...)
p.s. совет, смени имя поля Date на чтонибудь другое. и еще автоконвертация в условиях не работает т.е. в WHERE нужно указывать тип явно. в главное, параметр для дат (первый предложенный вариант, зря только ты тип поменял при передаче и строку вместо даты передаеш) использовать более правильно.
.alex (2003-07-05 22:38:00) [3]Тогда я не понимаю как пользовать функцию CONVERT. Пишу:
sSQLQuery := "INSERT INTO table (ID, Name, Date) VALUES(69, ""asasasa"", CONVERT(SQL_DATETIME, ""01.01.1987""))";
Всё равно вылетает ошибка...
Anatoly Podgoretsky (2003-07-05 22:16:00) [4]См. sniknik © (05.07.03 21:28) и также Win+F
.alex (2003-07-05 22:09:00) [5]Я же не писал, что мне что-то непонятно, я же сказал - я не нашёл... Где он?
Anatoly Podgoretsky (2003-07-05 22:05:00) [6]В справке очень понятный пример, что именно в нем тебе непонятно?
.alex (2003-07-05 21:44:00) [7]Что-то я никак не найду, можно примерчик...
sniknik (2003-07-05 21:28:00) [8]справка находится в JETSQL40.CHM (логичный следуюшим вопросом будет где именно в MS OFFICE)
Anatoly Podgoretsky (2003-07-05 21:16:00) [9]Синтаксис описан в справке по MS OFFICE
.alex (2003-07-05 21:04:00) [10]А какой синтаксис у движка MS Access?
Anatoly Podgoretsky (2003-07-05 20:42:00) [11]Можно, но тогла пиши в соответствии с синтаксисом движка.
.alex (2003-07-05 20:36:00) [12]Спасибо, работает! А почему нельзя это как-нибудь по короче сделать т.е без Parameters.ParamByName(ххх), а просто одним SQL запросом?
Семен Сорокин (2003-07-05 20:14:00) [13]попробуй так:
procedure TForm1.Button1Click(Sender: TObject);
var
sSQLQuery: string;
begin
sSQLQuery := "INSERT INTO sobstvenik ([ID], [Name], [Date]) VALUES(:id, :name, :date)";
with ADOQuery1 do begin
Active := FALSE;
SQL.Clear();
SQL.Add(sSQLQuery);
Parameters.ParamByName("id").Value := 111;
Parameters.ParamByName("name").Value := "name";
Parameters.ParamByName("date").Value := StrToDate("11.05.1983");
ExecSQL();
end;
end;
.alex (2003-07-05 20:05:00) [14]Пишу вот так:
procedure TForm1.Button1Click(Sender: TObject);
var
sSQLQuery: string;
begin
sSQLQuery := "INSERT INTO sobstvenik (ID, Name, Date) VALUES(:id, :name, :date)";
with ADOQuery1 do begin
Active := FALSE;
SQL.Clear();
SQL.Add(sSQLQuery);
Parameters.ParamByName("id").Value := 111;
Parameters.ParamByName("name").Value := "name";
Parameters.ParamByName("date").Value := "11.05.1983";
ExecSQL();
end;
end;
Всё равно вылетает исключение... Что делать?
Семен Сорокин (2003-07-05 18:39:00) [15]sSQLQuery := "INSERT INTO table (ID, Name, Date) VALUES(:id, :name, :date)";
Parameters.ParamByName("id").Value := 111;
Parameters.ParamByName("name").Value := "name";
Parameters.ParamByName("date").Value := Date;