Форум: "Базы";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
Внизtable1.indexFieldNames Найти похожие ветки
← →
belkova (2004-08-05 10:54) [0]Мастера delphi!Подскажите, пожалуйста. Существует некоторая таблица, с которой связан компонент IBTable. В таблицу забиваются данные. Прсле того как данные отредактированы их требуется сохранить. Сохранялось все хорошо, пока не сделала перед сохранением сортировку по одному из полей.
table1.indexFieldNames:=DBGrid1.Columns[7].FieldName;
В рез-те те изменения , которые заносились с клавиатуры удаляются, то что внеслось програмно остается,
если строчку убираю все хорошо работает. Как быть?
← →
Соловьев © (2004-08-05 10:58) [1]
> пока не сделала перед сохранением сортировку по одному из
> полей.
> table1.indexFieldNames:=DBGrid1.Columns[7].FieldName;
1. Сортировку так не делать.
2. Зачем перед сохранением сортировать?
3. Используйте для отображения набора данных - IBDataSet , для запросов которые не возвращают наборы данных(count, sum, create, insert etc. ) - IBSQL
← →
belkova (2004-08-05 11:12) [2]А как можно сортировать?
← →
Соловьев © (2004-08-05 11:13) [3]order by
← →
belkova (2004-08-05 11:21) [4]Понятно. Большое спасибо.
← →
Rule © (2004-08-05 11:24) [5]belkova (05.08.04 10:54)
Для начала посоветую тоже что и мои колеги, использовать в качестве компоненты доступа IBDataset,
могу также посоветовать использовать в качестве компонентов доступа FIBPlus они хоть и платные но себя оправдывают, там очень много добавлено удобных вещей и понадежней будет
Сортировка действиетльно делается order by, но если вам уж так приспичило исопльзовать IBTable то посоветую перед сортировкой просто коммитить транзакцию, и тогда я думаю сохранятся ваши изменения ...
← →
belkova (2004-08-05 11:34) [6]Спасибо.
← →
s999 (2004-08-05 12:07) [7]Совершенно дурацкий стереотип - "не использовать компоненты, в названии которых есть слово Table". Кто-то, когда-то не понял как работает TTable из BDE и "пошло-поехало". Ничем принципиально IBTable от IBDataSet не отличается, кроме атоматизации написания запросов. SelectSQL строится так:
select * from TableName
where Filter
order by IndexFieldNames
Аналогично строятся и остальные. Если нужен запрос именно такого вида, то использование IBTable просто экономит время на рутинных операциях. Особенно это ценно, когда нужно что-то быстро "накидать, посмотреть, проверить".
Проблема же твоя, как сказали, либо в незакоммиченной транзакции, либо где-то вызывается Cancel вместо Post, а, конечно, не в используемом компоненте. Переход на IBDataSet ничего здесь не решит.
← →
Rule © (2004-08-05 12:21) [8]s999 (05.08.04 12:07) [7]
Переход не решит, но в отличие от тейбла все операции в датасете прозрачные что не скажешь о автоматизировных скрытых операциях тэйбла, кстати работает он намного медленее и остался лишь для совместимости с БДЕ, мжоно по этому поводу спорить и спорить ...
← →
s999 (2004-08-05 12:31) [9]
> , но в отличие от тейбла все операции в датасете прозрачны
Гм... Про SelectSQL я уже написал, могу расписать все остальные, чего уж тут непрозрачного?
> , кстати работает он намного медленее
??? C чего бы это? Наверное, на автоматическое формирование запросов уходит жуть как много времени :)))
← →
Соловьев © (2004-08-05 12:33) [10]
> ??? C чего бы это? Наверное, на автоматическое формирование
> запросов уходит жуть как много времени :)))
запусти SQLMonitor и смотри какие запросы шлются при использовании IBTable и IBDataSet, IBSQL
← →
s999 (2004-08-05 12:48) [11]
> запусти SQLMonitor и смотри какие запросы шлются
Ты что же думаешь, что я этого никогда не делал? Более того, в некоторых случаях (хоть это и мелочи), запросы "от IBTable"
могут быть более оптимальными из-за использования DBKEY. На уровне IBDataSet с DBKEY "возится" обычно желания не возникает.
← →
dolmat (2004-08-05 13:25) [12]>В рез-те те изменения , которые заносились с клавиатуры удаляются, то что внеслось програмно остается
Програмно срабатывает сначала post а потом сортировка поэтому все нормально.
При ручном вводе вы вносиет запись и не делаете post а делаете сортировку срабатывает table1.cancel.
← →
Соловьев © (2004-08-05 13:43) [13]
> Ты что же думаешь, что я этого никогда не делал? Более того,
> в некоторых случаях (хоть это и мелочи), запросы "от IBTable"
> могут быть более оптимальными из-за использования DBKEY.
> На уровне IBDataSet с DBKEY "возится" обычно желания не
> возникает.
глянь на исходники IBTable и IBDataSet - все что нужно для работы с данными есть уже у IBCustomDataSet. В IBTable - делается это еще раз но с заточкой, это сделано для нормального перехода от БДЕ.
← →
s999 (2004-08-05 13:48) [14]
> и не делаете 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, при вводе руками "тыкаем" куда-нибудь мышкой.
← →
s999 (2004-08-05 13:55) [15]
> глянь на исходники IBTable и IBDataSet
Ты что же думаешь, что я их никогда не видел? :))
> В IBTable - делается это еще раз но с заточкой
Не понял, что там делается еще раз, и что там точится?
← →
Соловьев © (2004-08-05 14:16) [16]
> Не понял, что там делается еще раз, и что там точится?
http://ibase.ru/devinfo/bde.htm
← →
s999 (2004-08-05 15:20) [17]
> http://ibase.ru/devinfo/bde.htm
И что? Никакого отношения к IBTable это не имеет.
← →
Соловьев © (2004-08-05 15:25) [18]
> И что? Никакого отношения к IBTable это не имеет.
имеет, так как то что пишется для TTable подходит и для IBTable
← →
s999 (2004-08-05 15:54) [19]
> имеет, так как то что пишется для TTable подходит и для
> IBTable
Не стоит утверждать того, чего точно не знаешь. Аналога TTable в IBX нет и никогда не было. Кэширование данных в IBTable и IBDataSet абсолютно идентично и написано в общем предке IBCustomDataSet. Никакого "живого кэша" в IBTable нет и в помине. "Роднят" их только свойства типа Filter, IndexFieldNames и т.д. и дополнительные процедуры типа CreateTable. Если в приложении на BDE использовались возможности TTable, то при переходе на IBTable можно так огрести, что мало не покажется...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.051 c