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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2014, 11:02   #11
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
а зачем они вообще нужны?
Я их использую в двух случаях.
Когда данные добавляются извне своего приложения (из другого приложения по интернету, например) или когда требуется сложные и долговременные вычисления, которые можно переложить на сервер СУБД, а приложение получает только результат.
Но манипулировать данными простой таблицы из ХП - увольте.
Теряется полный контроль над данными, да и отладка ХП довольно трудоемкое занятие.
Прик вне форума Ответить с цитированием
Старый 25.03.2014, 11:20   #12
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Теряется полный контроль над данными, да и отладка ХП довольно трудоемкое занятие.
это вы какуюто чушь сказали
хп для того и есть что задействовать всю мощь сервера и тем самым поиметь полный контроль
что касается отладки, так в нормальных субд есть дебагинг , это ли не облегчение?
а теперь вопрос на засыпку, для чего конторы тратят миллионы денег на навароты ввиде хп, совсем глупые?

а такие как MySQL, например, так только недавно добавили поддержку хп, тоже видать не подумали...

Последний раз редактировалось eval; 25.03.2014 в 11:28.
eval вне форума Ответить с цитированием
Старый 25.03.2014, 15:19   #13
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Цитата:
К чему, например, выкрутасы с обновлением в процедуре save_changes.
Когда достаточно просто переоткрыть датасет (для этого в АДО датасетах есть метод Requery или просто Close/Open; кстати, Refresh здесь бесполезен).
Ну, скажем так, Close/Open тут не прокатывал, (данные добавлялись, но не отображались) а значит и Requery скаорей всего тоже не прокатит. Но я попробую. Если прокатит, то обязательно удалю save_changes. Спасибо за открытие этого метода. Не знал.
На счет того, где держать partakers можно не думать. Это сейчас не так важно.
Более важно понять, почему в sqloledb вылетает Access Violation.
eval, Вы сказали, что в ошибке адрес функции. А Вы не знаете случаем, как сопоставить адрес функции её названию?
На счет хранимых процедур, они нужны т.к. приложение клиент-серверное.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 25.03.2014, 15:31   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

id_prj а почему оно стригнговое?
И все остальные параметры как стринговые задаются? С типами разберитесь
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.03.2014, 15:37   #15
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Аватар, при таком раскладе
Код:
  var id_prj:int64;
begin
....
   id_prj:=strtoint(ADOStoredProc1.Parameters.ParamValues['@mxm']);
 ADOStoredProc1.Parameters.ParamValues['@n_id_prj']:=id_prj;
   ADOStoredProc1.Parameters.ParamValues['@n_name']:=Grid_project.Fields[0].AsString;
   ADOStoredProc1.Parameters.ParamValues['@n_client']:=Grid_project.Fields[1].AsString;
   ADOStoredProc1.Parameters.ParamValues['@n_cost']:=Grid_project.Fields[2].AsCurrency;
   ADOStoredProc1.Parameters.ParamValues['@n_d_begin']:=Grid_project.Fields[3].AsDateTime;
   ADOStoredProc1.Parameters.ParamValues['@n_d_end']:=Grid_project.Fields[4].AsDateTime;
   ADOStoredProc1.Parameters.ParamValues['@n_manager']:=Grid_project.Fields[5].AsString;
   ADOStoredProc1.Parameters.ParamValues['@n_partakers']:=Grid_project.Fields[6].AsString;
Ошибка та же.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 25.03.2014, 16:05   #16
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Если при выполнении программы менять названия вызываемых процедур, то вылетает ошибка. А вот если на форму кинуть вторую StoredProc и настроить 2 хранимки так:
1) name = MAX_PROJECT
parameters.@mxm.direction = pdOutput
2) name = ADD_PROJ
то при этом коде все добавляется без ошибок:
Код:
 Grid_project.SelectedIndex:=0;
   ADOStoredProc1.ExecProc;
   id_prj:=ADOStoredProc1.Parameters.ParamValues['@mxm'];

   ADOStoredProc2.Parameters.ParamValues['@n_id_prj']:=id_prj;
   ADOStoredProc2.Parameters.ParamValues['@n_name']:=Grid_project.Fields[0].AsString;
   ADOStoredProc2.Parameters.ParamValues['@n_client']:=Grid_project.Fields[1].AsString;
   ADOStoredProc2.Parameters.ParamValues['@n_cost']:=Grid_project.Fields[2].AsCurrency;
   ADOStoredProc2.Parameters.ParamValues['@n_d_begin']:=Grid_project.Fields[3].AsDateTime;
   ADOStoredProc2.Parameters.ParamValues['@n_d_end']:=Grid_project.Fields[4].AsDateTime;
   ADOStoredProc2.Parameters.ParamValues['@n_manager']:=Grid_project.Fields[5].AsString;
   ADOStoredProc2.Parameters.ParamValues['@n_partakers']:=Grid_project.Fields[6].AsString;
   T_project.Cancel;
   ADOStoredProc2.ExecProc;
   save_changes(T_project,Grid_project);
Значит все дело в самом механизме выполнения StoredProc. А может быть такое, что после выполнения MAX_PROJECT оно не завершается, а я пытаюсь незавершенную процедуру изменить?
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 25.03.2014, 16:23   #17
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

это синхронное выполнение, никаких незавершенных нет
Цитата:
Вы сказали, что в ошибке адрес функции. А Вы не знаете случаем, как сопоставить адрес функции её названию?
ставите брейкпоинт, под дебагером делаете поиск по адресу

тут вот читайте как дебажить - http://alexander-bagel.blogspot.com/...er-1.html.html
eval вне форума Ответить с цитированием
Старый 25.03.2014, 16:59   #18
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

MAX_PROJECT возвращает максимальный id. Сильно не помешало бы его на 1 увеличивать при передаче в ADD_PROJ. Или в MAX_PROJECT возвращать увеличенный на 1
Цитата:
Значит все дело в самом механизме выполнения StoredProc
Ничего подобного. В кривых руках дело
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 25.03.2014 в 17:07.
Аватар вне форума Ответить с цитированием
Старый 25.03.2014, 17:24   #19
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

перво наперво неплохо проверить саму ХП
сильно сомневаюсь что будет работать даже просто
Цитата:
Код:
  INSERT INTO MY_PROJECT(ID_PR,name_pr,client,cost,date_begin,date_end,is_manager)
                 VALUES (@n_id_prj,@n_name,@n_client,@n_cost,@n_d_begin,@n_d_end,@n_manager) 
  INSERT INTO PARTAKERS(ID_PR,partakers)
                VALUES (@n_id_prj,@n_partakers)
учитывая что ID_PR везде PrimaryKey и видимо(но не очевидно) cascade Delete
2. второе уже сказал Аватар (вставка с уже имеющимся ключом)

лучше быть проще.
1.отдельная форма ввода. запись данных по кнопке
+ не нужен будет adotable.Insert (и Post заодно)
(и который (Insert) мы делали ДО startTransaction, а потом не могли получить обновления!!! Requery)

+ можно будет сначала проверить все ли данные внесли (заполнили все TEdit)
- надо будет нарисовать новую форму и в ней столько Tedit сколько есть полей (параметров в ХП).
вместо Table.Insert делаем form2.showModal;

2. сделать ID_PR в главной таблице as IDENTIFY
и ForeignKey (не Primary!!!) в дочерней
+ сможем избавиться от MAX_PROJECT

Код:
 insert into maintable ({ID_PR,  выкинуть ЭТО поле}  .....
select @idmain =IDENT_CURRENT('tablename') //SQL сам скажет какой код он присвоил!!!
insert into detail (ID_PR, .... ) values ( @idmain, .... )
программа — запись алгоритма на языке понятном транслятору

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

Цитата:
сильно сомневаюсь что будет работать даже просто
Работает, ради интереса смоделировал, только на 2000-ом и datetime вместо date и без ADOTable
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
добавление записи через adoquery kolyan2288 БД в Delphi 2 07.01.2013 22:18
Добавление записи в таблицу через AdoQuery natt23 БД в Delphi 2 30.10.2012 12:21
Добавление записи через форму Studbgc Microsoft Office Access 1 27.04.2012 15:36
Добавление записи через FIBDataSet Lokos БД в Delphi 13 04.05.2010 12:32
Добавление записи через TQuery [ошибка] DimOn4Ik БД в Delphi 10 10.04.2010 20:36