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 хватит сполна?


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

а по поводу первого поста автора вопроса

> Почему так сложно? В 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


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

Вообще-то, ФИБы "доворотил" Сергей Бузаджи. Из под Одессы..:-). А глюки.. Где их нет ?


MsGuns   (2006-09-14 11:39:00) [43]

>Виталий Панасенко   (14.09.06 11:32) [7]

Вы же сами и подтвержаете [6].
FIBPlus - это тот же IBX, но дополненный и "усовершенствованный" для ленивых и не особо стремящихся вникнуть в суть делаемого батонокидателей.
А глюки там есть, и немало. В чем тот же Ковязин честно признается в своем "Мире интербэйз".
Мне же они не понравились из-за отсутствие нормального хэлпа и существенного затруднения пошаговой отладки.


Sergey13   (2006-09-14 11:37:00) [44]

> [6] MsGuns ©   (14.09.06 11:18)
> Все эти XXXSQL лишь имитируют "живое" редактирование. На
> самом деле TIBDataSet формирует запросы и посылает их на
> сервер, даже не подтвержая каждый раз транзакцию.
Это не совсем так. IBX позволяет это автоматизировать.

> Поэтому надо либо редактировать таблицы БД с помощью ХП,
> либо самостоятельно следить за подтверждением - откатом
> транзакций.
Можно подумать ХП избавляет от работы с транзакциями.

> "Автоматический" (с помощью одиночных запросов) режим правки
> сложных объектов, хранящихся в нескольких таблицах, запросто
> может привести к потере логической целостности данных.
Неграмотная работа с любым "режимом" позволяет достичь такого результата.

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

>
> И еще недостаток "гридного" редактирования таблиц : изменения,
> сделанные и подтвержденные конкурентами не будут Вами видны,
> пока не переоткроется весь датасет (никакой Refresh тут
> не поможет), точно также, как Вами собственные правки не
> увидят другие, пока у них не выполнится перечитка.

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


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


> И еще недостаток "гридного" редактирования таблиц : изменения,
>  сделанные и подтвержденные конкурентами не будут Вами видны,
>  пока не переоткроется весь датасет (никакой Refresh тут
> не поможет), точно также, как Вами собственные правки не
> увидят другие, пока у них не выполнится перечитка.


У FIBPlus есть FullRefresh(Хоть это и переоткрытие, но спрятанное + позиционируется на запись, которая была текущей пере обновлением)


MsGuns   (2006-09-14 11:18:00) [46]

>Виталий Панасенко   (14.09.06 10:57) [3]

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

И еще недостаток "гридного" редактирования таблиц: изменения, сделанные и подтвержденные конкурентами не будут Вами видны, пока не переоткроется весь датасет (никакой Refresh тут не поможет), точно также, как Вами собственные правки не увидят другие, пока у них не выполнится перечитка.

Непонимание этого механизма приводит к недоразумениям типа сабжевого и часто к разочарованию. Люди, пересевшие с самоката на автомобиль, с удивлением обнаруживают, что правила езды по трассам резко отличаются от привычных - по дворам и паркам. И часто не в лучшую сторону. В частности исчезает чувство свободы и самодостаточности ;)


Виталий Панасенко   (2006-09-14 11:16:00) [47]

Это я спросонья:-). IB/FB прочитал как FIBPlus..:-) Потому как с ними работаю. и не жалею ни разу


Sergey13   (2006-09-14 11:10:00) [48]

> [3] Виталий Панасенко   (14.09.06 10:57)

Тут вроде про IBX пишуть.


Виталий Панасенко   (2006-09-14 10:57:00) [49]

Вообще-то у ФИБОв можно выставить AutoUpdateOptions-AutoRewriteSqls и CanChangeSQL в True . тогда FIBDataSet будет автоматически формировать InsertSQL/UpdateSQL/RefreshSQL/DeleteSQL. Заполнить нужно только SelectSQL


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

>_Ламер_   (13.09.06 22:41)  
>Почему так сложно? В ADO просто, как два байта. Зачем применять метод Edit и запрос писать в ModifySQL? Неужели нельзя было сделать как в TADODataSEt? Может можно лёгким движением руки сделать одновременно вставку, выборку, модификацию, удаление и обновление данных?

Не сложно, а непривычно по сравнению с локальными базами, работа с которыми построена по принципу "моя таблица - делаю с ней все, что хочу".
Клиент-сервер требует прежде всего перепрограммирования мозгов.
В ADO тоже далеко не так все просто. А кое-что (управление транзакциями) куда менее прозрачно, чем в том же ИБ.

И еще. Судя по сабжу, опыта написания многопользовательских приложений у Вас явно немного. Тем более полезно поработать с скл-сервером для получения необходимых навыков.

Что делает RefreshSQL?

Все методы Refresh в основном имеют цель визуализирования локальныхизменений в датасете и не имеют ничего общего с синхронизацией отображения БД между разными клиентами. Советую прочитать Вострикова с Ковязиным об основных принципах построения интерфейса клиент-серверных приложений.


kaif   (2006-09-13 23:41:00) [51]

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 вздумает открыть в нем таблицу в миллион записей и начать редактировать их в гриде с ползунком.
Хотя такой опыт тоже полезен иногда.
:)))


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

Наверх

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