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

Вниз

В таблице после обновления данных (Refresh) пропадает часть запис   Найти похожие ветки 

 
Andrio   (2003-05-17 14:39) [0]

После обновления НД пропадает часть записей в таблице.
Они появляются вновь при открытии БД вновь.
Помогите. Отчего это может быть :((


 
Cranium   (2003-05-17 15:14) [1]

Компаненты какие юзаешь?


 
Andrio   (2003-05-17 15:26) [2]

TIBTable + DBDrid


 
Cranium   (2003-05-17 15:29) [3]

Фильтрация установлена?


 
Andrio   (2003-05-17 21:04) [4]

Фильтрации как таковой нет (есть MasterSource). Та "t проблемма возникает при просмотре таблицы в IBExpert.
Подробнее об этом вопросе см.
http://delphimaster.net/view/3-1053164630/

Заранее благодарен. :))


 
Zacho   (2003-05-17 21:25) [5]


> Andrio © (17.05.03 21:04)

Вс-таки напиши подробнее о IBExpert. Установленный уровень изоляции транзакции, точная последовательность твоих действий, результаты.
Не должно такого быть в IBExpert. Или ты имеешь в виду, что меняешь данные в таблице из своей программы, а в IBExpert не видишь изменений ?


 
Andrio   (2003-05-19 23:51) [6]


> Zacho © (17.05.03 21:25)


Пробовал все уровни изоляции транзакций - результат тот же.
Если заинтересовал данный баг, то попробуй изобразить его у себя.

Для примера: Создаем БД из 2-х таблиц. Одна главная - другая детальная. В главной таблице создаем ComputedBy поле и вычисляем его как сумму по 1 полю в детальной таблице. Фишка в том, что в детальной таблице к 1-й записи в главной могут относится несколько записей.
Теперь заполняем справочную (детальную) таблицу, а затем главную.
В IBEXPRESS делаем "REFRESH" одним из следующих путей:
либо делаем COMMIT
либо просто меняем вкладочку в окошке
либо еще чего нибудь (Ну вобщем заставляем делать REFRESH)
Результат: пожалуйста - от Ваших 10 записей в главной таблице показывется только 6. При повторном REFRESH количество записей может стать еще меньше.

Но парадокс!!!!!! На кнопочке "Количество записей он пишет столько сколько там должно быть" (например 10), но на вкладке "Данные" пишет, "fetched 3 records" .(3 для примера).

Та же самая картина наблюжается и в Delphi если делаю IBTable.Refresh, то количество показываемых записей уменьшается.

Еще одна загвоздка :)) - с компонентом IBDataSet таких проблем не наблюдается.

ТАК СКАЖИТЕ КТО НИБУДЬ PLEEEEEESE: "КАК ПРАВИЛЬНО НАПИСАТЬ СЕРИПТЫ UPDATESQL и DELETESQL"
Ну всмысле, чтобы они работали стандартно.....

Заранее благодарен.


 
АлексейК   (2003-05-20 04:11) [7]

А если не refrech, а close - open.


 
Zacho   (2003-05-20 07:03) [8]


> Andrio © (19.05.03 23:51)
>
>
> Для примера: Создаем БД из 2-х таблиц. Одна главная - другая
> детальная. В главной таблице создаем ComputedBy поле и вычисляем
> его как сумму по 1 полю в детальной таблице. Фишка в том,
> что в детальной таблице к 1-й записи в главной могут относится
> несколько записей.

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

> Результат: пожалуйста - от Ваших 10 записей в главной таблице
> показывется только 6. При повторном REFRESH количество записей
> может стать еще меньше.
>
> Но парадокс!!!!!! На кнопочке "Количество записей он пишет
> столько сколько там должно быть" (например 10), но на вкладке
> "Данные" пишет, "fetched 3 records" .(3 для примера).

У меня вроде бы все нормально. Похоже, просто баг в IBExpert. Какая версия ?

> Та же самая картина наблюжается и в Delphi если делаю IBTable.Refresh,
> то количество показываемых записей уменьшается.
> Еще одна загвоздка :)) - с компонентом IBDataSet таких проблем
> не наблюдается.

Ну и не используй TIBTable (вообще-то TIBTable и TIBQuery предназначены в основном для упрощения перовода старых проектов с BDE), используй TIBDataSet.

> ТАК СКАЖИТЕ КТО НИБУДЬ PLEEEEEESE: "КАК ПРАВИЛЬНО НАПИСАТЬ
> СЕРИПТЫ UPDATESQL и DELETESQL"
> Ну всмысле, чтобы они работали стандартно.....

Во-первых, не скрипты, а запросы. Скрипт - это последовательность команд. Во-вторых - тебе лучше знать, какие именно запросы у тебя должны быть. Нажми правую кнопку мыши на IBDataSet и выбери "DataSet Editor..."
А если хочешь более подробный ответ - приведи свой SelectSQL и напиши, что имненно должно происходить при Update и т.п.
Удачи !


 
Andrio   (2003-05-20 10:47) [9]


> АлексейК (20.05.03 04:11)
> А если не refrech, а close - open.


Close-Open - дает тот же результат.


 
Andrio   (2003-05-20 10:49) [10]


> Zacho © (20.05.03 07:03)



 
Andrio   (2003-05-20 11:03) [11]


> Zacho © (20.05.03 07:03)


> приведи свой SelectSQL и напиши, что имненно должно происходить
> при Update и т.п.


SelectSQL такойже как и Refresh насколько я понимаю...
Ну например: Select * from table1
Поля в таблице Field1,...,Field5.

1. При Delete текущая запись должна быть удалена
При Update текущая запись должна быть изменена согласно
текущим изменениям
При Insert должна быть вставлена запись (но какая? где
взять на нее ссылку? Ни чё не понимаю.........:( То же
самое с delete и Update)

2. И еще возможно ли связать два DataSet и более, как Master-
Source в TTable? Есть ли альтернатива Master-Source в DataSet?




 
Zacho   (2003-05-20 12:26) [12]


> Andrio © (20.05.03 11:03)
> SelectSQL такойже как и Refresh насколько я понимаю...
> Ну например: Select * from table1

Неправильно понимаешь. Вот простой пример:
Предположим, есть таблица MY_TABLE с полем ID - первичный ключ, FIELD_2,FIELD_3 и т.д. - остальные поля. SelectSQL - SELECT * FROM MY_TABLE
Тогда:
RefreshSQL - SELECT * FROM MY_TABLE WHERE ID=:ID
DeleteSQL - DELETE FROM MY_TABLE WHERE ID=:ID
InsertSQL - INSERT INTO MY_TABLE (ID,FIELD_2, ..) VALUES (:ID,FIELD_2,..)
Если ID - искуственный ПК и для его получения используется, например, генератор - то нужно знести в поле его значение в событии OnNewRecord или с помошью св-ва GeneratorField
ModifySQL - UPDATE MY_TABLE SET FIELD_2=:FIELD_2, FIELD_3=:FIELD_3, ... WHERE ID=:ID в случае, если ID не может редактироваться, если может - то UPDATE MY_TABLE SET ID=:ID FIELD_2=:FIELD_2, FIELD_3=:FIELD_3, ... WHERE ID=:OLD_ID

> 2. И еще возможно ли связать два DataSet и более, как Master-
> Source в TTable? Есть ли альтернатива Master-Source в
> DataSet?

Можно. В св-ве DataSource детайл-датасета указываешь DataSource, связанный с мастер-датасетом, и SelectSQL в детэйле должен выглядеть примерно так: SELECT * FROM DETAIL_TABLE WHERE MASTER_ID=:ID , где MASTER_ID - поле, связанное с ПК мастера, ID - первичный ключ в мастер-датасете.
Тоже самое можно сделать, написав обработчик OnAfterScroll мастера, в котором переоткрывать запрос в детейле, изменяя значение параметра в WHERE



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

Форум: "Базы";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
6-26630
3d
2003-03-10 17:32
2003.06.09
Сокеты


8-26614
Арм
2003-02-26 02:37
2003.06.09
Трабла с OpenGL


3-26361
Николай
2003-05-20 18:32
2003.06.09
проблема с таблицей


14-26657
Mazai
2003-05-24 08:28
2003.06.09
звонилка


1-26453
-=GaLaN=-
2003-05-27 11:44
2003.06.09
Правая кнопка в exlorer е





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