Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему не проходит вот такой запрос на update...(MySQL, datetime) [D6, XP]


vegarulez ©   (2007-03-12 20:50:00) 

Првет Всем Мастерам!

Вопрос таков, есть запрос в БД на insert  и на update одной и той же группы полей в бд (Использую MySQL + dbExpress).
insert проходит нормально. А update ругается когда поле, с форматом datetime пытаюсь проапдейтить, на формат записываемого значения.


...
var
x:integer;
...

Begin
 Datamodule2.SQLQuery2.SQL.Add('update `Groups` set `product`="'+ trim(E_group_product.Text) +',`edate`="'+ FormatDateTime('YYYY-MM-DD',Group_EDate.Date) +'",`bdate`="'+ FormatDateTime('YYYY-MM-DD',Group_BDate.Date) +'",`datetime`="'+ FormatDateTime('YYYY-MM-DD hh:mm:ss',TDateTime(Now)) +'" where `id`='+ L_Group_Id.Caption +'');
 Datamodule2.SQLQuery2.ExecSQL();
 Datamodule2.SQLQuery2.SQL.Clear;
 Datamodule2.SQLConnection2.Close;
 Datamodule2.ClientDataSet8.Refresh;
End;

Begin
 Datamodule2.SQLQuery2.SQL.Add('insert into `Groups` (`id`,`product`,`edate`,`bdate`,`datetime`) VALUES(' + L_Group_Id.caption + ',"'+ trim(E_group_product.Text) +'","'+ FormatDateTime('YYYY-MM-DD',Group_EDate.Date) +'","'+ FormatDateTime('YYYY-MM-DD',Group_BDate.Date) +'","'+ FormatDateTime('YYYY-MM-DD hh:mm:ss',TDateTime(Now)) +'")');
 Datamodule2.SQLQuery2.ExecSQL();
 Datamodule2.SQLQuery2.SQL.Clear;
 Datamodule2.SQLConnection2.Close;
 Datamodule2.ClientDataSet8.Refresh;
End;


Ошибка при апдейте следующего характера:

"No value for parameter '37:53" where id=1"....

А кажется понял почему выдаётся ошибка (пока писал прозрел ;) )....

Дело в том что при апдейте в формате даты стоит символ '

там получается   'update... '+ formatedate('... тут получается запрос разорвался...хотя смне его тут разрыватьт не надо... ,'TDateTime(Now))+'...

Теперь, тогда перефразирую первоначальный вопрос:
Каким символом маскировать в в данном запросе, в нутри запроса, символ ' чтобы это был не символ начала\окончания строки, а символ используемой внутри переменной? Подскажите...

З.Ы. Сечас пока писал попробовал "YYYY-MM-DD hh:mm:ss" - не хотит двойные воспринимать и такие `...` тоже не хотит...

З.Ы.Ы. Странно... а инзерт, так пашет, хотя не должен...
фантастика просто :)))


vegarulez   (2007-03-12 21:48:00) [1]

БЛИН!!!
ТОЧНО мать его за ногу... не закрыта... фтом то и вся штука была...

:)))

Закрыл - заработало :)

млин уже совсем ф шары долблюсь.... на 10 раз проверил...  :))) прежде чем постить...

Не... надо идти спать ложится... час ночи даёт о себе знать...
Спасибо.


Knight   (2007-03-12 21:48:00) [2]

Вот потому и параметры... никаких кавычек вообще :)


Knight   (2007-03-12 21:44:00) [3]

тут кавычка закрыта?
product="'+ trim(E_group_product.Text) +',


vegarulez   (2007-03-12 21:44:00) [4]

Так а почкему тогда hh проходит, а после двоеточия  ему mm:ss не нравятся??? Может просто двоеточие как то не так воспринимается???
Ничего не понимаю...


vegarulez   (2007-03-12 21:41:00) [5]

чтоб уж быть верным, вот такой использую... в предыдущем посте он не правильный.

Datamodule2.SQLQuery2.SQL.Add('update `Groups` set `product`="'+ trim(E_group_product.Text) +',`edate`="'+ FormatDateTime(ad,Group_EDate.Date) +'",`bdate`="'+ FormatDateTime(ad,Group_BDate.Date) +'",`datetime`="'+ FormatDateTime(adt,TDateTime(Now)) +'" where `id`='+ str_int +'');


Knight   (2007-03-12 21:40:00) [6]

20:30


Knight   (2007-03-12 21:39:00) [7]

А мож он :20:30 .. берёт как параметр 38:20 ?


vegarulez   (2007-03-12 21:27:00) [8]

Даже не...

ошибка даже при использовании переменной таже выдаётся...
что то не понимаю я тогжа в чём дело....

ad:='YYYY-MM-DD';
adt:='YYYY-MM-DD hh:mm:ss';

 Datamodule2.SQLQuery2.SQL.Add('update `Groups` set `product`="'+ trim(E_group_product.Text) +',`edate`="'+ FormatDateTime(ad,Group_EDate.Date) +'",`bdate`="'+ FormatDateTime(ad,Group_BDate.Date) +'",`datetime`="'+ FormatDateTime(adt,TDateTime(Now)) +'" where `id`='1'');

Всё равно ошибка таже появляется...

"No value for parameter '20:03" where id=1"....

*TDateTime(NOW)=00:20:03

Подскажите где тут я ошибся?


vegarulez   (2007-03-12 21:15:00) [9]

не...
ты знаешь ни одной не двумя чот не получается...

понимаю что запутаюсь - в этом с тобой поностью согласен. Переменныые использовать куда лучше.
просто охота уже ради интереса узнать, как правильно замаскировать... чтоб знать так сказать... где собака порылась.


Knight   (2007-03-12 21:07:00) [10]

Ага. А кавычка маскируется такой-же кавычкой... или двумя... короче ты потом в них запутаешся... дешевле поставить : ввести параметр и присвоить значения им... :)


vegarulez   (2007-03-12 21:04:00) [11]

Это типа так? :

...
var
a:string;
...

a:='YYYY-MM-DD hh:mm:ss';
...
... FormatDateTime(a,...
...

Типа так???

Мысль понята...
но всё же до сути интересно докапаться... как всё же маскировать?
Или может не маскируя можно другие символы использовать...  - служебные, для обозначения этого же символа '


Knight   (2007-03-12 20:56:00) [12]

.. кстати, с ними и запросы читабельнее... :)


Knight   (2007-03-12 20:54:00) [13]

Из моего опыта... не знаю как Мастера... но самое лучшее юзать параметры, тогда с типами, кавычками и прочим никаких проблем.


Наверх

Титульная страница Поиск, карта сайта Написать письмо