![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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