Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / [TDBGrid] добавление новой записи _ниже_ текущей / 25 сообщений из 27, страница 1 из 2
20.11.2008, 16:58
    #35666238
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
После TDataSet.Insert в TDBGrid добавляется запись выше текущей. Как сделать чтобы новая запись появлялась ниже?

Есть ещё методы, кроме того, чтобы перед TDataSet.Insert делать TDataSet.Next?
...
Рейтинг: 0 / 0
20.11.2008, 17:04
    #35666267
shitikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
.Append
...
Рейтинг: 0 / 0
20.11.2008, 17:38
    #35666359
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
shitikov.Append

Append добавляет в конец, а нужно ниже текущей.
...
Рейтинг: 0 / 0
20.11.2008, 17:46
    #35666384
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
Next+Insert ?
...
Рейтинг: 0 / 0
20.11.2008, 17:52
    #35666413
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
miksoftNext+Insert ?

TUnknownЕсть ещё методы, кроме того, чтобы перед TDataSet.Insert делать TDataSet.Next?
...
Рейтинг: 0 / 0
20.11.2008, 17:56
    #35666422
Артем_84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
дык после обновления набора все записи отсортируются по индексу, какая разница куда вставлять?
...
Рейтинг: 0 / 0
20.11.2008, 17:58
    #35666428
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
В исходниках TDBNavigator подцепиться не к чему, там есть только TDBNavigator.BeforeAction. Там сразу вызов
Код: plaintext
Insert;
и можно написать только нежелательный
Код: plaintext
Next;
. В исходниках TDBGrid не удалось найти явное место Insert, к которому бы удалось легко подцепиться.
...
Рейтинг: 0 / 0
20.11.2008, 18:02
    #35666439
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
Артем_84дык после обновления набора все записи отсортируются по индексу, какая разница куда вставлять?

Нужно чисто визуальное решение. При вставке в базу новая запись будет связана с предыдущей. Должно быть визуально похоже на вставку новой записи в ту запись, на которой стоим.
...
Рейтинг: 0 / 0
20.11.2008, 18:05
    #35666446
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
TUnknown> Insert;и можно написать только нежелательный Next;

Ты не понимаешь, что такое Insert (вставка).
Вставить можно до. Вставка после - это Append.

TUnknown> Нужно чисто визуальное решение.

1. Свой грид
2. IMD.
3. Вставка с учетом сортировки - т.е. со значением
поля больше/меньше, чем у текущей записи.

P.S. Хотя чем не подходит Next - непонятно.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
20.11.2008, 18:07
    #35666447
alex0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
TUnknownАртем_84дык после обновления набора все записи отсортируются по индексу, какая разница куда вставлять?

Нужно чисто визуальное решение. При вставке в базу новая запись будет связана с предыдущей. Должно быть визуально похоже на вставку новой записи в ту запись, на которой стоим.
отсортировать (order by) так чтобы она именно так и выводилась
...
Рейтинг: 0 / 0
20.11.2008, 18:34
    #35666508
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
Гаджимурадов Рустам2. IMD.
3. Вставка с учетом сортировки - т.е. со значением
поля больше/меньше, чем у текущей записи.

что такое "IMD"? по форуму упоминается без определения.

что нужно заполнить, чтобы после
Код: plaintext
Insert;
пустая запись в гриде рисовалась после текущей ещё до того, как будет Post? Где новая запись будет после Post- в данном случае не важно.

alex0отсортировать (order by) так чтобы она именно так и выводилась

видимо, только после Post? Нужна видимость именно до Post.
...
Рейтинг: 0 / 0
20.11.2008, 18:41
    #35666529
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
TUnknown> что такое "IMD"? по форуму упоминается без определения.

In-Memory DataSet.

TUnknown> что нужно заполнить, чтобы после Insert; пустая запись в гриде
TUnknown> рисовалась после текущей ещё до того, как будет Post?

1. В гриде нет никаких записей. Обычные гриды (в т.ч. TDBGrid)
отображает записи датасета в том порядке, в котором они идут.
Также большинство гридов не сортирует/переставляет записи самостоятельно.
2. До Post есть куча других событий и их обработчиков.

TUnknown> Где новая запись будет после Post- в данном случае не важно.

Однако... Можно все же поинтересоваться откуда вытекает
эта задача и чем принципиально не подходит Next ?

P.S. А еще я думал, редактирование "в гриде" наконец кануло в Лету. Ошибался...

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
20.11.2008, 19:01
    #35666582
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
Гаджимурадов РустамМожно все же поинтересоваться откуда вытекает
эта задача и чем принципиально не подходит Next ?

P.S. А еще я думал, редактирование "в гриде" наконец кануло в Лету. Ошибался...

Задача- попытка достаточно сложного форматирования информации в стандартном гриде при желательном сохранении редактирования.

Грид можно редактировать хотя бы потому, что такая возможность в нём стандартно предусмотрена. Даже сравнительно удобно предусмотрена. А можно не редактировать.

Зависит от задачи.

За неимением другого метода придётся воспользоваться
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
       if  RecordCount > RecNo  then 
         Next
       else 
       begin 
         Append ;
         Abort ;  // волюнтаризм 
       end  ;
...
Рейтинг: 0 / 0
20.11.2008, 19:07
    #35666593
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
TUnknown
Код: plaintext
RecordCount
У стандартного TDataSet RecordCount равен -1.
У остальных - где как...
...
Рейтинг: 0 / 0
20.11.2008, 19:09
    #35666597
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
Гаджимурадов Рустамчем принципиально не подходит Next ?

Его нужно вешать на контрол ввода новой записи, кнопку или TDBNavigator. Хотелось обойтись гридом.
...
Рейтинг: 0 / 0
20.11.2008, 19:10
    #35666601
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
miksoftУ остальных - где как...

Рассматриваем случай SDAC. Там работает.
...
Рейтинг: 0 / 0
20.11.2008, 19:12
    #35666610
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
TUnknownmiksoftУ остальных - где как...Рассматриваем случай SDAC. Там работает.И даже дает правильное значение до того, как выбраны все записи?

Я бы предложил контролировать EOF. Оно, имхо, как-то понадежнее будет...
...
Рейтинг: 0 / 0
20.11.2008, 19:19
    #35666620
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
miksoftИ даже дает правильное значение до того, как выбраны все записи?

Я бы предложил контролировать EOF. Оно, имхо, как-то понадежнее будет...

В данном случае выбираются все записи. EOF на последней записи не работает в случае, если был Next с предпоследней.

У меня SDAC.
...
Рейтинг: 0 / 0
20.11.2008, 19:33
    #35666637
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
TUnknown> За неимением другого метода придётся воспользоваться
> if RecordCount > RecNo then
> Next
> else
> begin
> Append ;
> Abort ; // волюнтаризм
> end ;

Не понял этого куска кода. Он не то чтобы неправильный, он просто бессмысленный.

TUnknown> Его нужно вешать на контрол ввода новой записи, кнопку
TUnknown> или TDBNavigator. Хотелось обойтись гридом.

Нет. Еще раз повторяю - у датасета есть вагон событий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
20.11.2008, 21:27
    #35666775
OracleX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
TUnknownУ меня SDAC.локальная сортировка задействована?
...
Рейтинг: 0 / 0
21.11.2008, 10:56
    #35667372
Gwa
Gwa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
Гаджимурадов Рустам
P.S. А еще я думал, редактирование "в гриде" наконец кануло в Лету. Ошибался...


Это детская болезнь.. вроде кори..
...
Рейтинг: 0 / 0
21.11.2008, 11:07
    #35667421
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
Гаджимурадов РустамНе понял этого куска кода. Он не то чтобы неправильный, он просто бессмысленный.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 procedure  TForm1.DBNavigator1BeforeAction ( Sender : TObject ; Button : TNavigateBtn ) ;
 var  DSO : TDataSource ;
    DSE : TDataSet ;
 begin 
    if  ( Button <> nbInsert )  or   not  ( Sender  is  TDBNavigator )  then  Exit ;
   DSO := TDBNavigator ( Sender ).DataSource ;
    if   not  assigned ( DSO )  then  Exit ;
   DSE := DSO.DataSet ;

    with  DSE  do 
       if  RecordCount > RecNo  then 
         Next
       else 
       begin 
         Append ;
         Abort ;
       end  ;
 end  ;

в полном виде более понятно? При наличии такого обработчика дбнавигатор визуально вставляет запись ниже текущей записи.

Гаджимурадов РустамЕще раз повторяю - у датасета есть вагон событий.

как по датасету получить грид, смотрящий на него? Перебирать все компоненты приложения или, в лучшем случае, указанной формы? Про существование TGridDataLink знаю.

Пытаюсь сделать это в "общем" виде, когда есть "универсальный" обработчик и он ничего не знает о программе, кроме того, что можно получить через Sender или подобными методами.

OracleXTUnknownУ меня SDAC.локальная сортировка задействована?

Нет. Были проверены AfterInsert,BeforeInsert,OnNewRecord,OnCalcFields. Никто из них не позволяет при указанном значении поля из IndexFieldNames вставлять запись в грид в требуемом визуальном порядке до Post.
...
Рейтинг: 0 / 0
21.11.2008, 13:16
    #35667940
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
TUnknown> в полном виде более понятно?

Чуть более. В изначальном варианте Insert не наблюдался.

TUnknown> как по датасету получить грид, смотрящий на него?

Никак. Потому что его может не быть или их может быть много.
Решение перебирать компоненты - одно из возможных. Только
вот грид может находиться вообще в другой форме и т.д.

Насчет событий - Вы просто не разобрались. Используйте Next.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.11.2008, 13:46
    #35668062
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
Гаджимурадов РустамTUnknown> в полном виде более понятно?

Чуть более. В изначальном варианте Insert не наблюдался.

имеется в виду это?
Код: plaintext
    if  ( Button <> nbInsert )  or   not  ( Sender  is  TDBNavigator )  then  Exit ;
слово "инсерт" больше в коде не упоминалось

Гаджимурадов РустамTUnknown> как по датасету получить грид, смотрящий на него?

Никак. Потому что его может не быть или их может быть много.
Решение перебирать компоненты - одно из возможных. Только
вот грид может находиться вообще в другой форме и т.д.

Какие есть ещё решения кроме перебора компонентов или написания собственных?

Гаджимурадов РустамНасчет событий - Вы просто не разобрались. Используйте Next.

Код: plaintext
1.
2.
3.
 procedure  TForm1.MSQuery1BeforeInsert(DataSet: TDataSet);
 begin 
   DataSet.Next;
 end ;

Не работает на последней записи! Разве как-то можно "заменить" TDataSet.Insert на TDataSet.Append в процессе выполнения самого инсерта?
...
Рейтинг: 0 / 0
21.11.2008, 14:06
    #35668128
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[TDBGrid] добавление новой записи _ниже_ текущей
TUnknown> Какие есть ещё решения кроме перебора компонентов или написания собственных?

Нормальных - никаких.

TUnknown> Не работает на последней записи!

Дык и не должно. Кто вам мешает проверить, что запись последняя и не делать Next ?

TUnknown> Разве как-то можно "заменить" TDataSet.Insert на TDataSet.Append в процессе выполнения самого инсерта?

Можно. Отменить Insert и сделать Append. Предварительно
позаботившись о том, чтобы не уйти в рекурсию.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / [TDBGrid] добавление новой записи _ниже_ текущей / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]