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

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

table1.indexFieldNames [D7, IB6.x]


belkova ©   (2004-08-05 10:54:00) 

Мастера delphi!Подскажите, пожалуйста. Существует некоторая таблица, с которой связан компонент IBTable. В таблицу забиваются данные. Прсле того как данные отредактированы их требуется сохранить. Сохранялось все хорошо, пока не сделала перед сохранением сортировку по одному из полей.
table1.indexFieldNames:=DBGrid1.Columns[7].FieldName;
В рез-те те изменения , которые заносились с клавиатуры удаляются, то что внеслось програмно остается,
если строчку убираю все хорошо работает. Как быть?


s999   (2004-08-05 15:54:00) [1]


> имеет, так как то что пишется для TTable подходит и для
> IBTable


Не стоит утверждать того, чего точно не знаешь. Аналога TTable в IBX нет и никогда не было. Кэширование данных в IBTable и IBDataSet абсолютно идентично и написано в общем предке IBCustomDataSet. Никакого "живого кэша" в IBTable нет и в помине. "Роднят" их только свойства типа Filter, IndexFieldNames и т.д. и дополнительные процедуры типа CreateTable. Если в приложении на BDE использовались возможности TTable, то при переходе на IBTable можно так огрести, что мало не покажется...


Соловьев   (2004-08-05 15:25:00) [2]


> И что? Никакого отношения к IBTable это не имеет.

имеет, так как то что пишется для TTable подходит и для IBTable


s999   (2004-08-05 15:20:00) [3]


> http://ibase.ru/devinfo/bde.htm


И что? Никакого отношения к IBTable это не имеет.


Соловьев   (2004-08-05 14:16:00) [4]


> Не понял, что там делается еще раз, и что там точится?

http://ibase.ru/devinfo/bde.htm


s999   (2004-08-05 13:55:00) [5]


> глянь на исходники IBTable и IBDataSet


Ты что же думаешь, что я их никогда не видел? :))  


> В IBTable - делается это еще раз но с заточкой

Не понял, что там делается еще раз, и что там точится?


s999   (2004-08-05 13:48:00) [6]


> и не делаете post а делаете сортировку срабатывает table1.cancel.


Не... Вряд ли.

Первой строкой в TIBTable.SetIndex идет:

if Active then CheckBrowseMode;

А в CheckBrowseMode читаем:

case State of
   dsEdit, dsInsert:
     begin
       UpdateRecord;
       if Modified then Post else Cancel;
     end;

То есть, по умолчанию должен отработать Post.

Я склоняюсь к совсем простому варианту, типа: у грида включен CancelOnExit, при вводе руками "тыкаем" куда-нибудь мышкой.


Соловьев   (2004-08-05 13:43:00) [7]


> Ты что же думаешь, что я этого никогда не делал? Более того,
> в некоторых случаях (хоть это и мелочи), запросы "от IBTable"
> могут быть более оптимальными из-за использования DBKEY.
> На уровне IBDataSet с DBKEY "возится" обычно желания не
> возникает.

глянь на исходники IBTable и IBDataSet - все что нужно для работы с данными есть уже у IBCustomDataSet. В IBTable - делается это еще раз но с заточкой, это сделано для нормального перехода от БДЕ.


dolmat   (2004-08-05 13:25:00) [8]

>В рез-те те изменения , которые заносились с клавиатуры  удаляются, то что внеслось програмно остается

Програмно срабатывает сначала post а потом сортировка поэтому все нормально.
При ручном вводе вы вносиет запись и не делаете post а делаете сортировку срабатывает table1.cancel.


s999   (2004-08-05 12:48:00) [9]


> запусти SQLMonitor и смотри какие запросы шлются

Ты что же думаешь, что я этого никогда не делал? Более того, в некоторых случаях (хоть это и мелочи), запросы "от IBTable"
могут быть более оптимальными из-за использования DBKEY. На уровне IBDataSet с DBKEY "возится" обычно желания не возникает.


Соловьев   (2004-08-05 12:33:00) [10]


> ??? C чего бы это? Наверное, на автоматическое формирование
> запросов уходит жуть как много времени :)))

запусти SQLMonitor и смотри какие запросы шлются при использовании IBTable и IBDataSet, IBSQL


s999   (2004-08-05 12:31:00) [11]


> , но в отличие от тейбла все операции в датасете прозрачны


Гм... Про SelectSQL я уже написал, могу расписать все остальные, чего уж тут непрозрачного?

> , кстати работает он намного медленее

??? C чего бы это? Наверное, на автоматическое формирование запросов уходит жуть как много времени :)))


Rule   (2004-08-05 12:21:00) [12]

s999   (05.08.04 12:07) [7]
Переход не решит, но в отличие от тейбла все операции в датасете прозрачные что не скажешь о автоматизировных скрытых операциях тэйбла, кстати работает он намного медленее и остался лишь для совместимости с БДЕ, мжоно по этому поводу спорить и спорить ...


s999   (2004-08-05 12:07:00) [13]

Совершенно дурацкий стереотип - "не использовать компоненты, в названии которых есть слово Table". Кто-то, когда-то не понял как работает TTable из BDE и "пошло-поехало". Ничем принципиально IBTable от IBDataSet не отличается, кроме атоматизации написания запросов. SelectSQL строится так:

select * from TableName
where Filter
order by IndexFieldNames

Аналогично строятся и остальные. Если нужен запрос именно такого вида, то использование IBTable просто экономит время на рутинных операциях. Особенно это ценно, когда нужно что-то быстро "накидать, посмотреть, проверить".

Проблема же твоя, как сказали, либо в незакоммиченной транзакции, либо где-то вызывается Cancel вместо Post, а, конечно, не в используемом компоненте. Переход на IBDataSet ничего здесь не решит.


belkova   (2004-08-05 11:34:00) [14]

Спасибо.


Rule   (2004-08-05 11:24:00) [15]

belkova   (05.08.04 10:54)

Для начала посоветую тоже что и мои колеги, использовать в качестве компоненты доступа IBDataset,
могу также посоветовать использовать в качестве компонентов доступа FIBPlus они хоть и платные но себя оправдывают, там очень много добавлено удобных вещей и понадежней будет

Сортировка действиетльно делается order by, но если вам уж так приспичило исопльзовать IBTable то посоветую перед сортировкой просто коммитить транзакцию, и тогда я думаю сохранятся ваши изменения ...


belkova   (2004-08-05 11:21:00) [16]

Понятно. Большое спасибо.


Соловьев   (2004-08-05 11:13:00) [17]

order by


belkova   (2004-08-05 11:12:00) [18]

А как можно сортировать?


Соловьев   (2004-08-05 10:58:00) [19]


> пока не сделала перед сохранением сортировку по одному из
> полей.
> table1.indexFieldNames:=DBGrid1.Columns[7].FieldName;

1. Сортировку так не делать.
2. Зачем перед сохранением сортировать?
3. Используйте для отображения набора данных - IBDataSet , для запросов которые не возвращают наборы данных(count, sum, create, insert etc. ) - IBSQL


Наверх

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