Форум: "Базы";
Текущий архив: 2002.01.31;
Скачать: [xml.tar.bz2];
ВнизЗлостный IBX Найти похожие ветки
← →
Тонио-Лунатик (2001-12-25 08:43) [0]Приветствую всех! Помогите ежели сможете, а в этом я просто уверен. Для выборки данных использую IBQuery+IBUpdateSQL, причём SQL-запрос в IBQuery таков: "Select * From PROCEDURE(:Param)". Подчёркиваю данные передаются в IBQuery процедурой выборки. Казалось бы всё хорошо, выборка осуществляется корректно, но этот паразит не пускает редактировать данные, полученные в результате. Как только меняю в запросе PROCEDURE(:Param) на какой-нить Table, всё отлично - редактируй сколько влезет! Это что же получается - при выборке из процедуры выборки "живые" обновления не возможны? (Delphi 5, IB 5.6)
← →
Alexandr (2001-12-25 09:20) [1]надо в UpdateSQL прописать запросы на обновление.
Включить cachedUpdates у dataset"а,
да еще и транзакции...
← →
Тонио-Лунатик (2001-12-25 09:31) [2]На сколько я понимаю запросы на обновление в UpdateSQL активизируются при попытке сохранения скорректированных данных в базе, а в этом то вся и проблема - я не могу изменить данные в DBGrid"е он просто меня не пускает. А CachedUpdates := true - всё включено!
← →
AlexeyV (2001-12-25 09:48) [3]А ты подумай как IBUpdateSQL будет добавлять, редактировать и удалять записи из твоей выборки. Ты создал для этого процедуры и прописал все это в IBUpdateSQL? Да и даже если пропишеть то я сомневаюсь что он сможет.
А зачем тебе вообще делать выборку процедурой? Чем плох обычный select? Или у тебя там очень сложная выборка а уже из нее ты потом выбираешь то что надо? Так тогда создай представление и выбирай из него. Если в качестве параметра твоей процедуры ты передавал что-то для выборки то также спокойно передавай это в IBQuery как параметр.
← →
Romkin (2001-12-25 11:07) [4]2AlexeyV Представления не надо - тормозит... а результат тот же
Все нормально, делать выборку процедурой очень удобно, просто редактировать можно только запросы к одной таблице, и еще есть ограничения - см описание СУБД
А UpdateSQL срабатывает по команде ApplyUpdates - у TIBQuery или TIBDatabase, естественно, предварительно надо прописать запросы.
А чтобы пускало в редактирование - надо установить св-во UpdateObject
После этого по двойному щелчку по TUpdateSQL создаются запросы, надо только указать таблицу и ключевые и обновляемые поля, а refreshSQL сделать таким же, как и select (но where оставить)
← →
Тонио-Лунатик (2001-12-25 11:13) [5]To AlexeyV ты не так понял. IBUpdateSQL будет добавлять, редактировать и удалять записи из моей выборки только после вызова метода ApplyUpdates() компонента IBQuery - который подтверждает все сделанные изменения, вот тогда то и начинают работать все эти процедуры, прописанные в IBUpdateSQL. Когда же я корректирую данные в DBGrid"е все изменения происходят во временном буфере у клиента, не более - база остаётся неизменной.
По поводу зачем я использую процедуру выборки, вообще-то это - нормальная ситуация, тем более - обычный Select не устраивает, хотя бы потому, что я использую For Select.
Представление не могу использовать, по двум причинам:
1.Представление может быть сформировано на основе одной или нескольких таблиц, или на основе другого представления - представлений на основе процедур не существует (по крайней мере в IB).
2.В IB-представлениях нет возможности использования каких-либо переменных, только скалярные значения, а уменя результат процедуры, зависит от входного параметра!
← →
Alexandr (2001-12-25 11:20) [6]да все правильно.
Должно работать если Cached Updates включено и UpdateObject прописан
а вообще, чем тебе IbdataSet не подходит. посмотри, по мему он тебе больше подойдет...
← →
Тонио-Лунатик (2001-12-25 11:21) [7]Пардон, пока писал предыдущий свой message Romkin меня опередил, получилось два раза об одном и том же. Сорри!
2 Romkin свойство UpdateObject - установлено, усё нормально, даже в DBGride свойство dgEditing := true. Однако редактировать не пущает.
← →
Romkin (2001-12-25 11:32) [8]????
У меня все работает - сам попробовал, прежде чем писать прошлое сообщение ;-)
1. Кидаешь TIBDatabase, устанавливаешь параметры
2. TIBTransaction - устанавливаешь Read commited, и ссылку на базу
3. TIBQuery - указываешь эту транзакцию + Cashed updates = true, пишешь запрос
4. TIBUpdateSQL - прописываешь у TIBQuery его в качестве обновителя
5. Дважды щелкнув, указываешь имя таблицы и поля, генеришь SQL
6. TDataSource - к TIBQuery, + TDBGrid
7. Открываешь запрос и запускаешь прогу - все редактируется...
PS у меня IBX4.52, рекомендую обновить до него
← →
Тонио-Лунатик (2001-12-25 11:59) [9]2 Romkin: не понял по поводу второго пункта "TIBTransaction - устанавливаешь Read commited" - это где такое?
Если делать запрос - выборку из таблицы, то всё работает, но если осуществлять выборку из процедуры, то не работает.
IBX 4.52 - ссылочку подскажи.
← →
Romkin (2001-12-25 12:20) [10]Опять двойной щелчок - выйдет диалог (похоже, все компоненты TIB оснащены установочными диалогами), выбираешь read commited, или просто вручную
в Params строки:
read_committed
rec_version
nowait
IBX4.52 - рекомендуется Borland
http://www.borland.com/devsupport/interbase/ibx_updates.html
Последние обновления IBX для D5|D6 - http://ib.demo.ru
там же много полезного
Насчет выборки - см TQuery.LiveResult - там объяснение. в IB, если не ошибаюсь, нередактируемой будет уже выборка с order by..
← →
Тонио-Лунатик (2001-12-25 13:23) [11]"Насчет выборки - см TQuery.LiveResult - там объяснение. в IB, если не ошибаюсь, нередактируемой будет уже выборка с order by.." - если можешь, попдробнее - где и как. Может ты имеешь в виду TQuery.RequestLive? А то о TQuery.LiveResult - первый раз слышу.
← →
Romkin (2001-12-25 13:49) [12]Ошибся - CanModify, впрочем, тожесамокак RequestLive
для IB следующие ограничения (programmers guide)
To be updatable, a view must meet the following
conditions:
It derives its columns from a single table or updatable view.
It does not define a self-join of the base table.
It does not reference columns derived from arithmetic expressions.
The view’s SELECT statement does not contain:
·A WHERE clause that uses the DISTINCT predicate
·A HAVING clause
·Functions
·Nested queries
·Stored procedures
← →
Тонио-Лунатик (2001-12-26 09:16) [13]Спасибо всем за участие и пресональный Thank"s Romkin"у. Действительно в этом случае использовать выборку из хранимой процедуры незя.
Удачи
← →
Alexandr (2001-12-26 09:43) [14]все.
Запутали человека.
ну и фиг с ним...
← →
Alexandr (2001-12-26 09:43) [15]все.
Запутали человека.
ну и фиг с ним...(Тионио-лунатиком)
← →
Romkin (2001-12-26 10:44) [16]Кто сказал нельзя??!
У меня половина базы так редактируется, просто делаешь выборку, потом при нажатии на Редактировать показываешь форму с отдельным query только для текущей записи, после этого делаешь рефреш списка, и все летает...
Выборка через SP в Interbase вообще практически самый быстрый способ - все заранее подготовлено
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.01.31;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c