Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > dbgrid


Автор: AKN 3.8.2006, 14:03
Получаю живой запрос с посощью Query и SQLUpdate При навигации (!) по гриду откуда-то появляются дублирующие записи. При использовании в гриде полосы прокрутки дублирующиеся записи сами собой исчезают. Подскажите что это за хрень, в чем может быть проблема (кроме недостаточности радиуса кривизны рук)?

Автор: Frees 3.8.2006, 14:41
imho может дело в отрисовке попродуй на событие скрола датасета для грида зделать DBgrid.refresh

Автор: AKN 3.8.2006, 15:00
неа... Записи именно появляются, а не глюки отрисовки. Может быть проблем в кривизне запросов в SQLUpdate?

Автор: Frees 3.8.2006, 15:04
Цитата(AKN @  3.8.2006,  15:00 Найти цитируемый пост)
 Может быть проблем в кривизне запросов в SQLUpdate?

ну тогда выкладывай свои запросы

Автор: AKN 3.8.2006, 16:39
Нет, запросы нормальные - проверил, а проблема осталась... 
вообще-то проблема вот в чем - у меня накладная, где по кнопке всавляется запись 
Код

    if Query.CanModify = true then
      begin
        Query.Last;
        Query.Insert;
        Query.Fields[0].AsInteger:=num_zap;
        Query.Fields[1].AsInteger:=INSERTED_GOOD_ID;
        Query.Fields[2].AsString:=INSERTED_GOOD_NAME;
        Query.Fields[3].AsInteger:=1; //????? ?????????? ????? ????? ???????? ? ??????? ????? ??? ? ?????
        Query.Fields[4].AsFloat:=INSERTED_PRICE_WITH_NDS;
        Query.Fields[5].AsFloat:=INSERTED_PRICE_WITHOUT_NDS;
        Query.Fields[6].AsInteger:=1;// ??????? ????????? - ????? ????????
        num_zap:=num_zap+1;
      end
    else
    ShowMessage('тра-ля-ля');


мож в этом проблема? что-то тут не так?

Автор: DimW 3.8.2006, 17:30
Цитата(AKN @  3.8.2006,  16:39 Найти цитируемый пост)
что-то тут не так?

конечно не так! Query.Post перед эндом поставь.

Автор: AKN 3.8.2006, 17:56
Цитата

конечно не так! Query.Post перед эндом поставь.


у меня все идет в одной транзакции, там несколько операторов. Пост что-то решит?

Автор: Fedia 3.8.2006, 22:49
Цитата(AKN @  3.8.2006,  17:56 Найти цитируемый пост)
Пост что-то решит?

Очень похоже на то, что в твоем проекте как раз в каком-то обработчике добавляются записи без их внесения в БД, т.е. без вызова post. А потом, в одном из обработчиков, срабатывающих при скроллинге происходит обновление данных из БД и эти записи исчезают. Возможно не правильно реализован механизм транзакций.
Вообще информации для точного ответа на твой вопрос маловато будет. 

 smile  
Цитата(AKN @  3.8.2006,  14:03 Найти цитируемый пост)
Подскажите что это за хрень, в чем может быть проблема (кроме недостаточности радиуса кривизны рук)?

А что, у кривизны рук есть свой радиус ? smile 

Автор: AKN 4.8.2006, 08:59
Цитата

А что, у кривизны рук есть свой радиус ?


ну не работает же, значит радиус маловат...

Цитата

Очень похоже на то, что в твоем проекте как раз в каком-то обработчике добавляются записи без их внесения в БД, т.е. без вызова post. А потом, в одном из обработчиков, срабатывающих при скроллинге происходит обновление данных из БД и эти записи исчезают. Возможно не правильно реализован механизм транзакций.


транзакция начинается когда пользователь жмакнул кнопку "Подбор", ему вываливается формочка с выбором товара, потом по выбранному товару в одельной квери ищуться его параметры (цена, единица измерения и т.д.) и срабатывает обработчик 
Цитата

Код
Код

   if Query.CanModify = true then
      begin
        Query.Last;
        Query.Insert;
        Query.Fields[0].AsInteger:=num_zap;
        Query.Fields[1].AsInteger:=INSERTED_GOOD_ID;
        Query.Fields[2].AsString:=INSERTED_GOOD_NAME;
        Query.Fields[3].AsInteger:=1; //????? ?????????? ????? ????? ???????? ? ??????? ????? ??? ? ?????
        Query.Fields[4].AsFloat:=INSERTED_PRICE_WITH_NDS;
        Query.Fields[5].AsFloat:=INSERTED_PRICE_WITHOUT_NDS;
        Query.Fields[6].AsInteger:=1;// ??????? ????????? - ????? ????????
        num_zap:=num_zap+1;
      end
    else
    ShowMessage('тра-ля-ля');


 

который и вставляет в грид накладной выбранный товар с ценой и т.д. Организация процесса правильная? Уже думаю мож плюнуть и в стринг гриде все это организовать...

Автор: Fedia 4.8.2006, 09:22
AKN
честно говоря, не увидел в твоем описании реализации механизма транзакций, потому попробуй сделать так, как написал DimW.
Цитата

Уже думаю мож плюнуть и в стринг гриде все это организовать...

Нет, лучше не надо над собой так издеваться. Может удастся излечить твою проблему в ближайшее время...

Автор: superVad 4.8.2006, 09:48
стартуй транзакцию перед инсертом и комить после поста
пост поставь как DimW сказал

и вообще вместо Query юзай лучше датасет

Автор: AKN 4.8.2006, 17:06
Всем спасибо, буду пытаться!

Автор: Fedia 4.8.2006, 23:26
Цитата

и вообще вместо Query юзай лучше датасет

Чем лучше то ? По иерархии классов TQuery наследник TDataSet.

AKN, вероятность того, что дублирующие записи - результат глюка DBGrid-а очень мала, но все-таки посоветую попробовать заменить DBGrid на DBGridEh из пакета компонентов EhLib. К тому же в EhLib-овском варианте грида значительно расширен функционал, который может в будущем пригодиться.

Автор: superVad 8.8.2006, 11:57
Цитата(Fedia @ 4.8.2006,  23:26)
Чем лучше то ? По иерархии классов TQuery наследник TDataSet.

хз, может всетаки гдето в этом и проблема.

да и функциональность TQuery там вроде и не требуется.

таки да EH рулит.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)