Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.28;
Скачать: CL | DM;

Вниз

Как правильно писать дату в запросе?   Найти похожие ветки 

 
.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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.015 c
6-91799
studentt
2003-05-23 13:08
2003.07.28
Работа с TCustomWinSocket


6-91786
alt7
2003-05-21 18:06
2003.07.28
TiDAntiFreeze;


14-91879
Johnny Smith
2003-07-11 17:55
2003.07.28
Во сколько и кому рожать исходников Дельфи для микроконтроллеров?


1-91722
Денис
2003-07-14 13:10
2003.07.28
Делфи и MS Office


1-91729
drunya
2003-07-12 21:47
2003.07.28
Формулы в Word e из Delphi