![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TIBDataSet - последовательность действий. [D7, IB/FB]
_Ламер_ © (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 позволяет это автоматизировать.
С помощью одного датасета ?
>Можно подумать ХП избавляет от работы с транзакциями.
>Не понимаю, как ХП (в данном контексте) может спасти отца русской демократии.
В ХП можно инкапсулировать весь алгоритм пакета изменений и на клиенте запускать ее в контексте отдельной (если нужно) транзакции
>Это нормально!!! Мне не надо проверять десяток соседей по офису - я работаю со "своими" данными. Если мои данные вступают в противоречие с другими, то сервер просто не должен пропустить мои изменения.
Кто о чем, о солдат о титьках !
Серега, ну когда ты перестанишь все штаны в салоне мерять по своей заднице ?
Ты слышал про складские остатки ? Или биллинговые системы ? Я уж вообще молчу про свехтребовательные к интерактивности разные "опердни".
Если на компе у Маши не будет видно то, что ввела три секунды назад Паша, грош цена такой "системе".