Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.29;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.039 c
14-1092367704
Новенький
2004-08-13 07:28
2004.08.29
Ищу компонент


6-1086863457
Kraj
2004-06-10 14:30
2004.08.29
Socket


10-1033633458
Comwad
2002-10-03 12:24
2004.08.29
Опять про злосчастный "Assertion faild: _reply_message!=(..."


3-1090838604
Dalex
2004-07-26 14:43
2004.08.29
MySql


4-1090164957
SashOK
2004-07-18 19:35
2004.08.29
ОТключить устройство