Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2011, 23:41   #1
doldb
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 12
Восклицание DateTimePicker в SQL запросе

Всем добрый день! Помогите пожалуйста новичку разобраться в данном трабле D )
Вообщем не могу не как засунуть данные из DateTimePicker в таблицу выдает всегда ошибку "Invalid use of keyword. Token: .2011") Line Number: 3."
Гуглил, гуглил не чего не нашёл. (

Вот код:
Код:
begin
Query1.Active:=false;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('INSERT INTO doldb');
Query1.SQL.Add('(Fio, Adr, Tel, Date_a)');
Query1.SQL.Add('VALUES("'+Edit1.Text +'", "'+Edit2.Text+'", "'+Edit3.Text+'", '+DateToStr(form2.DateTimePicker2.Date)+')');
Query1.ExecSQL;
Query1.SQL.Text:='SELECT*FROM doldb';
Query1.Open;
end;
Поле Date_a имеет тип Date


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 04.01.2011 в 23:54.
doldb вне форума Ответить с цитированием
Старый 04.01.2011, 23:47   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) переношу тему туда, где ей и место - "БД в Delphi"

2) используйте параметрический запрос.
Примеров на форуме - валом!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.01.2011, 23:52   #3
doldb
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) переношу тему туда, где ей и место - "БД в Delphi"

2) используйте параметрический запрос.
Примеров на форуме - валом!
Если возможно, ткните пожалуйста носом спасибо!
doldb вне форума Ответить с цитированием
Старый 05.01.2011, 00:41   #4
doldb
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 12
По умолчанию

Вот это параметрический запрос?

Код:
begin
Query1.Active:=false;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text:='INSERT INTO doldb (Fio, Adr, Tel, Date_a) VALUES ("'+edit1.Text+'", "'+edit2.Text+'", "'+edit3.Text+'", )';
Query1.ParamByName(data_a).Value:=DateTimePicker2.Date;
Query1.ExecSQL;
end;
А как быть с DateTimePicker в конце sql запрса? Чет не могу догнать.
doldb вне форума Ответить с цитированием
Старый 05.01.2011, 01:04   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

посмотрите вот по этим ссылкам:
http://www.programmersforum.ru/showp...83&postcount=3

http://www.programmersforum.ru/showp...98&postcount=3

http://www.programmersforum.ru/showthread.php?t=124533

параметры в запросе в Delphi обозначаются двоеточием.

В вашем случае будет примерно так:
Код:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('INSERT INTO doldb');
Query1.SQL.Add('(Fio, Adr, Tel, Date_a)');
Query1.SQL.Add('VALUES( :pFio, :pAdr, :pTelephon, :pDate )');
Query1.Parameters.ParamByName('pFio').Value := Edit1.Text;
Query1.Parameters.ParamByName('pAdr').Value := Edit2.Text;
Query1.Parameters.ParamByName('pTelephon').Value := Edit3.Text;
Query1.Parameters.ParamByName('pDate').Value := form2.DateTimePicker2.Date;
Query1.ExecSQL;

p.s. кстати, пара советов:
1) Query1.Active:=false;
Query1.Close;
эти две строчки синонимы. достаточно одно (любой. я бы оставил Query1.Close)

2) для запросов, изменющих данные и запросов, отображающих данные лучше использовать разные Query - при использовании одного и того же компонента многократно - выигрыш в памяти получается абсолютно копеечный, а вот если для каждого действия использовать свой компонент - то удобство сопровождения/отладки/наглядности кода резко повышается.
Да и эффективность от этого только улучшится...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.01.2011, 01:30   #6
doldb
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
посмотрите вот по этим ссылкам:
http://www.programmersforum.ru/showp...83&postcount=3

http://www.programmersforum.ru/showp...98&postcount=3

http://www.programmersforum.ru/showthread.php?t=124533

параметры в запросе в Delphi обозначаются двоеточием.

В вашем случае будет примерно так:
Код:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('INSERT INTO doldb');
Query1.SQL.Add('(Fio, Adr, Tel, Date_a)');
Query1.SQL.Add('VALUES( :pFio, :pAdr, :pTelephon, :pDate )');
Query1.Parameters.ParamByName('pFio').Value := Edit1.Text;
Query1.Parameters.ParamByName('pAdr').Value := Edit2.Text;
Query1.Parameters.ParamByName('pTelephon').Value := Edit3.Text;
Query1.Parameters.ParamByName('pDate').Value := form2.DateTimePicker2.Date;
Query1.ExecSQL;

p.s. кстати, пара советов:
1) Query1.Active:=false;
Query1.Close;
эти две строчки синонимы. достаточно одно (любой. я бы оставил Query1.Close)

2) для запросов, изменющих данные и запросов, отображающих данные лучше использовать разные Query - при использовании одного и того же компонента многократно - выигрыш в памяти получается абсолютно копеечный, а вот если для каждого действия использовать свой компонент - то удобство сопровождения/отладки/наглядности кода резко повышается.
Да и эффективность от этого только улучшится...
Спаибо, но у меня почему-то на Query1.Parameters ругается
[Error] Unit2.pas(58): Undeclared identifier: 'Parameters'
doldb вне форума Ответить с цитированием
Старый 05.01.2011, 01:37   #7
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Код:
Query1.Params
может.. точно не помню
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 05.01.2011, 02:35   #8
doldb
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 12
По умолчанию

Цитата:
Сообщение от XeruH Посмотреть сообщение
Код:
Query1.Params
может.. точно не помню
И так пробовал, все равно ошибка (( Мы могли бы с вами в icq пообщаться?
doldb вне форума Ответить с цитированием
Старый 05.01.2011, 02:38   #9
doldb
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 12
По умолчанию

Ошибка такого плана:
Type mismatch in expression
doldb вне форума Ответить с цитированием
Старый 05.01.2011, 03:01   #10
doldb
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 12
По умолчанию

Код:
Query1.Close;

Query1.SQL.Clear;

Query1.SQL.Add('INSERT INTO doldb');

Query1.SQL.Add('(Fio, Adr, Tel)');

Query1.SQL.Add('VALUES( :pFio, :pAdr, :pTelephon )');

Query1.Params.ParamByName('pFio').Value := Edit1.Text;

Query1.Params.ParamByName('pAdr').Value := Edit2.Text;

Query1.Params.ParamByName('pTelephon').Value :=StrToInt(Edit3.Text);

Query1.ExecSQL;
Query2.Refresh;

  end;
Вот уже вообще убрал дату все равно mismatch in expression ((
doldb вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DateTimePicker и SQL запрос SlavyanD БД в Delphi 5 25.11.2011 10:10
Ошибка в sql-запросе olgan SQL, базы данных 2 01.10.2010 14:52
if в запросе sql serres PHP 2 28.05.2010 12:32
Ошибка в SQL запросе program123 БД в Delphi 11 06.12.2009 17:12
Оператор IF в SQL-запросе eda SQL, базы данных 1 25.04.2009 18:41