Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.49 MB
Время: 0.007 c
3-91688
galina
2003-07-07 13:32
2003.07.28
работа с бд


6-91781
MegaVolt
2003-05-19 16:39
2003.07.28
Почему виснет функция WNetOpenEnum..WNetEnumResource..WNetCloseEn


3-91632
Andreyki
2003-07-04 14:45
2003.07.28
База данных Access на Dtlphi


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


3-91667
Skywalker
2003-07-04 17:25
2003.07.28
Почему не работает запрос?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский