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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2016, 16:50   #1
sergey_sergey
Пользователь
 
Регистрация: 09.02.2016
Сообщений: 14
По умолчанию Первое значение времени - 00:00:00

Доброго дня всем!
Помогите советом. Имею БД на MySQL 5.5. по кнопке в таблицу заносятся данные с Edit-ов формы. Про то, что хаотичным образом выскакивал exception, ругаясь на Parameters, спрашивать не буду - пока поставил в игнор. Но вот какая загвоздка: в двух Edit-ах сидят дата и время. Они в них прописываются при появлении формы. Дальше , когда жму записать, то первая запись (после запуска программы) заносится с нулевым значением времени. Следующие записи - всё хорошо. И так до выхода из проги. Дальше - также. Первая запись ноли, потом всё хорошо.
Цитата:
with dm.ADOQ_new_visov do
begin
sql.Clear;
sql.Text:='insert into visov (data_v,tel_client,np_pod)' +
' values (:fv1,:fv3,:fv4)';
Parameters.ParamByName('fv1').Value :=FormatDateTime('yyyy-mm-dd hh:nn:ss',strtodatetime(Edit_Data_v isova.Text+Edit_Time_visova.Text));
Поле Data_v в базе имеет тип DateTime.
Вот заполнение полей при показе формы
Цитата:
Edit_Data_visova.Text:=FormatDateTi me('dd.mm.yyyy', Now);
Edit_Time_visova.Text:=FormatDateTi me('hh:nn',Now);
Вот результат:
Изображения
Тип файла: png Безымянный.png (8.5 Кб, 74 просмотров)
sergey_sergey вне форума Ответить с цитированием
Старый 09.02.2016, 17:05   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Поле Data_v в базе имеет тип DateTime
А чего в параметр заносишь данные в строковом виде? Заноси в формате TDateTime без FormatDateTime, адо само разберется как его в базу передать. На то и параметризация, что бы не ломать голову над представлением данных. Да и дата со временем в Edit не фонтан, есть же DateTimePicker
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 09.02.2016 в 17:09.
Аватар вне форума Ответить с цитированием
Старый 09.02.2016, 17:18   #3
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

мне кажется или параметр стоит передавать до запроса??
а вообще сделал бы так то так

Код:
var 
fv1,fv3,fv4: string;
...........
fv1:=FormatDateTime('yyyy-mm-dd hh:nn:ss',strtodatetime(Edit_Data_v isova.Text+Edit_Time_visova.Text));
with dm.ADOQ_new_visov do
begin
sql.Clear;
sql.Text:='insert into visov (data_v,tel_client,np_pod)' +
' values ('+fv1+','+fv3+','+fv4+')';
Цитата:
Сообщение от Аватар Посмотреть сообщение
Да и дата со временем в Edit не фонтан, есть же DateTimePicker
если только для отображения какая разница??
Терпение!Дежурный экстрасенс скоро свяжется с вами!

Последний раз редактировалось Аватар; 09.02.2016 в 17:34.
Dvoishnik вне форума Ответить с цитированием
Старый 09.02.2016, 17:26   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
sql.Text:='insert into visov (data_v,tel_client,np_pod)' +
' values ('+fv1+','+fv3+','+fv4+')';
Какой смысл отказываться от параметризованного запроса?
Цитата:
если только для отображения какая разница??
А чего его из эдитов брать, если только для отображения? Извращения с преобразованиями?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.02.2016, 17:30   #5
sergey_sergey
Пользователь
 
Регистрация: 09.02.2016
Сообщений: 14
По умолчанию

Цитата:
мне кажется или параметр стоит передавать до запроса??
да пробовал... вроде как пишут, что после
тип параметров объявляю в свойствах ado. или нужно здесь?

но почему всё же нули сначала?
sergey_sergey вне форума Ответить с цитированием
Старый 09.02.2016, 17:34   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
но почему всё же нули сначала?
Да кто же знает какой код у тебя. Приведенные обрывки ни о чем не говорят, кроме как о не правильной передаче параметра в запрос
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.02.2016, 17:37   #7
sergey_sergey
Пользователь
 
Регистрация: 09.02.2016
Сообщений: 14
По умолчанию

Большое спасибо за ответы)
вот блок работает как часики:
Цитата:
with dm.ADOQ_new_smena do
begin
sql.Clear;
SQL.Text :='INSERT INTO smena (data_nach,date_okon,smena_zakonche na,svoboden,vnutr_nomer,fam_vod,im_ vod,ot_vod,dispetcher,probeg) VALUES (:fd1,:fd3,:fd5,true,:fd6,:fd7,:fd8 ,:fd9,:fd10,:fd11)';
Parameters.ParamByName('fd1').Value :=FormatDateTime('yyyy-mm-dd hh:nn:ss',strtodatetime(Edit_data_n ach_sm.Text+Edit_time_nach_sm.Text) );
if Edit_data_okon_sm.Text='' then
begin
Parameters.ParamByName('fd3').Value :=null;
end
else
begin
Parameters.ParamByName('fd3').Value :=FormatDateTime('yyyy-mm-dd hh:nn:ss',strtodatetime(Edit_data_o kon_sm.Text+' '+Edit_time_okon_sm.Text));
end;
Parameters.ParamByName('fd5').Value :=false;
Parameters.ParamByName('fd6').Value :=cb_car.Text;
Parameters.ParamByName('fd7').Value :=fam_sel_dr;
Parameters.ParamByName('fd8').Value :=im_sel_dr;
Parameters.ParamByName('fd9').Value :=ot_sel_dr;
Parameters.ParamByName('fd10').Valu e:=login;
Parameters.ParamByName('fd11').Valu e:=Edit_probeg.Text;
ExecSQL;
end;
вот проблемный(просто урезал на форум):
Цитата:
with dm.ADOQ_new_visov do
begin
sql.Clear;
sql.Text:='insert into visov (data_v,tel_client,np_pod,ulisa_pod ,dom_pod,korp_pod,podozr,zavershen, disp,kuda_ehat_1,kuda_ehat_2,kuda_e hat_3,kuda_ehat_4,nomer_avto,fam_vo d)' +
' values (:fv1,:fv3,:fv4,:fv5,:fv6,:fv7,fals e,false,:fv11,:fv12,:fv13,:fv14,:fv 15,:fv16,:fv17)';
Parameters.ParamByName('fv1').Value :=FormatDateTime('yyyy-mm-dd hh:nn:ss',strtodatetime(Edit_Data_v isova.Text+Edit_Time_visova.Text));
Parameters.ParamByName('fv3').Value :=Nom_tel.Text;
Parameters.ParamByName('fv4').Value :=Edit_Utv_np.Text;
Parameters.ParamByName('fv5').Value :=Edit_Utv_ul.Text;
Parameters.ParamByName('fv6').Value :=Edit_Utv_dom.Text;
Parameters.ParamByName('fv7').Value :=Edit_Utv_korp.Text;
Parameters.ParamByName('fv11').Valu e:=login;
Parameters.ParamByName('fv12').Valu e:=Edit_kuda_1.Text;
Parameters.ParamByName('fv13').Valu e:=Edit_kuda_2.Text;
Parameters.ParamByName('fv14').Valu e:=Edit_kuda_3.Text;
Parameters.ParamByName('fv15').Valu e:=Edit_kuda_4.Text;
Parameters.ParamByName('fv16').Valu e:=Edit_vibr_car.Text;
Parameters.ParamByName('fv17').Valu e:=fam_vod_to_table;
ExecSQL;
end;
sergey_sergey вне форума Ответить с цитированием
Старый 09.02.2016, 18:18   #8
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Какой смысл отказываться от параметризованного запроса?
а какой смысл в параметрах?
либо запрос, либо просто присваивать в поля.


Цитата:
Сообщение от Аватар Посмотреть сообщение
А чего его из эдитов брать, если только для отображения? Извращения с преобразованиями?
не прав каюсь.
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 09.02.2016, 19:22   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
а какой смысл в параметрах?
Выше написал же - адо само занимается приведением типов в соответствии с используемой СУБД. В основном даты-времени и с десятичной точкой. Да и в символьных строках само решит проблемы, например, с кавычками в тексте. По большому счету - оно мне надо вычислять в каком символьном виде СУБД воспримет дату или что ей нужно - десятичная точка или запятая? Или вдруг переход на другую СУБД - параметризованные запросы практически не нужно менять, иначе лазь по коду и переделывай
Цитата:
вот блок работает как часики
В чем проблема, если как часики. Если не как часики, то важно откуда и когда этот код вызывается.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 09.02.2016 в 19:27.
Аватар вне форума Ответить с цитированием
Старый 09.02.2016, 20:27   #10
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Выше написал же - адо само занимается приведением типов в соответствии с используемой СУБД. В основном даты-времени и с десятичной точкой. Да и в символьных строках само решит проблемы, например, с кавычками в тексте. По большому счету - оно мне надо вычислять в каком символьном виде СУБД воспримет дату или что ей нужно - десятичная точка или запятая? Или вдруг переход на другую СУБД - параметризованные запросы практически не нужно менять, иначе лазь по коду и переделывай
уже ради интереса спрашиваю. понимаю не по теме но все же.
чем:
Код:
table1field.Value:=значение;
table1.post;
хуже/лучше запроса с параметром?
Терпение!Дежурный экстрасенс скоро свяжется с вами!

Последний раз редактировалось Dvoishnik; 09.02.2016 в 20:29.
Dvoishnik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подсчет времени,как сохранить значение (дельфи) as_sati Помощь студентам 3 12.05.2013 18:17
противоположное значение момента времени =(( masluk Общие вопросы C/C++ 0 15.12.2012 09:22
цикл в классе не проходит.выбирает только первое значение Timmon Помощь студентам 4 20.10.2012 03:10
При экспорте базы в Excel выводит везде первое значение Aleksandr Общие вопросы Delphi 1 25.04.2011 12:07
выбрать первое и последнее значение в списке по условию simpleGo Microsoft Office Excel 4 06.12.2010 19:43