Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
ВладОшин ©   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.091 c
1-1331451118
renok
2012-03-11 11:31
2015.09.10
Сериализация PageControl а


2-1395098688
Вова
2014-03-18 03:24
2015.09.10
выпадающее меню в TCustomComponent


15-1415987381
Rouse_
2014-11-14 20:49
2015.09.10
Пара слов о кэшировании данных при чтении и смартпойнтерах


15-1415658031
Германн
2014-11-11 01:20
2015.09.10
Вот так умирают бэкапные HD


2-1395731174
Сергей
2014-03-25 11:06
2015.09.10
Определить тип данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский