Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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;)


 
_Ламер_   (2006-09-19 14:02) [41]


> atruhin ©   (14.09.06 13:22) [17]
> > IBX-ы хороши своей примитивностью. В них есть все, что
> необходимо.>  Возможно, кому-то этого недостаточно. Они
> не плохи, но в них нет поддержки FB 2, а сейчас это становится
> актуально.

А в чём это выражается?


 
Виталий Панасенко   (2006-09-19 14:17) [42]


> _Ламер_   (19.09.06 14:02) [41]
>
> > atruhin ©   (14.09.06 13:22) [17]
> > > IBX-ы хороши своей примитивностью. В них есть все, что
>
> > необходимо.>  Возможно, кому-то этого недостаточно. Они
>
> > не плохи, но в них нет поддержки FB 2, а сейчас это становится
>
> > актуально.
>
> А в чём это выражается?

В том, что ЖарПтица - бесплатный (пока ?) сервер, не уступающий(практически), а кой в чем и превосходящий по возможностям своего родителя - InterBase... А IBX не гарантирует в отличии от ФИБОв поддержки ЖарПтицы и InterBase, только последнее.Не, можно, конечно, и IB купить. Но цены глянь на www.ibase.ru на InterBase...


 
ANB ©   (2006-09-19 14:47) [43]


> В том, что ЖарПтица - бесплатный (пока ?) сервер,

Значит надо переходить на оракл. У него бесплатный и платный варианты мало чем отличаются.


 
Виталий Панасенко   (2006-09-19 15:21) [44]

Кроме кАнкретных ограничений в бесплатной версии. Наиболее менее ограничен в этом плане бесплатный вариант DB2 - там по крайней мере нет ограничения на размер пользовательских данных(в отличии от Оракла и Скалы)


 
PEAKTOP ©   (2006-09-19 16:04) [45]


> IBX не гарантирует в отличии от ФИБОв поддержки ЖарПтицы

А слабо самому "обработать напильником" ?


> Значит надо переходить на оракл. У него бесплатный и платный варианты мало чем отличаются.

хм. интересно.
а если задача - распределенная БД, с кучей (более 100) изолированных филиалов, с которых потом подгружаются данные в центральную базу, и на филиалах стоят ЭВМ вроде AMD Duron 600 + 128MB ОЗУ ?
А мы туда всунем Оракл 10i. Гы-гы-гы ... :(


 
Виталий Панасенко   (2006-09-19 16:23) [46]


> PEAKTOP ©   (19.09.06 16:04) [45]
>
> > IBX не гарантирует в отличии от ФИБОв поддержки ЖарПтицы
>
> А слабо самому "обработать напильником" ?

А смысл ? Проще 15 баксов заплатить и получать удовольствие...:-)


 
ANB ©   (2006-09-19 17:15) [47]


> А мы туда всунем Оракл 10i. Гы-гы-гы ... :(

Без проблем. 10XE нормально запашет. Видел бы ты наши боевые сервера в МВ.


> бесплатный вариант DB2

Где взять ????? Хочу !!!


 
PEAKTOP ©   (2006-09-19 19:49) [48]

> Проще 15 баксов заплатить и получать удовольствие...:-)
Это не наши методы :))) А развитие где ?

... У них (американцев) конструкторы собираются ! А развитие где ? Что-то подточить, что-то подсверлить, тут детальки нехватает, "папа, укради с завода и принеси"... (с) Михаил Задорнов


 > Без проблем. 10XE нормально запашет
Запашет, запашет, никто не сомневается... Только вот быстро ли ? Там машинам и так тяжело, пыхтят бедные, а мы им еще и оракла подселим %)))


 
_Ламер_   (2006-09-19 21:47) [49]

Да я спрашивал про стабильность работы IBX с FB2. На работе поставил, сабж хотя бы коннектится. Уже хорошо.


 
Виталий Панасенко   (2006-09-20 09:16) [50]


> ANB ©   (19.09.06 17:15) [47]


> > бесплатный вариант DB2
>
> Где взять ????? Хочу !!!

Ищи DB2 Express-C


 
ANB ©   (2006-09-20 12:24) [51]


> а мы им еще и оракла подселим

Да не будет с ними ничего. Можно подумать FB сильно меньше кушает при работе.



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

Форум: "Базы";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.66 MB
Время: 0.051 c
2-1162323188
daser
2006-10-31 22:33
2006.11.19
Как уменьшить высоту ComboBox a?


15-1161919258
SlymRO
2006-10-27 07:20
2006.11.19
Опять RO?! За что?


3-1158588886
partizan
2006-09-18 18:14
2006.11.19
postgreSQL+Delphi


1-1160481752
markers
2006-10-10 16:02
2006.11.19
UTF-8 > Win


15-1162550539
Stanislav1
2006-11-03 13:42
2006.11.19
UNIX программист





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский