Форум: "Базы";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
ВнизКак правильно писать дату в запросе? Найти похожие ветки
← →
.alex (2003-07-05 18:24) [0]База MS Access, подключаюсь с помощью АДО. Пишу запрос:
sSQLQuery := "INSERT INTO table (ID, Name, Date) VALUES(111, ""Name"", 01/01/1983,)";
После его выполнения вылетает исключение - "синтаксическая ошибка в запросе" - это из-за того что не правильный синтаксис у даты. Как нужно писать правильно?
← →
Семен Сорокин (2003-07-05 18:39) [1]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;
← →
.alex (2003-07-05 20:05) [2]Пишу вот так:
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 20:14) [3]попробуй так:
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:36) [4]Спасибо, работает! А почему нельзя это как-нибудь по короче сделать т.е без Parameters.ParamByName(ххх), а просто одним SQL запросом?
← →
Anatoly Podgoretsky (2003-07-05 20:42) [5]Можно, но тогла пиши в соответствии с синтаксисом движка.
← →
.alex (2003-07-05 21:04) [6]А какой синтаксис у движка MS Access?
← →
Anatoly Podgoretsky (2003-07-05 21:16) [7]Синтаксис описан в справке по MS OFFICE
← →
sniknik (2003-07-05 21:28) [8]справка находится в JETSQL40.CHM (логичный следуюшим вопросом будет где именно в MS OFFICE)
← →
.alex (2003-07-05 21:44) [9]Что-то я никак не найду, можно примерчик...
← →
Anatoly Podgoretsky (2003-07-05 22:05) [10]В справке очень понятный пример, что именно в нем тебе непонятно?
← →
.alex (2003-07-05 22:09) [11]Я же не писал, что мне что-то непонятно, я же сказал - я не нашёл... Где он?
← →
Anatoly Podgoretsky (2003-07-05 22:16) [12]См. sniknik © (05.07.03 21:28) и также Win+F
← →
.alex (2003-07-05 22:38) [13]Тогда я не понимаю как пользовать функцию CONVERT. Пишу:
sSQLQuery := "INSERT INTO table (ID, Name, Date) VALUES(69, ""asasasa"", CONVERT(SQL_DATETIME, ""01.01.1987""))";
Всё равно вылетает ошибка...
← →
sniknik (2003-07-06 01:43) [14]ошибка небось
"Ошибка синтаксиса в инструкции 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-06 12:16) [15]Спасибо, всё теперь понятно...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c