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

Вниз

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

 
vegarulez ©   (2007-03-12 20:50) [0]

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

Вопрос таков, есть запрос в БД на 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" - не хотит двойные воспринимать и такие `...` тоже не хотит...

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


 
Knight ©   (2007-03-12 20:54) [1]

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


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

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


 
vegarulez ©   (2007-03-12 21:04) [3]

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

...
var
a:string;
...

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

Типа так???

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


 
Knight ©   (2007-03-12 21:07) [4]

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


 
vegarulez ©   (2007-03-12 21:15) [5]

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

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


 
vegarulez ©   (2007-03-12 21:27) [6]

Даже не...

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

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

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


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

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


 
Knight ©   (2007-03-12 21:40) [8]

20:30


 
vegarulez ©   (2007-03-12 21:41) [9]

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

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:44) [10]

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


 
vegarulez ©   (2007-03-12 21:44) [11]

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


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

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

:)))

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

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

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


 
Knight ©   (2007-03-12 21:48) [13]

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



Страницы: 1 вся ветка

Текущий архив: 2007.04.01;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.033 c
1-1170597043
TStas
2007-02-04 16:50
2007.04.01
Как программно скачать из инета файл в определенное место?


2-1173684582
smaller
2007-03-12 10:29
2007.04.01
Как определить длинну строки в пикселах ?


1-1170933217
Kolan
2007-02-08 14:13
2007.04.01
ApdComPort можно ли установить триггер по маске?


2-1173521890
ctudent
2007-03-10 13:18
2007.04.01
Банальный вопрос!


2-1173171404
Tar
2007-03-06 11:56
2007.04.01
процедура Randomize