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

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

TIBDataSet - последовательность действий. [D7, IB/FB]


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

_Ламер_ ©   (2006-09-13 22:41:00) 

Привет
Сижу, изучаю сабж. В книжке написано  про InsertSQL ....RefreshSQL типа Tstrings. Это понятно. Есть также свойство StatementType. Т.е. мне надо выполнить запрос на выборку каких-то записей. Что я делаю. Применяю метод Close. В SelectSQL пишу свой запрос, в StatementType пишу SQLSelect. Open.
Почему так сложно? В ADO просто, как два байта. Зачем применять метод Edit и запрос писать в ModifySQL? Неужели нельзя было сделать как в TADODataSEt? Может можно лёгким движением руки сделать одновременно вставку, выборку, модификацию, удаление и обновление данных?

Что делает RefreshSQL? Аналог @@identity? В книжке написано мол выполняется запрос сразу после модификации записей и что это очень удобно. А что мне мешает этот запрос написать отдельно? И надо ли мне оно?

Может IBSQL хватит сполна?


Anatoly Podgoretsky   (2006-09-14 20:32:00) [21]

MsGuns ©   (14.09.06 14:16) [22]
Это с непривычки и старая любовь, а могло бы и наоборот, но у тебя всегда остается возможность перейти на другой сервер и моли бога, что бы эта возможность не реализовалась, а то тогда будет две старых любви.
У каждой системы есть свои особенности и применять старые представления к новой системы не совсем верно, это пахнет луддизмом, можно стать и маргиналом.
Надо просто освоить хорошо новую систему и работать по ее правилам.


ANB   (2006-09-14 17:32:00) [22]


> Хотя я так не делаю - избалован с детства. Не привык к дисциплине.

А зря.


> отсутствие возможности работы с более чем одним курсором
> одновременно

Ээээ. Что это значит ? Вложенные курсоры работают. А необходимости одновременно гулять по нескольким курсорам ни разу не встречал. Да такого и оракл не допускает.


MsGuns   (2006-09-14 16:06:00) [23]

>PEAKTOP ©   (14.09.06 15:48) [28]
>Во что ветку превратили ?

Так это.. по обыкновению.. в "потрепацца" ;))

Не все ж CREATE CURSOR псиать ;)


PEAKTOP   (2006-09-14 15:48:00) [24]

Человек только спросил, как устроен механизм TIBCustomDataSet. Ответить можно было парой фраз, и было бы понятно ... Во что ветку превратили ?


kaif   (2006-09-14 14:47:00) [25]

Молитва объединяет различные разрозненые действия, подчиняя их некоторой общей цели. Цель следует указать в названии хранимой процедуры.
Тогда взглянув очередной раз на программу можно будет легко вспомнить, чего здесь я (или не я) пытался добиться.
В этом есть определенный смысл.
Хотя я так не делаю - избалован с детства. Не привык к дисциплине.


Sergey13   (2006-09-14 14:45:00) [26]

> [23] kaif ©   (14.09.06 14:28)

8-)


kaif   (2006-09-14 14:44:00) [27]

Вера в хранимые процедуры сходна с верой в действенность молитвы.
Типа исход любого дела, разумеется, зависит от того, какэто дело сделать.
Однако молитва при этом не помешает.
:)


Sergey13   (2006-09-14 14:36:00) [28]

> [22] MsGuns ©   (14.09.06 14:16)

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


kaif   (2006-09-14 14:28:00) [29]

Мне знаете, что нравится в SQL-щиках?
(Я себя тоже к ним отношу)
Мы все исповедуем религии.
У каждого есть любимый сервер - он за него глотку порвет.
У каждого есть любимые компоненты прямого доступа - он их будет защищать.
:)
У нас есть даже свои божества.
Например, нормализация.
Даже если мы ее нарушаем, то при этом чтим.
:)
У нас масса религиозных направлений:
1. Аскетизм (я такой). Аскет SQL не признает никаких IBExpert, даже если юзает. Предпочитает для работы с метаданными иметь одно TMemo, в которое он напишет SQL-команду, даже если это ALTER TABLE и один IBSQL, который ее выполнит после нажатия одной единственной TButton. Аске не любит "текущих товарных остатков перед глазами у Даши", так как знает, что это не спасет Дашу от того, что ее транзакция все равно провалится при Commite, если Саша успеет закоммитить свою накладную раньше нее. И вообще аскет полагат, что не программисты должны решать проблему "последнего товара на складе", а те, кто планирует стратегии "минимальных товарных остатков" и банковские кредиты, проценты по которым явно ниже, чем прибыли, утерянные в результате того, что Даша так и не смогла продать закончившийся на складе товар.

2. Служение-юзеру-по-принципу-Мать-Тереза (я не такой). Здесь подход иной. Типа "клиент всегда прав". Если клиент сказал, что главная задача его фирмы - обеспечивать каждого покупателя мгновенно товаром и при этом не иметь ни одного лишнего товара на складе, так как это "замораживает капитал", то Мать Тереза кидается решать эту задачу программным путем. Тот есть вводит понятие "резервирование" и понятия типа "снять с резервирования и отдать Васе Пупкину с разрешения Главного Важного Менеджера", а также понятие "Отгрузить со склада то, что еще не успели оприходовать", и т.п. Заказчики очень ценят такие жертвы, так как им это позволяет спихивать свои проблемы в иное русло, чем то, где принято искать решения у бизнесменов. То есть если у меня нет денег, то не надо их искать в банке, а надо позвать программиста - пусть он создаст способ их тратить оптимальнее, в смысле меньше тратить.

3. Жрецы монстизма. Это категория элиты. Они часто не признают никого кроме ORACLE и культовых мистерий вокруг этого монстра. Их главный вопрос: "А что вы будете делать, если у вас грохнулась база с миллиардом записей? Я ее просто откачу на любую точку  - и нет проблем". Их окультовые обряды напоминают то, что происходило в храмах Юпитера (Зевса). Их главный принцип: "То, что позволено Зевсу, не позволено быку." Если у них что-то не работает из числа самых простых вещей (что даже у дибиэфщиков работало), они закатывают глаза и говорят "Придется останавливать системный сервис и обращаться к системному администратору. Для этого мне нужна от вас официальная бумага".

4. Еретики. Эти свой дибиэф или аксесс ни на что не поменяют, так как это у них всегда "работает" и они не знают (дословно) ни одной задачи, которую нельзя решить при помощи дибиэф и некривых рук. Апологеты Канонических Серверных Церквей взирают на таких с презрением или яростью, в зависимости от того, насколько еретик зарвался в своих заявлениях насчет Сущности Серверного Бога и его Квинтэссенции - Госпожи Нормализации Таблиц.

:)


MsGuns   (2006-09-14 14:16:00) [30]

>Sergey13 ©

Серег, у тебя, как мне показалось, чешется подискутировать на тему типа что первичнее, яйцо или курица ? Извини, не настроен. Ничего личного ;)

>atruhin ©   (14.09.06 13:54) [21]
>Ты эты мысь высказываешь уже в нескольких постах, но похоже кроме тебя никто не понял что ты имел ввиду?

Да я уже и сам понял, что никто не понял ;))
Наверное, так "ясно" высказал..
Приводить тут примеры на 5 экранов не считаю разумным.
Сейчас мне приходится вплотную работать с мсскл. ИБ вспоминаю как милого старого друга. В частности красивый suspend, чего напрочь нетути в T-SQL. Вообще, обилие в серверной логике тут и там всевозможных курсоров и временных таблиц просто убивает, никак не могу привыкнуть к тому, что полученную запросом запись не могу передать клиенту пока не вытащатся ВСЕ !!!
И еще дикая кривизна - отсутствие возможности работы с более чем одним курсором одновременно (отчего, собственно, и плодятся все эти временные таблицы). Опять же непривычно без генераторов.  И очень мутна (очевидно, от неопытности) технология управления транзакциями.
Зато сам T-SQL куда мощнее интербэйзовского. Чего стОят одни подзапросы и куча встроенных функций !

Однако, заболтался я, автору вообще не до нас.
Посему откланиваюсь и спасибо за интересную беседу ;)


atruhin   (2006-09-14 13:54:00) [31]

> [19] MsGuns ©   (14.09.06 13:46)

С ытим полностью согласен. Хоть многие и расхваливают книгу, я был разачарован, именно из-за описания FIB на пол книги, покупая ее я думал что покупаю книгу по серверу, а не по конкретным компонентам.

> Я говорю о невозможности из одного датасета управлять транзакцией,
> в контексте которой надо выполнить множественные изменения
> в РАЗНЫХ таблицах.

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


Sergey13   (2006-09-14 13:49:00) [32]

> [18] MsGuns ©   (14.09.06 13:29)
> Я говорю о невозможности из одного датасета управлять транзакцией,
> в контексте которой надо выполнить множественные изменения
> в РАЗНЫХ таблицах.
В IBX (мы говорим про них?) есть возможность привязать хоть каждый датасет к отдельной транзакции. Мне не шибко нравится эта "многоранзакционность" сессии, но если есть - этим можно пользоваться.

> Нет, не посторочно. Слышал о временных таблицах (в мсскл
> есть еще и курсоры) ?
> За одно выполнение ХП я могу вставить  сколь угодно записей
> в сколь угодно таблиц
С врменными таблицами и курсорами, и даже без них, я могу и с клиента без всяких ХП вставить сколько угодно записей хоть во все таблицы - и целостность БД не нарушится. При чем тут ХП?

> Маша не будет изучать - Маше нужен текущий остаток на счете,
> который изменился секунду назад в результате того, что
> Саша, Паша или Даша (а может, и все вместе) провели операцию
> на нем. Ты дурака валяешь абы поспорить или действительно
> не работал с такими системами ?

Это ты дурака валяешь, похоже. Пока Маша вбивает данные по своей операции те проворные подруги могут провести еще кучу документов. Т.е. на момент провоки машиного документа ситуация в БД будет отличаться от полученного ей секунду назад результата. И что?


MsGuns   (2006-09-14 13:46:00) [33]

>atruhin ©   (14.09.06 13:22) [17]
>Извени, но похоже ты не так много работал с Interbase/FibPlus, твои замечания некорректны.

Конечно, немного и давно.. И я вовсе не претендую на истину в последней.
"Против" пласа я высказался по двум причинам:

1. Мне претит стремление некоторых разработчиков решать максимум своихпроблем простым поиском "полезных" сторонних компонент. Хотя бы потому, что такие проекты следует сопровождать целой кучей инсталпакетов для возможного "воспроизводства" в будущем. Изобретательность в поиске обходных путей - вещь хорошая. Но она стимулирует банальную лень и тормозит самообразование и убивает творческий потенциал.
2. В целом замечательная книга "Мир интербэйз" сильно проигрывает из-за явной заангажированности этого самого пласа. Наслышан, что издавать подобную литературу себе дороже и возможно часто только при наличие соответствующих "споносоров", интересы которых должны быть представлены в книге. Но всему же есть мера ! Книга писана с ориентацией на разработчиков Делфи (по крайней мере мне попалась такая), так почему же были так цинично и беспардонно проигнорированы "родные" компоненты, из которых, вообще-то говоря, были сделаны и "пласовские" ?
Да и хэлпа по пласу нормального нет. Доходило до идиотизма: вопрос по компоненте пласа, а хэлп читаешь по подобной "родной". Находишь надцать отличий и гадаешь...

ЗЫ. Сказанное является моим личным мнением и не относится никаким образом к уважаемым участникам дискуссии.


MsGuns   (2006-09-14 13:29:00) [34]

Ошибся, т.к. писал "на лету"

Надо, конечно, так:

with DataSet do
  try
   Tag := 0;
   if Active then
     begin
       if (RecordCount>0) and LocRec then Tag = Fields[0].AsInteger;
       Close;
     end;
   Open;
   if (Tag>0) and LocRec then Locate(Fields[0].FieldName,Tag,[]);
  except
   result := false;  
  end;


>Sergey13 ©   (14.09.06 13:06) [15]
>С помощью транзакции, если мне память не изменяет.

Я говорю о невозможности из одного датасета управлять транзакцией, в контексте которой надо выполнить множественные изменения в РАЗНЫХ таблицах.

>В какую ХП ты инкапсулируешь ввод накладной из шапки и пары сотен позицый? Все равно вставлять будешь построчно, а не кучей.

Нет, не посторочно. Слышал о временных таблицах (в мсскл есть еще и курсоры) ?
За одно выполнение ХП я могу вставить  сколь угодно записей в сколь угодно таблиц

>Не груби.

Чего такой серьезный сегодня ?

>Если Маша будет глазами изучать плоды трудов Паши, Саши и Даши вместо того что бы работать - вот такую систему точно в топку.

Маша не будет изучать- Маше нужен текущий остаток на счете, который изменился секунду назад в результате того, что Саша, Паша или Даша (а может, и все вместе) провели операцию на нем. Ты дурака валяешь абы поспорить или действительно не работал с такими системами ?


atruhin   (2006-09-14 13:22:00) [35]

> IBX-ы хороши своей примитивностью. В них есть все, что необходимо.
>  Возможно, кому-то этого недостаточно.

Они не плохи, но в них нет поддержки FB 2, а сейчас это становится актуально.
Если возникла проблемма с FIBPlus, ответ разработчиков можно получить за 2-3 дня, у IBX как была проблемма с дисконнектом в IBX из комплекта Delphi 5, так и в Delphi 7 осталась. (То что есть масса неофициальных патчей я знаю).
Проблеммы с IBEvents, IBStoredProc - решенные давно в FIB, в IBX продолжаются.

То. MsGuns ©
Извени, но похоже ты не так много работал с Interbase/FibPlus, твои замечания некорректны.


MsGuns   (2006-09-14 13:18:00) [36]

>kaif ©   (14.09.06 12:22) [13]

Если код несколько "модернизировать" :

function ReOpenDataSet(DataSet: TDataSet; LocRec: boolean = false): boolean;
var
 OldCursor: TCUrsor;
begin
 result := true
 OldCursor := Screen.Cursor;
 Screen.Cursor :=  crHourGlass;  //  crSQLWait для SQL серверов
 DataSet.DisableControls;
 with DataSet do
   try
    Tag := 0;
    if (RecordCount>0) and LocRec then Tag = Fields[0].AsInteger;
    if Active then Close;
    Open;
    if (Tag>0) and LocRec then Locate(Fields[0].FieldName,Tag,[]);
   except
    result := false;  
   end;
 DataSet.EnableControls;
 Screen.Cursor := OldCursor;
end;

то получим универсальный метод для переоткрытия (открытия) любого нормального (в смысле первое поле - счетчик ;) ) датасета


Sergey13   (2006-09-14 13:06:00) [37]

> [12] MsGuns ©   (14.09.06 12:18)
> С помощью одного датасета ?
С помощью транзакции, если мне память не изменяет.

> В ХП можно инкапсулировать весь алгоритм пакета изменений
> и на клиенте запускать ее в контексте отдельной (если нужно)
> транзакции
В какую ХП ты инкапсулируешь ввод накладной из шапки и пары сотен позицый? Все равно вставлять будешь построчно, а не кучей.

> Кто о чем, о солдат о титьках !
> Серега, ну когда ты перестанишь все штаны в салоне мерять
> по своей заднице ?
Не груби.

> Если на компе у Маши не будет видно то, что ввела три секунды
> назад Паша, грош цена  такой "системе".
Если Маша будет глазами изучать плоды трудов Паши, Саши и Даши вместо того что бы работать - вот такую систему точно в топку.


Виталий Панасенко   (2006-09-14 12:45:00) [38]


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

Те же складские остаки: отдел поставок внес приход. Так что, отделу сбыта теперь с ними "низзя" работать ? Тут нужно смотрерть кАнкретнА каждый случай. А ФИБы мне очень нравятся. И высказываение
> IBX-ы хороши своей примитивностью. В них есть все, что необходимо.
>  Возможно, кому-то этого недостаточно.
> Я лично люблю минимализм и ясность.

несколько субьективно.  Так можно утверждать, что лучше писАть на ассемблере, чего ж нет ? А то, что FIBPlus действительно отличные компоненты - это правда. При этом они не теряют в производительности. При всех своих "наворотах". Их можно не использовать, никто не заставляет. И в тоже время, если "приспичит" не нужно изобретать велосипед.. Это тоже субьективное мнение . Мое, правда.:-)))


kaif   (2006-09-14 12:22:00) [39]

IBX-ы хороши своей примитивностью. В них есть все, что необходимо. Возможно, кому-то этого недостаточно.
Я лично люблю минимализм и ясность.
В конце концов полное переоткрытие набора с позиционированием на "прежнюю" запись не так уж сложно реализовать руками, а нужно это не так часто:

var
 id: integer;
begin
 with IBDataSet1 do
 begin
   id = FieldByName('ID').AsInteger;
   Close;
   Open;
   Locate('ID', id, []);
 end
end;

В любом случае если набор отображался в гриде и выходил за пределы видимости, такая пересветка вызовет не совсем "гладкий" эффект - координата выбранной в сетке запиаи может измениться.
Поэтому такого рода "пересветки" я применяю крайне редко, в основном во всякого рода "мониторах", в которых данные вообще никто не редактирует, а лишь наслаждается зрелищем. Недавно я такую вещь применил в сочетании с IBEvents для мониторинга прохождения народа в некоторой клинике. Вроде работает. Хотя IBEvents - капризный компонент. Лучше всего его засунуть в какой-нибудь глобальный DataModule - тогда еще есть надежда обойтись без возникающих иногда Access Violation при завершении работы приложения.

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


MsGuns   (2006-09-14 12:18:00) [40]

>Sergey13 ©   (14.09.06 11:37) [8]
>Это не совсем так. IBX позволяет это автоматизировать.

С помощью одного датасета ?

>Можно подумать ХП избавляет от работы с транзакциями.
>Не понимаю, как ХП (в данном контексте) может спасти отца русской демократии.

В ХП можно инкапсулировать весь алгоритм пакета изменений и на клиенте запускать ее в контексте отдельной (если нужно) транзакции

>Это нормально!!! Мне не надо проверять десяток соседей по офису - я работаю со "своими" данными. Если мои данные вступают в противоречие с другими, то сервер просто не должен пропустить мои изменения.

Кто о чем, о солдат о титьках !
Серега, ну когда ты перестанишь все штаны в салоне мерять по своей заднице ?
Ты слышал про складские остатки ? Или биллинговые системы ? Я уж вообще молчу про свехтребовательные к интерактивности разные "опердни".
Если на компе у Маши не будет видно то, что ввела три секунды назад Паша, грош цена  такой "системе".


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

Наверх

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