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

Вниз

Злостный 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.011 c
6-100028
Landgraph
2001-11-08 10:34
2002.01.31
Перехват запросов...


3-99908
dmitryK
2001-12-29 12:43
2002.01.31
Через BDE к MSSQL6.5 в Delphi 6


1-100001
bill
2002-01-15 09:36
2002.01.31
считывание дос файла построчно в ListBox


3-99883
pahan
2001-12-26 09:29
2002.01.31
шрифт


3-99898
Nemesis
2001-12-28 11:43
2002.01.31
Поднимая вопрос об отчетах ...