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

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

откат изменений в БД


Страницы:   1 2 3

Александр_2012 ©   (2014-03-21 15:02:00) 

Добрый день.
Подскажите как откатить изменения в  таблице БД после того, как отработан Post. Правильность заполнения основной таблицы БД проверяется с помощью SQL-запросов, прописанных в отдельной таблице. Но для того чтобы запрос отработал необходимо, чтобы данные были занесены в основную таблицу, т.е. метод Post отработал. Но если обнаружена ошибка в заполнении необходимо откатить изменения. Как это сделать?


Dennis I. Komarov   (2014-04-08 10:53:00) [1]


> Кщд   (08.04.14 08:39) [56]
> >Александр_2012   (06.04.14 00:06) [52]
> в чём проблема?



> Александр_2012   (04.04.14 18:37) [47]
> Проблема не только в том, что знаний не хватает (можно почитать,
>  поспрашивать в интернете), но и в том, что фирма, создавшая
> БД, ограничила права пользователей, что, наверное, правильно,
>  но затрудняет создание программ для работы с БД. Думаю,
>  что создать ХП прав-то и не хватит.

т.е. на "POST" права есть, а на "INSERT"/"SELECT" нет :) Но проблема действительно не только в том что знаний не хватает, но и в нежелании их получать - проще нечто монстрообразное родить


Кщд   (2014-04-08 08:39:00) [2]

>Александр_2012   (06.04.14 00:06) [52]
1. сделали insert в таблицу;
2. можете работать с этими данными с помощью SQL-запросов;
3. если проверка не прошла, делаете rollback, иначе - commit.
в чём проблема?


[ВладОшин]   (2014-04-06 20:25:00) [3]


> Александр_2012   (04.04.14 15:43) [45]
>
> Уважаемые мастера. Появилась такая идея: создаю виртуальную
> таблицу, туда копирую текущую информацию из DBEdit-ов, проверяю
> на корректность
, после этого сохраняю в основной таблице.
>

т.е. можешь написать функцию типа
if Func(dbedit1, dbedit2, .. dbeditN) then
 набор данных корректен else
 набор данных НЕ корректен
?


Плохиш   (2014-04-06 01:58:00) [4]


> для информации все поля типа integer имеют тип number, number(5),
>  number(10), number(15) и number(16)

Number - это не Integer.


Inovet   (2014-04-06 01:11:00) [5]

> [52] Александр_2012   (06.04.14 00:06)
> хотелось получить ответ на вопрос в чём моя ошибка при попытке
> использования виртуальной таблицы

В самом факте её использования. Нет прав ни на что, ладно, вычисляй выражения валидации введённых данных на сервере без ХП в запросах. Что там в Оракле есть для этого? Ну, допустим, что-то такое хранится в таблице с выражениями валидации

ВалидационнаяФункция1(:ЭтоМожноСделатьПараметром, :ЕщёОдинПараметр) +
ВалидационнаяФункция2(:ДляНеёПараметр) > 10 AND
:ТутЕщёОтдельныйПараметрВоткнём NOT IN (SELECT FROM НужнаяТаблица)

Ну в таком духе что-то. Теперь это выражение подставь в запрос

SELECT ТоВыражение, ЕщёОдноИзТакихЖе, ИЕщёСколькоНадо FROM НекаяСистемнаяТалицаОраклСпециальноДляТакихДел

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

Наверняка есть в Оракле и другие подобные способы.


Александр_2012   (2014-04-06 00:06:00) [6]

>Styx
Подробнее. Рассказываю. БД создавала сторонняя организация, которая до сих пор поддерживает её целостность. Но программы по корректировке основной таблицы, по получению статистики пишем сами. А другие сотрудники (инженеры и операторы) пользуются написанными, в том числе и мною, программами. Так что, я и пользователь и разработчик. И программа, которую я пытаюсь улучшить, написана более года назад и прекрасно работает, за исключением оперативной (до сохранения данных на диск) проверки правильности заполнения таблицы в соответствии с внешними условиями. В программу также встроен модуль, позволяющий просканировать таблицу за определённый период времени на соответствии внешним условиям. Чем сейчас и пользуемся. Но хотелось бы предупреждать запись недостоверных данных, а не отлавливать и исправлять потом.

>turbouser ©
А ведь в БД я как раз и не лезу (не считая записи в одну из таблиц, что разрешено). И, как я написал выше, рассматриваю вариант использования виртуальной таблицы, если удастся разобраться.

>sniknik ©
Не испугаются, т.к. прав что-либо сильно накосячить у меня не хватит, ну разве что стереть все данные из таблицы, но для этого существует резервный сервер и данные восстановят, естественно, надавав мне по шее.

Вообще-то, хотелось получить ответ на вопрос в чём моя ошибка при попытке использования виртуальной таблицы, хотя и про жизнь тоже готов поговорить.


sniknik   (2014-04-05 17:30:00) [7]

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


turbouser   (2014-04-05 14:12:00) [8]


> Александр_2012   (04.04.14 18:37) [47]

Мне вот интересно, много таких самоделкиных встречается, а вот зачем надо лезть в эту самую БД? Ведь если есть необходимость, то можно напрячь разработчиков. Если жадные или просто дорого для компании - то почему бы не попросить предоставить полный доступ с отказом от заключенных соглашений? А может у них есть что-то типа SDK? И ведь если все перечисленное невозможно, а сопровождение продолжается, то же это не просто так. И ведь если влезть в эту бд без необходимых технических (я уже не говорю про прикладные) навыков ,то можно все поломать..


turbouser   (2014-04-04 22:49:00) [9]


> Александр_2012   (04.04.14 18:37) [47]


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

8-()


Styx   (2014-04-04 19:05:00) [10]


> ограничила права пользователей

Так Вы - пользователь или разработчик? Рассказывайте тогда подробнее всю историю.


Александр_2012   (2014-04-04 18:37:00) [11]

Проблема не только в том, что знаний не хватает (можно почитать, поспрашивать в интернете), но и в том, что фирма, создавшая БД, ограничила права пользователей, что, наверное, правильно, но затрудняет создание программ для работы с БД. Думаю, что создать ХП прав-то и не хватит. А по договору они только занимаются администрированием БД, никаких изменений, дополнений в договоре не прописано. Поэтому и пытаюсь решить проблемы как могу.


Inovet   (2014-04-04 16:12:00) [12]

> [45] Александр_2012   (04.04.14 15:43)

Раз так надо проверять по хранимым условиям, почему не хочешь сделать это в хранимой(ых) процедуре(ах)? Почитай о них.


Александр_2012   (2014-04-04 15:43:00) [13]

Уважаемые мастера. Появилась такая идея: создаю виртуальную таблицу, туда копирую текущую информацию из DBEdit-ов, проверяю на корректность, после этого сохраняю в основной таблице.
Я представил себе что-то типа:

 with DataQ do
   for i:=0 to FieldCount-1 do
     if Fields[i].DataType=ftInteger then
       VTable.AddField(Fields[i].FieldName,
                                 Fields[i].DataType,
                                 Fields[i].DataSize);
   VTable.Append;
 for i:=0 to VTable.FieldCount-1 do
   for j:=0 to MainFormKart.ComponentCount-1 do
     begin
     Temp:=MainFormKart.Components[j];
     if (Temp is TDBEdit) and (VTable.Fields[i].FieldName=(Temp as TDBEdit).Field.FieldName) then
       VTable.Fields[i].Value:=(Temp as TDBEdit).Text;
     end;
   VTable.Post;

затем получаю условие проверки и подставляю его:

   VTable.Filter:=USL.FieldByName('usl').AsString;
   VTable.Filtered:=True;
   if VTable.RecordCount>0 then //значит есть ошибка.

Кажется должно работать, но затыкается на

     if Fields[i].DataType=ftInteger then
       VTable.AddField(Fields[i].FieldName,
                                 Fields[i].DataType,
                                 Fields[i].DataSize);
пишет, что неверный размер поля (для информации все поля типа integer имеют тип number, number(5), number(10), number(15) и number(16))

В чём проблема? Я наврал в коде? А показалось, что замысел неплох. Не замусоривается основная таблица, в виртуальной всего одна запись, поэтому все проверки должны проходить быстрее, после проверок память освобождается. Возможно, это всё глупо, уж сильно не ругайте.


Dennis I. Komarov   (2014-03-31 16:39:00) [14]


> равда будешь потом везде в where  and is_deleted = 'N' дописывать.
> .
>
> Например, в "желтой прорамме" заводишь документ, пиши что
> хочешь туда.
> Пока он не "проведен"  - он не считается.

Не будет. Он про SQL тоже ничего не знает. Почитай ветку...


clickmaker   (2014-03-31 15:21:00) [15]

> Пока он не "проведен"  - он не считается

это скорей что-то типа where IsApproved=1 - утвержден. В говноcms sharepoint тоже такая система используется при работе с документами.


ВладОшин   (2014-03-31 15:08:00) [16]

согласен.

Но если надо сейчас?
т.к. пересмотреть архитектуру/логику - дело не одного дня(недели/месяца).

А так делают.
Правда будешь потом везде в where  and is_deleted = 'N' дописывать..

Например, в "желтой прорамме" заводишь документ, пиши что хочешь туда.
Пока он не "проведен"  - он не считается.


Dennis I. Komarov   (2014-03-31 14:44:00) [17]


> ВладОшин ©   (31.03.14 13:34) [40]
> по сабжу - добавить поле deleted
> вставляем с признаком Удален, если корректно - убираем признак.
>

Жуть, чего говоришь. Он же весь хлам и плохой и хороший в БД тянет...


ВладОшин   (2014-03-31 13:34:00) [18]

по сабжу - добавить поле deleted
вставляем с признаком Удален, если корректно - убираем признак.


clickmaker   (2014-03-31 11:22:00) [19]

> Надо группировать различные второстепенные характеристики

PageControl рулит


Dennis I. Komarov   (2014-03-31 11:09:00) [20]


> Труп Васи Доброго ©   (31.03.14 10:12) [37]

Ага, ты как первый раз тут:


> Александр_2012   (24.03.14 15:14) [25]
> Dennis I. Komarov ©
> >И кому нужна такая визуализация? Информация должна отображаться
> когда необходима, а не чтоб было...
>
> Именно необходимы все поля для визуализации. Скажем подробная
> информация об объекте.


Страницы:   1 2 3

Наверх

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