Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];

Вниз

Позиционирование в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.009 c
1-26141
hooky-mars
2002-04-21 19:01
2002.05.09
Form&MessageBox


1-26169
R0M-k
2002-04-24 11:15
2002.05.09
Событие для кнопок


1-26077
MVova
2002-04-25 16:49
2002.05.09
Альтернатива SourceSafe


3-26014
supervisor
2002-04-16 10:32
2002.05.09
Как снести BDE


3-26000
DRIVER
2002-04-04 17:25
2002.05.09
Где вы мастера!!!!!!!???????





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский