Форум: "Базы";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
ВнизTIBDataSet - последовательность действий. Найти похожие ветки
← →
_Ламер_ (2006-09-13 22:41) [0]Привет
Сижу, изучаю сабж. В книжке написано про InsertSQL ....RefreshSQL типа Tstrings. Это понятно. Есть также свойство StatementType. Т.е. мне надо выполнить запрос на выборку каких-то записей. Что я делаю. Применяю метод Close. В SelectSQL пишу свой запрос, в StatementType пишу SQLSelect. Open.
Почему так сложно? В ADO просто, как два байта. Зачем применять метод Edit и запрос писать в ModifySQL? Неужели нельзя было сделать как в TADODataSEt? Может можно лёгким движением руки сделать одновременно вставку, выборку, модификацию, удаление и обновление данных?
Что делает RefreshSQL? Аналог @@identity? В книжке написано мол выполняется запрос сразу после модификации записей и что это очень удобно. А что мне мешает этот запрос написать отдельно? И надо ли мне оно?
Может IBSQL хватит сполна?
← →
kaif © (2006-09-13 23:41) [1]1. Впиши свойство SelectSQL.
2. Затем вызови контектсное меню, щелкнув на компоненте правой кнопкой мыши. Выбери пункт Dataset Editor.
3. Появится окошко. Надеюсь, у тебя ключевые поля имеются в таблице? Выбери в списке KeyFields эти ключевые поля. А в списке UpdateFields выбери все поля (для начала это будет понятнее). Потом нажми GenerateSQL. Все тексты запросов впишутся автоматом. Можешь посмотреть их там же.
4. Подключи через компонент DataSorce к контролам и наслаждайся редактированием набора. Хочешь - в сетке редактируй.
----------------------
А теперь по уму.
Смысл 4 запросов в том, что у тебя в SelectSQL может быть объединение нескольких таблиц. А редактировать одновременно можно только одну. Вот тогда для нее UPDATE и DELETE впишешь, соотвественно в ModifySQL и DeleteSQL.
Другой случай - допустим ты продвинутый программер, который не признает никаких UPDATE-ов и DELET-ов. А только хранимые процедуры. Тогда впишешь вызов этих хранимых процедур в ModifySQL и DeleteSQL, описав параметры примерно так:
EXECUTE PROCEDURE MY_COOL_UPDATE_PROCEDURE(:ID, :NAME)
И в нужный момент IBDataSet вызовет эту SQL-команду, передав в качестве значений параметров ID и NAME значения из одноименных полей открытого с помощью SELECT набора.
Так что наличие 4-х запросов позволяет тебе гибко формировать такое поведение компонента, какое тебе нужно.
А вот что такое StatementType я (если честно) и не знаю. :(
Хотя всю жизнь и юзаю эти IBX-ы вполне успешно.
Все компоненты там полезные.
Лишний, пожалуй только IBTable, хотя на него зра бочку катят - он тоже по сути 4 команды отрабатывает, как и IBDataSet. Просто он избыточный в этой палитре. Вероятно для новичков. Единственный его минус - если новичок без опыта в SQL вздумает открыть в нем таблицу в миллион записей и начать редактировать их в гриде с ползунком.
Хотя такой опыт тоже полезен иногда.
:)))
← →
MsGuns © (2006-09-14 09:23) [2]>_Ламер_ (13.09.06 22:41)
>Почему так сложно? В ADO просто, как два байта. Зачем применять метод Edit и запрос писать в ModifySQL? Неужели нельзя было сделать как в TADODataSEt? Может можно лёгким движением руки сделать одновременно вставку, выборку, модификацию, удаление и обновление данных?
Не сложно, а непривычно по сравнению с локальными базами, работа с которыми построена по принципу "моя таблица - делаю с ней все, что хочу".
Клиент-сервер требует прежде всего перепрограммирования мозгов.
В ADO тоже далеко не так все просто. А кое-что (управление транзакциями) куда менее прозрачно, чем в том же ИБ.
И еще. Судя по сабжу, опыта написания многопользовательских приложений у Вас явно немного. Тем более полезно поработать с скл-сервером для получения необходимых навыков.
Что делает RefreshSQL?
Все методы Refresh в основном имеют цель визуализирования локальных изменений в датасете и не имеют ничего общего с синхронизацией отображения БД между разными клиентами. Советую прочитать Вострикова с Ковязиным об основных принципах построения интерфейса клиент-серверных приложений.
← →
Виталий Панасенко (2006-09-14 10:57) [3]Вообще-то у ФИБОв можно выставить AutoUpdateOptions-AutoRewriteSqls и CanChangeSQL в True . тогда FIBDataSet будет автоматически формировать InsertSQL/UpdateSQL/RefreshSQL/DeleteSQL. Заполнить нужно только SelectSQL
← →
Sergey13 © (2006-09-14 11:10) [4]> [3] Виталий Панасенко (14.09.06 10:57)
Тут вроде про IBX пишуть.
← →
Виталий Панасенко (2006-09-14 11:16) [5]Это я спросонья:-). IB/FB прочитал как FIBPlus..:-) Потому как с ними работаю. и не жалею ни разу
← →
MsGuns © (2006-09-14 11:18) [6]>Виталий Панасенко (14.09.06 10:57) [3]
Все эти XXXSQL лишь имитируют "живое" редактирование. На самом деле TIBDataSet формирует запросы и посылает их на сервер, даже не подтвержая каждый раз транзакцию. В результате можно получить тот эффект, что и на локальных базах, когда после "слета" приложения все или часть изменений как бы теряются.
Поэтому надо либо редактировать таблицы БД с помощью ХП, либо самостоятельно следить за подтверждением - откатом транзакций.
"Автоматический" (с помощью одиночных запросов) режим правки сложных объектов, хранящихся в нескольких таблицах, запросто может привести к потере логической целостности данных. Именно поэтому грамотнее организовывать подобное редактирование с помощью ХП, в параметры которой записываются данные, собранные из интерфейсных контролов, не связанных с каким-либо одним датасетом.
И еще недостаток "гридного" редактирования таблиц : изменения, сделанные и подтвержденные конкурентами не будут Вами видны, пока не переоткроется весь датасет (никакой Refresh тут не поможет), точно также, как Вами собственные правки не увидят другие, пока у них не выполнится перечитка.
Непонимание этого механизма приводит к недоразумениям типа сабжевого и часто к разочарованию. Люди, пересевшие с самоката на автомобиль, с удивлением обнаруживают, что правила езды по трассам резко отличаются от привычных - по дворам и паркам. И часто не в лучшую сторону. В частности исчезает чувство свободы и самодостаточности ;)
← →
Виталий Панасенко (2006-09-14 11:32) [7]
> И еще недостаток "гридного" редактирования таблиц : изменения,
> сделанные и подтвержденные конкурентами не будут Вами видны,
> пока не переоткроется весь датасет (никакой Refresh тут
> не поможет), точно также, как Вами собственные правки не
> увидят другие, пока у них не выполнится перечитка.
У FIBPlus есть FullRefresh(Хоть это и переоткрытие, но спрятанное + позиционируется на запись, которая была текущей пере обновлением)
← →
Sergey13 © (2006-09-14 11:37) [8]> [6] MsGuns © (14.09.06 11:18)
> Все эти XXXSQL лишь имитируют "живое" редактирование. На
> самом деле TIBDataSet формирует запросы и посылает их на
> сервер, даже не подтвержая каждый раз транзакцию.
Это не совсем так. IBX позволяет это автоматизировать.
> Поэтому надо либо редактировать таблицы БД с помощью ХП,
> либо самостоятельно следить за подтверждением - откатом
> транзакций.
Можно подумать ХП избавляет от работы с транзакциями.
> "Автоматический" (с помощью одиночных запросов) режим правки
> сложных объектов, хранящихся в нескольких таблицах, запросто
> может привести к потере логической целостности данных.
Неграмотная работа с любым "режимом" позволяет достичь такого результата.
> Именно
> поэтому грамотнее организовывать подобное редактирование
> с помощью ХП, в параметры которой записываются данные, собранные
> из интерфейсных контролов, не связанных с каким-либо одним
> датасетом.
Не понимаю, как ХП (в данном контексте) может спасти отца русской демократии.
>
> И еще недостаток "гридного" редактирования таблиц : изменения,
> сделанные и подтвержденные конкурентами не будут Вами видны,
> пока не переоткроется весь датасет (никакой Refresh тут
> не поможет), точно также, как Вами собственные правки не
> увидят другие, пока у них не выполнится перечитка.
Это нормально!!! Мне не надо проверять десяток соседей по офису - я работаю со "своими" данными. Если мои данные вступают в противоречие с другими, то сервер просто не должен пропустить мои изменения.
← →
MsGuns © (2006-09-14 11:39) [9]>Виталий Панасенко (14.09.06 11:32) [7]
Вы же сами и подтвержаете [6].
FIBPlus - это тот же IBX, но дополненный и "усовершенствованный" для ленивых и не особо стремящихся вникнуть в суть делаемого батонокидателей.
А глюки там есть, и немало. В чем тот же Ковязин честно признается в своем "Мире интербэйз".
Мне же они не понравились из-за отсутствие нормального хэлпа и существенного затруднения пошаговой отладки.
← →
Виталий Панасенко (2006-09-14 12:04) [10]Вообще-то, ФИБы "доворотил" Сергей Бузаджи. Из под Одессы..:-). А глюки.. Где их нет ?
← →
Виталий Панасенко (2006-09-14 12:09) [11]а по поводу первого поста автора вопроса
> Почему так сложно? В ADO просто, как два байта. Зачем применять
> метод Edit и запрос писать в ModifySQL? Неужели нельзя было
> сделать как в TADODataSEt? Может можно лёгким движением
> руки сделать одновременно вставку, выборку, модификацию,
> удаление и обновление данных?
Используя ModifySQL я могу написать что-то типа: в SelectSQL- "select f1, f2/100 as summa from table", в ModifySQL я пишу "update table set f1=:new_f1, f2=:new_f2*100 where key=:old_key"
на что ADODataSet скажет, что не может найти поле SUMMA
← →
MsGuns © (2006-09-14 12:18) [12]>Sergey13 © (14.09.06 11:37) [8]
>Это не совсем так. IBX позволяет это автоматизировать.
С помощью одного датасета ?
>Можно подумать ХП избавляет от работы с транзакциями.
>Не понимаю, как ХП (в данном контексте) может спасти отца русской демократии.
В ХП можно инкапсулировать весь алгоритм пакета изменений и на клиенте запускать ее в контексте отдельной (если нужно) транзакции
>Это нормально!!! Мне не надо проверять десяток соседей по офису - я работаю со "своими" данными. Если мои данные вступают в противоречие с другими, то сервер просто не должен пропустить мои изменения.
Кто о чем, о солдат о титьках !
Серега, ну когда ты перестанишь все штаны в салоне мерять по своей заднице ?
Ты слышал про складские остатки ? Или биллинговые системы ? Я уж вообще молчу про свехтребовательные к интерактивности разные "опердни".
Если на компе у Маши не будет видно то, что ввела три секунды назад Паша, грош цена такой "системе".
← →
kaif © (2006-09-14 12:22) [13]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 при завершении работы приложения.
Я тоже за подход: каждый редактирует свои данные.
Если этот принцип программисту не удается соблюсти никак, то, возможно, что-то не так не в программисте, а в организации труда и распределении отвественности в самой организации у заказчика.
← →
Виталий Панасенко (2006-09-14 12:45) [14]
> Я тоже за подход: каждый редактирует свои данные.
> Если этот принцип программисту не удается соблюсти никак,
> то, возможно, что-то не так не в программисте, а в организации
> труда и распределении отвественности в самой организации
> у заказчика.
Те же складские остаки: отдел поставок внес приход. Так что, отделу сбыта теперь с ними "низзя" работать ? Тут нужно смотрерть кАнкретнА каждый случай. А ФИБы мне очень нравятся. И высказываение
> IBX-ы хороши своей примитивностью. В них есть все, что необходимо.
> Возможно, кому-то этого недостаточно.
> Я лично люблю минимализм и ясность.
несколько субьективно. Так можно утверждать, что лучше писАть на ассемблере, чего ж нет ? А то, что FIBPlus действительно отличные компоненты - это правда. При этом они не теряют в производительности. При всех своих "наворотах". Их можно не использовать, никто не заставляет. И в тоже время, если "приспичит" не нужно изобретать велосипед.. Это тоже субьективное мнение . Мое, правда.:-)))
← →
Sergey13 © (2006-09-14 13:06) [15]> [12] MsGuns © (14.09.06 12:18)
> С помощью одного датасета ?
С помощью транзакции, если мне память не изменяет.
> В ХП можно инкапсулировать весь алгоритм пакета изменений
> и на клиенте запускать ее в контексте отдельной (если нужно)
> транзакции
В какую ХП ты инкапсулируешь ввод накладной из шапки и пары сотен позицый? Все равно вставлять будешь построчно, а не кучей.
> Кто о чем, о солдат о титьках !
> Серега, ну когда ты перестанишь все штаны в салоне мерять
> по своей заднице ?
Не груби.
> Если на компе у Маши не будет видно то, что ввела три секунды
> назад Паша, грош цена такой "системе".
Если Маша будет глазами изучать плоды трудов Паши, Саши и Даши вместо того что бы работать - вот такую систему точно в топку.
← →
MsGuns © (2006-09-14 13:18) [16]>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;
то получим универсальный метод для переоткрытия (открытия) любого нормального (в смысле первое поле - счетчик ;) ) датасета
← →
atruhin © (2006-09-14 13:22) [17]> IBX-ы хороши своей примитивностью. В них есть все, что необходимо.
> Возможно, кому-то этого недостаточно.
Они не плохи, но в них нет поддержки FB 2, а сейчас это становится актуально.
Если возникла проблемма с FIBPlus, ответ разработчиков можно получить за 2-3 дня, у IBX как была проблемма с дисконнектом в IBX из комплекта Delphi 5, так и в Delphi 7 осталась. (То что есть масса неофициальных патчей я знаю).
Проблеммы с IBEvents, IBStoredProc - решенные давно в FIB, в IBX продолжаются.
То. MsGuns ©
Извени, но похоже ты не так много работал с Interbase/FibPlus, твои замечания некорректны.
← →
MsGuns © (2006-09-14 13:29) [18]Ошибся, т.к. писал "на лету"
Надо, конечно, так: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]
>С помощью транзакции, если мне память не изменяет.
Я говорю о невозможности из одного датасета управлять транзакцией, в контексте которой надо выполнить множественные изменения в РАЗНЫХ таблицах.
>В какую ХП ты инкапсулируешь ввод накладной из шапки и пары сотен позицый? Все равно вставлять будешь построчно, а не кучей.
Нет, не посторочно. Слышал о временных таблицах (в мсскл есть еще и курсоры) ?
За одно выполнение ХП я могу вставить сколь угодно записей в сколь угодно таблиц
>Не груби.
Чего такой серьезный сегодня ?
>Если Маша будет глазами изучать плоды трудов Паши, Саши и Даши вместо того что бы работать - вот такую систему точно в топку.
Маша не будет изучать - Маше нужен текущий остаток на счете, который изменился секунду назад в результате того, что Саша, Паша или Даша (а может, и все вместе) провели операцию на нем. Ты дурака валяешь абы поспорить или действительно не работал с такими системами ?
← →
MsGuns © (2006-09-14 13:46) [19]>atruhin © (14.09.06 13:22) [17]
>Извени, но похоже ты не так много работал с Interbase/FibPlus, твои замечания некорректны.
Конечно, немного и давно.. И я вовсе не претендую на истину в последней.
"Против" пласа я высказался по двум причинам:
1. Мне претит стремление некоторых разработчиков решать максимум своих проблем простым поиском "полезных" сторонних компонент. Хотя бы потому, что такие проекты следует сопровождать целой кучей инсталпакетов для возможного "воспроизводства" в будущем. Изобретательность в поиске обходных путей - вещь хорошая. Но она стимулирует банальную лень и тормозит самообразование и убивает творческий потенциал.
2. В целом замечательная книга "Мир интербэйз" сильно проигрывает из-за явной заангажированности этого самого пласа. Наслышан, что издавать подобную литературу себе дороже и возможно часто только при наличие соответствующих "споносоров", интересы которых должны быть представлены в книге. Но всему же есть мера ! Книга писана с ориентацией на разработчиков Делфи (по крайней мере мне попалась такая), так почему же были так цинично и беспардонно проигнорированы "родные" компоненты, из которых, вообще-то говоря, были сделаны и "пласовские" ?
Да и хэлпа по пласу нормального нет. Доходило до идиотизма: вопрос по компоненте пласа, а хэлп читаешь по подобной "родной". Находишь надцать отличий и гадаешь...
ЗЫ. Сказанное является моим личным мнением и не относится никаким образом к уважаемым участникам дискуссии.
← →
Sergey13 © (2006-09-14 13:49) [20]> [18] MsGuns © (14.09.06 13:29)
> Я говорю о невозможности из одного датасета управлять транзакцией,
> в контексте которой надо выполнить множественные изменения
> в РАЗНЫХ таблицах.
В IBX (мы говорим про них?) есть возможность привязать хоть каждый датасет к отдельной транзакции. Мне не шибко нравится эта "многоранзакционность" сессии, но если есть - этим можно пользоваться.
> Нет, не посторочно. Слышал о временных таблицах (в мсскл
> есть еще и курсоры) ?
> За одно выполнение ХП я могу вставить сколь угодно записей
> в сколь угодно таблиц
С врменными таблицами и курсорами, и даже без них, я могу и с клиента без всяких ХП вставить сколько угодно записей хоть во все таблицы - и целостность БД не нарушится. При чем тут ХП?
> Маша не будет изучать - Маше нужен текущий остаток на счете,
> который изменился секунду назад в результате того, что
> Саша, Паша или Даша (а может, и все вместе) провели операцию
> на нем. Ты дурака валяешь абы поспорить или действительно
> не работал с такими системами ?
Это ты дурака валяешь, похоже. Пока Маша вбивает данные по своей операции те проворные подруги могут провести еще кучу документов. Т.е. на момент провоки машиного документа ситуация в БД будет отличаться от полученного ей секунду назад результата. И что?
← →
atruhin © (2006-09-14 13:54) [21]> [19] MsGuns © (14.09.06 13:46)
С ытим полностью согласен. Хоть многие и расхваливают книгу, я был разачарован, именно из-за описания FIB на пол книги, покупая ее я думал что покупаю книгу по серверу, а не по конкретным компонентам.
> Я говорю о невозможности из одного датасета управлять транзакцией,
> в контексте которой надо выполнить множественные изменения
> в РАЗНЫХ таблицах.
Ты эты мысь высказываешь уже в нескольких постах, но похоже кроме тебя никто не понял что ты имел ввиду?
Для каждого датасета можно задать пишущую и читающую транзакции, хоть отденьно, хоть одну на несколько датасетов, чего тебе не хватает.
PS. Кстати главным плюсом FIB я считаю возможность работать в контексте 2 транзакций. Для IB это очень важно. По крайней мере я их покупал именно из-за этого.
← →
MsGuns © (2006-09-14 14:16) [22]>Sergey13 ©
Серег, у тебя, как мне показалось, чешется подискутировать на тему типа что первичнее, яйцо или курица ? Извини, не настроен. Ничего личного ;)
>atruhin © (14.09.06 13:54) [21]
>Ты эты мысь высказываешь уже в нескольких постах, но похоже кроме тебя никто не понял что ты имел ввиду?
Да я уже и сам понял, что никто не понял ;))
Наверное, так "ясно" высказал..
Приводить тут примеры на 5 экранов не считаю разумным.
Сейчас мне приходится вплотную работать с мсскл. ИБ вспоминаю как милого старого друга. В частности красивый suspend, чего напрочь нетути в T-SQL. Вообще, обилие в серверной логике тут и там всевозможных курсоров и временных таблиц просто убивает, никак не могу привыкнуть к тому, что полученную запросом запись не могу передать клиенту пока не вытащатся ВСЕ !!!
И еще дикая кривизна - отсутствие возможности работы с более чем одним курсором одновременно (отчего, собственно, и плодятся все эти временные таблицы). Опять же непривычно без генераторов. И очень мутна (очевидно, от неопытности) технология управления транзакциями.
Зато сам T-SQL куда мощнее интербэйзовского. Чего стОят одни подзапросы и куча встроенных функций !
Однако, заболтался я, автору вообще не до нас.
Посему откланиваюсь и спасибо за интересную беседу ;)
← →
kaif © (2006-09-14 14:28) [23]Мне знаете, что нравится в SQL-щиках?
(Я себя тоже к ним отношу)
Мы все исповедуем религии.
У каждого есть любимый сервер - он за него глотку порвет.
У каждого есть любимые компоненты прямого доступа - он их будет защищать.
:)
У нас есть даже свои божества.
Например, нормализация.
Даже если мы ее нарушаем, то при этом чтим.
:)
У нас масса религиозных направлений:
1. Аскетизм (я такой). Аскет SQL не признает никаких IBExpert, даже если юзает. Предпочитает для работы с метаданными иметь одно TMemo, в которое он напишет SQL-команду, даже если это ALTER TABLE и один IBSQL, который ее выполнит после нажатия одной единственной TButton. Аске не любит "текущих товарных остатков перед глазами у Даши", так как знает, что это не спасет Дашу от того, что ее транзакция все равно провалится при Commite, если Саша успеет закоммитить свою накладную раньше нее. И вообще аскет полагат, что не программисты должны решать проблему "последнего товара на складе", а те, кто планирует стратегии "минимальных товарных остатков" и банковские кредиты, проценты по которым явно ниже, чем прибыли, утерянные в результате того, что Даша так и не смогла продать закончившийся на складе товар.
2. Служение-юзеру-по-принципу-Мать-Тереза (я не такой). Здесь подход иной. Типа "клиент всегда прав". Если клиент сказал, что главная задача его фирмы - обеспечивать каждого покупателя мгновенно товаром и при этом не иметь ни одного лишнего товара на складе, так как это "замораживает капитал", то Мать Тереза кидается решать эту задачу программным путем. Тот есть вводит понятие "резервирование" и понятия типа "снять с резервирования и отдать Васе Пупкину с разрешения Главного Важного Менеджера", а также понятие "Отгрузить со склада то, что еще не успели оприходовать", и т.п. Заказчики очень ценят такие жертвы, так как им это позволяет спихивать свои проблемы в иное русло, чем то, где принято искать решения у бизнесменов. То есть если у меня нет денег, то не надо их искать в банке, а надо позвать программиста - пусть он создаст способ их тратить оптимальнее, в смысле меньше тратить.
3. Жрецы монстизма. Это категория элиты. Они часто не признают никого кроме ORACLE и культовых мистерий вокруг этого монстра. Их главный вопрос: "А что вы будете делать, если у вас грохнулась база с миллиардом записей? Я ее просто откачу на любую точку - и нет проблем". Их окультовые обряды напоминают то, что происходило в храмах Юпитера (Зевса). Их главный принцип: "То, что позволено Зевсу, не позволено быку." Если у них что-то не работает из числа самых простых вещей (что даже у дибиэфщиков работало), они закатывают глаза и говорят "Придется останавливать системный сервис и обращаться к системному администратору. Для этого мне нужна от вас официальная бумага".
4. Еретики. Эти свой дибиэф или аксесс ни на что не поменяют, так как это у них всегда "работает" и они не знают (дословно) ни одной задачи, которую нельзя решить при помощи дибиэф и некривых рук. Апологеты Канонических Серверных Церквей взирают на таких с презрением или яростью, в зависимости от того, насколько еретик зарвался в своих заявлениях насчет Сущности Серверного Бога и его Квинтэссенции - Госпожи Нормализации Таблиц.
:)
← →
Sergey13 © (2006-09-14 14:36) [24]> [22] MsGuns © (14.09.06 14:16)
А че не подискутировать. 8-)
Ты же сам объявил что ХП это практически панацея от всего, не то что ""Автоматический" (с помощью одиночных запросов) режим правки сложных объектов, хранящихся в нескольких таблицах". Я так не считаю. ХП предназначена немного для другого (безопасность, вынос логики с клиента и т.п.). Ничего принципиального нового, невозможного сделать на клиенте, для обработки информации они не дают. Разве, что трафик иногда экономят. Так ты (с пропагандируемым тобой методом исправления внешним запросом и перечитыванием датасета) этот трафик съешь на постоянном перечитывании инфы из БД после каждого чиха пользователя.
← →
kaif © (2006-09-14 14:44) [25]Вера в хранимые процедуры сходна с верой в действенность молитвы.
Типа исход любого дела, разумеется, зависит от того, как это дело сделать.
Однако молитва при этом не помешает.
:)
← →
Sergey13 © (2006-09-14 14:45) [26]> [23] kaif © (14.09.06 14:28)
8-)
← →
kaif © (2006-09-14 14:47) [27]Молитва объединяет различные разрозненые действия, подчиняя их некоторой общей цели. Цель следует указать в названии хранимой процедуры.
Тогда взглянув очередной раз на программу можно будет легко вспомнить, чего здесь я (или не я) пытался добиться.
В этом есть определенный смысл.
Хотя я так не делаю - избалован с детства. Не привык к дисциплине.
← →
PEAKTOP © (2006-09-14 15:48) [28]Человек только спросил, как устроен механизм TIBCustomDataSet. Ответить можно было парой фраз, и было бы понятно ... Во что ветку превратили ?
← →
MsGuns © (2006-09-14 16:06) [29]>PEAKTOP © (14.09.06 15:48) [28]
>Во что ветку превратили ?
Так это.. по обыкновению.. в "потрепацца" ;))
Не все ж CREATE CURSOR псиать ;)
← →
ANB © (2006-09-14 17:32) [30]
> Хотя я так не делаю - избалован с детства. Не привык к дисциплине.
А зря.
> отсутствие возможности работы с более чем одним курсором
> одновременно
Ээээ. Что это значит ? Вложенные курсоры работают. А необходимости одновременно гулять по нескольким курсорам ни разу не встречал. Да такого и оракл не допускает.
← →
Anatoly Podgoretsky © (2006-09-14 20:32) [31]MsGuns © (14.09.06 14:16) [22]
Это с непривычки и старая любовь, а могло бы и наоборот, но у тебя всегда остается возможность перейти на другой сервер и моли бога, что бы эта возможность не реализовалась, а то тогда будет две старых любви.
У каждой системы есть свои особенности и применять старые представления к новой системы не совсем верно, это пахнет луддизмом, можно стать и маргиналом.
Надо просто освоить хорошо новую систему и работать по ее правилам.
← →
_Ламер_ (2006-09-17 22:39) [32]Как я понял, SelectSQL - это основной запрос, который непосредственно общается с СУБД, а все остальные - это дополнительные, которые общаются с DataSet-ом? Может тогда рано связался с dll? С exe начать изучение?
А вообще мне такая функциональность не нужна, в IBSQL есть всё, что мне нужно. Только не понял - с ХП умеет работать?
А неужели IBEvents так плох, что лучше не связываться?
← →
Виталий Панасенко (2006-09-18 09:30) [33]
> _Ламер_ (17.09.06 22:39) [32]
Ты так ничего из прочитанного и не понял...
SelectSQL - нужен ДЛЯ ОТОБРАЖЕНИЯ ДАННЫХ(в DBGrid/DBEdit/DBText и т.д.) И ДОСТУПА К ЗНАЧЕНИЯМ НД
UPdateSQL - для изменения данных на сервере(после Edit+POST)
RefreshSQL - для обновления данных, чтобы увидеть изменения, сделанные другим пользователем/сервером. Вызывается по вызову Refresh
DeleteSQL - удалить текущую запись в НД(после вызова Delete)
IsertSQL - вызывается после вставки новой записи в НД(Insert+Post/Append+Post/AppendRecord)
Главное непонятное - при чем тут DLL или EXE ?!
← →
Виталий Панасенко (2006-09-18 09:52) [34]Поправка к
> DeleteSQL - удалить текущую запись в НД(после вызова Delete)
запись так же удаляется и на сервере
← →
_Ламер_ (2006-09-18 15:26) [35]Да я компоненты в dll запихнул.
А компонентов типа DB* у меня совсем нема((
← →
ANB © (2006-09-18 16:11) [36]
> Главное непонятное - при чем тут DLL или EXE ?!
> Да я компоненты в dll запихнул.
Я бы сказал, некоторая разница есть. В частности, очень легко сломать код, нормально работающий в экзешнике, при неаккуратном переносе в ДЛЛ, особливо при выключенном флаге "собирать с рантайм пакетами"
← →
Виталий Панасенко (2006-09-18 16:23) [37]
> ANB © (18.09.06 16:11) [36]
Суть не в том. Суть в том, что человек вообще не понимает, набуя это все придумали...
← →
_Ламер_ (2006-09-18 20:25) [38]Ладно, народ, не могу понять, как там передавать параметры?
Допустим, запросSELECT Name, ID FROM Equipments WHERE (parent=:prmID)
Как получить набор Name (string) и ID (integer)?
Как организовать передачу параметра prmID?
Ну хотя бы на примере IBSQL. Там есть классы TIBXSQLDA и TIBXSQLVAR - запутался. А книжки какие-то водянистые попались - толком не описано ни фига %(
Может статейки есть какие.
← →
_Ламер_ (2006-09-18 21:17) [39]ОЙ %)
Полазил по королевству делфи и всё прояснилось. Там так же, как и в ADO %)
Осталось только придумать ситуацию, когда мне будет нужен IBDataSet ))
Ну ладно, спасибо.
← →
Виталий Панасенко (2006-09-18 22:13) [40]
> _Ламер_ (18.09.06 21:17) [39]
> ОЙ %)
>
> Полазил по королевству делфи и всё прояснилось. Там так
> же, как и в ADO %)
>
> Осталось только придумать ситуацию, когда мне будет нужен
> IBDataSet ))
>
> Ну ладно, спасибо.
В тех же ситуациях(подобных), когда и ADODataSet -т.е. практически всегда.
Если, конечно, вместо
IBDataSet.Edit;
IBDataSet.FieldByName().AsXXX := Value
...
IBDataSet.Post;
хочется писать что-то типа:
IBSQL.ParamByName().Value := Value;
...
IBSQL.ExecSQL;
Или вместо IBDataSet.AppendRecord([Value1, Value2,...,ValueN]) использовать
IBSQL.ParamByName().AsXXX := Value1;
IBSQL.ParamByName().AsXXX := Value2;
...
IBSQL.ParamByName().AsXXX := ValueN;
IBSQL.ExecSQL;
и аналогично для все остальных вариантов(вместо просто IBDataSet.Delete писать IBSQL.ParamByName().Value := Value; IBSQL.ExecSQL;)
Страницы: 1 2 вся ветка
Форум: "Базы";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
Память: 0.62 MB
Время: 0.053 c