-
Есть таблица с примари ключом ID. С помощью IBTable данные грузятся в DBGrid. Записи в гриде отображаются по убыванию ID, т.е. 9, 8,7,6... А хотелось бы 1,2,3,...
-
> [0] grav (15.05.08 12:03) > С помощью IBTable
Что заставляет использовать сей компонент? Есть и более продвинутые, например IBDataSet. Заботать с SQL сервером значительно удобнее и правильнее через этот SQL.
-
> Sergey13 © (15.05.08 12:12) [1]
мастер-детайл заставляет, удобно. Неужеле так плохо все и нет возможности упорядочить по возрастанию?
-
>мастер-детайл заставляет, удобно. Как раз с помощью IBDataSet это удобнее. И его запросе можно прописать order by ....., который и отсортирует как надо. А с IBTable прийдётся создавать индексы.
-
> Как раз с помощью IBDataSet это удобнее
Уж больно много запросов писать надо. Я бы лучше индексы создал, вот только не знаю куда их прикрутить. Поле IndexName занято, т.к. используется IndexFieldName для мастер-детайл.
-
> [4] grav (15.05.08 14:50) > Уж больно много запросов писать надо.
Это если книг никаких и прочей литературы перед этим не читать. 8-)
-
Читаю справку по DefaultIndex
Description
When this property is set to false, an ORDER BY clause is not used when opening a table on the server. When DefaultIndex is true, the data is ordered based on the primary key or a unique index when opening the table. DefaultIndex defaults to true.
Удаляю примари кей. Отображает в гриде вообще фигню, типа 9,10,8. Откуда? Снова создал примари кей. То же самое, не поменялось ничего. Почему?
-
> Sergey13 © (15.05.08 14:53) [5]
Написать запросы на выборку мастер-детайл я и без книг могу. Но надо еще и на вставку, обновление и удаление. Лениво как то, если есть готовые компоненты.
-
> [6] grav (15.05.08 15:01) > Почему?
Потому что предпочитаешь сомнительные эксперименты чтению литературы. Твой ТТабл фактически транслируется в запрос select * from table (просто сервер ничего другого не понимает) Это запрос БЕЗ сортировки. Порядок записей при таком запросе ВОБЩЕ непредсказуем, потому что случаен. То, что он повторяется - частный случай.
-
> [7] grav (15.05.08 15:03) > Лениво как то
Это серьезный аргумент. Только обычно, если самому что-то делать ЛЕНИВО, надо другим за выполняемую за тебя работу ПЛАТИТЬ.
-
> [7] grav (15.05.08 15:03) > Но надо еще и на вставку, обновление и удаление.
Это опять же говорит о нелюбви к чтению. Эти запросы генерируются автоматически с минимальным участием программиста (на уровне 2-3 кликов мышкой).
-
> Sergey13 © (15.05.08 15:06) [8]
> Твой ТТабл фактически транслируется в запрос > select * from table
В IBExpert такой запрос выдает нормальный порядок 1,2,3,4,5.... Хотя бы потому, что вводились они последовательно с использованием генератора. И 5 никак не может попасть вперед 2 или 3. И уж тем более 1 не может отобразится после 5.
-
> [11] grav (15.05.08 15:14) > И 5 никак не может попасть вперед 2 или 3.
Ну если там всего 5 записей, то может и так - они все будут лежать на одной странице (вроде так это называется - что-то запамятовал) файла БД. Как только этих страниц станет больше - уже не так все очевидно. А если с таблицей идет интенсивная работа с удалением/вставкой - шансы еще более уменьшаются.
-
Вообщем нашел компромис. У меня было 8 IBTable для трех гридов и кучи DBEdit'ов в двух группах. Три IBTable заменил на IBDataSet, три IBTable стали не нужны (были поля lookup, стали JOIN). Два IBTable осталось. В итоге один грид и DBEdit'ы можно редактировать, еще с двумя завтра разберусь :) Спасибо
-
ЕСЛИ БУДЕШЬ ИСПОЛЬЗОВАТЬ IBTABLE, ТО КОНЕЦ ТВОИМ РАЗРАБОТКАМ!!!
ИСПОЛЬЗУЙ ТОЛЬКО IBDataSet !!!
Никаких запросов там писать не надо, выбирай из конструктора, а когда поймешь, что ручками, в данном случае, удобнее, легче и больше возможностей, вот тогда и попрет!!!
весь запрос TTable-> IBDataSet это: select * from table1
мастер-детайл - пожалуйста, order by - пожалуйста и запросы Insert? UpDate, Delete формируются автоматически и генераторы ID опрашиваются автоматически... Что же тебе еще надо???
-
>grav
Надо еще в бубен побить,- тогда точно заработает
-
простенький запрос в InsertSQL insert into tbl1 (ID_ORG,KOD,NAME) values (:ID_ORG,:KOD,:NAME) В таблице есть еще поле ID, но оно гнератор, с ним все ок. Поле ID_ORG - это поле по которому идет связь мастер-детайл. Откуда его брать для вставки записей? Что поменять в запросе?
-
> [16] grav (16.05.08 14:33) > Откуда его брать для вставки записей?
Из того датасета, на который ссылаешься естественно.
-
> Из того датасета, на который ссылаешься естественно.
Это понятно, а как его вписать (если пользоваться встроенным в компонент редактором)? Или в какое место, если через параметры?
-
> grav (16.05.08 14:33) [16]
Ничего не выходит. Пытался этот ID_ORG в событие BeforeInsert вставить BuildDS.ParamByName('ID_ORG').AsString:=OrganDS.fieldByName('ID').AsString; Пишет поле ID_ORG не найдено. Где его задать то?
|