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

Вниз

откат изменений в БД   Найти похожие ветки 

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

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


 
Dennis I. Komarov ©   (2014-03-31 14:44) [41]


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

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


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

согласен.

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

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

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


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

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

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


 
Dennis I. Komarov ©   (2014-03-31 16:39) [44]


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

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


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

Уважаемые мастера. Появилась такая идея: создаю виртуальную таблицу, туда копирую текущую информацию из 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))

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


 
Inovet ©   (2014-04-04 16:12) [46]

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

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


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

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


 
Styx   (2014-04-04 19:05) [48]


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

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


 
turbouser ©   (2014-04-04 22:49) [49]


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


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

8-()


 
turbouser ©   (2014-04-05 14:12) [50]


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

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


 
sniknik ©   (2014-04-05 17:30) [51]

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


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

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

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

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

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


 
Inovet ©   (2014-04-06 01:11) [53]

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

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

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

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

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

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

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


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


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

Number - это не Integer.


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


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

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


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

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


 
Dennis I. Komarov ©   (2014-04-08 10:53) [57]


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



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

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



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

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

Наверх




Память: 0.59 MB
Время: 0.044 c
2-1397985451
Andrey5
2014-04-20 13:17
2015.09.10
Проверка пароля


15-1415217828
Jeer
2014-11-05 23:03
2015.09.10
С днем военного разведчика!


15-1413815317
Юрий Зотов
2014-10-20 18:28
2015.09.10
Встроенный в Windows 7 программный RAID


4-1272049250
@!!ex
2010-04-23 23:00
2015.09.10
Как из service удалить куки для всех пользователей?


15-1421076624
Azize
2015-01-12 18:30
2015.09.10
Создание Word файла в Delphi