Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.035 c
14-1091964530
ИМХО
2004-08-08 15:28
2004.08.29
Уринотерапия


1-1092329524
Реактор
2004-08-12 20:52
2004.08.29
Сравнение рисунков.


1-1092298386
Ренат
2004-08-12 12:13
2004.08.29
Загрузить .gif файл


14-1092288811
Kerk
2004-08-12 09:33
2004.08.29
Microsoft запатентовала "двойной щелчок" мышкой


10-1029843910
Гость (незванный)
2002-10-15 03:28
2004.08.29
Что за чудо PortableServer_POA::AdapterNonExistent





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский