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

Вниз

Позиционирование в DBGrid после Insert   Найти похожие ветки 

 
Pike ©   (2002-04-04 23:49) [0]

Хотелось бы узнать, как решают эту проблему другие.
Проблема в том, что при добавлении новой записи в TQuery, DBGrid не корректно отображает последовательность записей, пока не переоткроешь TQuery. В свое время я решил эту проблему с помощью обработчиков событий BeforePost и AfterPost. Но до сих пор остаюсь неудовлетворенным – люблю изящные решения. А тут еще столкнулся с похожей проблемой у TIBQuery. Может есть более красивые решения, возможно я чего-то не допонимаю в этих Query? А может существуют более проработанные Query-компоненты? Подскажите, плиз.


 
Alexandr ©   (2002-04-05 06:53) [1]

FIBPlus тебе поможет


 
Pike ©   (2002-04-05 17:35) [2]

Спасибо, Alexandr. Где его можно взять?


 
Pike ©   (2002-04-05 17:38) [3]

Кстати, посоветуй хороший набор компонентов для работы с БД.


 
Johnmen ©   (2002-04-05 17:41) [4]

>>>Кстати, посоветуй хороший набор компонентов для работы с БД.

FIBPlus...



 
Pike ©   (2002-04-05 17:52) [5]

Опять FIBPlus. Так где же его можно надыбать?


 
dymka ©   (2002-04-05 18:51) [6]

http://www.fibplus.com.ua/rus


 
Вольный Стрелок   (2002-04-06 15:50) [7]

2 Pike
Поделись решением с BeforePost/AfterPost

2 Alexandr
а со стандартными компонентами (через БДЕ)?


 
Pike ©   (2002-04-06 22:50) [8]

procedure TdmXXXX.AfterPostID(DataSet: TDataSet);
var
FindValue: Variant;
Query: TQuery;
Field: TField;
begin
Field := DataSet.FieldByName("ID");
if (DataSet.Tag = 1) then begin
DataSet.Tag := 0;
FindValue := Field.Value;
with DataSet do begin
DisableControls;
Close;
Open;
First;
while not EOF do begin
if (Field.Value = FindValue) then Break;
Next;
end;
EnableControls;
end;
end;
end;

procedure TdmXXXX.BeforePostID(DataSet: TDataSet);
begin
if (DataSet.State = dsInsert) then DataSet.Tag := 1;
end;

Как раз хорошо работает с BDE.

Спасибо за FIBPlus!!!!!


 
Вольный Стрелок   (2002-04-07 21:51) [9]

2 Pike
> не корректно отображает последовательность записей, пока
> не переоткроешь TQuery. В свое время я решил эту проблему
> с помощью обработчиков событий BeforePost и AfterPost.
ИМХО, в этом комментарии говорится, что решено БЕЗ переоткрытия, а приведенный код говорит об обратном.
С переоткрытием-то все ясно, хотелось без него и в БДЕ.


 
Pike ©   (2002-04-07 23:37) [10]

Извиняюсь - не ясно выразился.


 
dymka ©   (2002-04-08 07:44) [11]

2Pike: Что-то сложно, можно чуток проще
Зачем в цикле искать значение если для этого есть метод Locate?
Значения типа FindValues можно получать в событие BeforePost например...

procedure TForm1.Query1AfterPost(DataSet: TDataSet);
begin
DataSet.Close;
DataSet.Open;
DataSet.Locate(KeyFields, KeyValues, []);
end;

Правда тут нет проверки на инсерт...


 
Shirson ©   (2002-04-08 09:08) [12]

Я это делал букмарками. Просто и работает без проблем.

var
saveplace:tbookmark;

begin
SavePlace:=Query1.GetBookmark;
... //insert-edit-delete here
Query1.GotoBookmark(SavePlace);
Query1.FreeBookmark(SavePlace);


 
Pike ©   (2002-04-08 22:39) [13]

Есть ли где-нибудь толковое описание к FIBPlus? Желательно бы на русском. Help уж больно краток.

А это я состряпал на заре моего знакомства с Delphi, кажется тогда это был D2. С букмарками тогда не получилось, почему уже не помню. Так с тех пор и пользовался, не заглядывая.


 
Pike ©   (2002-04-08 23:21) [14]

dymka
> Правда тут нет проверки на инсерт...
В этом все и дело!!
А с букмарками, на мой взгляд, далеко не изящное решение. Весь этот огород придется городить каждый раз, как понадобится работать с таблицей. Думаю красота решения состоит не только в краткости кода, но и в легкости работы с ним. В моем случае, эти процедуры просто подставляешь в события, даже не генеря обработчики событий.


 
Alexandr ©   (2002-04-09 06:48) [15]

про FIBPlus читайте на
fibplus.com.ua


 
Slava ©   (2002-04-09 08:38) [16]

И $15 приготовьте...


 
Alexandr ©   (2002-04-09 09:04) [17]

необязательно, если сплаш без ИДЕ пока не мешает...

да и 15$ за такой продукт это мало.
И вообще 15$ это подписка на новые версии на год, захочешь в следующем году опять новые версии получать - еще 10$ в год.

По-моему это копейки, по сравнению с тем, что эта библиотека дает.


 
Slava ©   (2002-04-09 09:10) [18]

> Alexandr ©

А я и не спорю.

Вот только "сплаш без ИДЕ" для меня было, прямо скажу, неприятной неожиданностью, т.к. сервисы всякие понаписаны и т.д.

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

FIBPlus, имхо, лучшая библиотека для IB.


 
Pike ©   (2002-04-10 12:36) [19]

На fibplus.com.ua никакого описания (как с ним работать, а не его достоинства) что-то я не обнаружил. Или его надо покупать?

Пардон, что есть "сплаш без ИДЕ"?


 
Alexandr ©   (2002-04-10 12:42) [20]

1) А ты запусти скомпилированную программу с FIBPlus 4.6 отдельно, без дельфи- увидишь
2) на fibplus.com.ua плохо искал :) там и статьи есть и примеры


 
Pike ©   (2002-04-11 17:01) [21]

Попробовал - увидел.
1. Удаление этой блямбы - это все, что дает регистрация?
2. Этично ли давать информацию в форуме о том как удалить ее, если знаешь как? Я все же уважаю труд наших россейских прогромистов и их желание получать за свой труд.


 
alexandr ©   (2002-04-12 06:49) [22]

главное если заплатить
1) Дают исходники
2) Тех. поддержка на высоком уровне
3) Чистая совесть


 
alexandr ©   (2002-04-12 06:51) [23]

да и еще. Самое главное.
Если разработчик увидит, что в сети ходит кряк, он сильно улучшит защиту, а пока это не защита, а предупреждение.


 
Pike ©   (2002-04-12 21:14) [24]

Почему после добавления записи в Grid-е, не могу ее тут же изменить без переоткрытия? Это касается только новой записи.
Как только не менял настройки свойств - итог тотже.


 
Pike ©   (2002-04-13 14:09) [25]

Спасибо, уже разобрался сам. Недооценил AutoUpdateOptions.


 
Alexander Vasjuk   (2002-04-13 19:57) [26]

>Shirson © (08.04.02 09:08)
В последних версиях работа с букмарками проще
var
SavePlace: TBookmarkStr;

begin
SavePlace := Query1.Bookmark;
... //insert-edit-delete here
if Query1.ValidBookmark(SavePlace) then Query1.Bookmark := SavePlace; //




 
kaif ©   (2002-04-13 22:11) [27]

Вообще не очень понятно, что значит "DBGrid не корректно отображает последовательность записей".
В принципе, существует Insert и Append у наборов TIBQuery. Если считать корректным добавление новой записи в конец, то можно использовать метод Append. Если же речь идет о каком-то порядке (ORDER BY) и хочется, чтобы запись сразу попала в нужное место, то можно что-то придумать и без переоткрытия запроса, например, использовать один IBQuery для вставки (Insert) записи (в диалоговом окне), а другой для отображения всего набора. В первом делать настоящий Post, а во втором, после того, как стало ясно, куда запихать запись делать Locate нужного места и Insert + Post + Refresh (Refresh пересвечивает только одну строку).
Для того, чтобы Post всего набора ничего не изменял, можно вставить в InsertSQL какой-нибудь дурацкий текст, который ничего не делает, к примеру "SET NAMES 1251". А можно просто включить CachedUpdates и не применять ApplyUpdates.
А вообще, мне кажется, что очень правильно, что для Insert не требуется Fetch всего набора, который может отнять время и память. В этом весь кайф IBQuery, который сведется на нет, если делать Append или то, как я предложил.
Хотя в случае небольших наборов, может это и оправдано...


 
kaif ©   (2002-04-13 22:16) [28]

Извиняюсь, упустил, в наборе-списке:
Locate(next_key_value)
Insert;
FieldByName(key_field_name).Value := key_value;
Post;
Refresh;
чтобы Refresh увидел новую запись с ключом key_value.
Хотя ерунда все это, ИМХО...


 
Pike ©   (2002-04-14 00:01) [29]

> kaif © (13.04.02 22:11)
Согласен. Такое решение более красивое.
Хотя с FIBPlus таких проблем уже нет.


 
kaif ©   (2002-04-14 02:29) [30]

>Pike ©
Хорошо бы попробовать как-нибудь FIBPlus. Я с ними не работал.


 
Pike ©   (2002-04-14 15:55) [31]

`Очень советую. Сам только вот узнал про него. Попробовал кайф!
Вся информация, о том где его взять, здесь в этой теме.


 
Pike ©   (2002-04-14 21:30) [32]

Кстати, вопрос. В FIBPlus есть логический тип, а как сделать в Grid-е чекбоксы? И вообще, кто подскажет хорошую библиотеку компонентов визуального представления для баз данных?


 
Alexandr ©   (2002-04-15 07:13) [33]

DBGridEh - бесплатный, хороший.
Остальные Очень сильно платные


 
Blond   (2002-04-15 21:36) [34]

To Alexandr:
> DBGridEh - бесплатный, хороший.
Подскажите плз новичку, где взять.
Заранее спасибо


 
alexandr ©   (2002-04-16 06:38) [35]

ну его обычно все берут здесь

http://www.farpost.com/personal/dmitryb


 
Slava ©   (2002-04-16 10:52) [36]

> alexandr

Ветка одна, а сколько в ней помощи неоценимой оказано было. И стольким людям...
:о)))))))))))


 
Alexandr ©   (2002-04-16 10:59) [37]

Да.
Но мне, однако, совсем не нравится, что в ветках так далеко уходят от исходного поста.
Что, людям влом новую ветку начать?


 
Slava ©   (2002-04-16 11:07) [38]

Ну всё! Жди МОДЕРАТОРА.


 
Alexandr ©   (2002-04-16 11:37) [39]

а что такое?

P.S. Я модератора не боюсь, почему-то...


 
Pike ©   (2002-04-16 19:00) [40]

Зря, ребята. Думаю все было по теме - и FIBPlus, и DBGridEh. Все это связано с заявленой здесь темой о проблеме в BDE и IBX с Ggid-ом и Insert-ом. Всем, привет! И огромное спасибо за море полезной информации.
PS: Кстати, я хотел начать новую ветку по вопросам с FIBPlus, но как то жалко стало рушить обсуждение.



Страницы: 1 2 вся ветка

Текущий архив: 2002.05.09;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.012 c
1-26190
perov
2002-04-25 09:39
2002.05.09
Сравнение двух строк


1-26086
Glonia Zbanov
2002-04-26 15:20
2002.05.09
Имена NT server


1-26172
Vint
2002-04-25 12:03
2002.05.09
расположение кнопок на CoolBar


14-26245
Vladimir Lubenchenko
2002-03-31 20:49
2002.05.09
Большая просьба к владельцам D6+Upd2 (!!!)


1-26174
onix
2002-04-25 10:39
2002.05.09
Убрать строку заголовка.