Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-99870
DiggerAbstract
2001-12-27 04:26
2002.01.31
PLZ.


3-99925
DarT
2001-12-28 12:07
2002.01.31
Два вопроса


1-99935
veZuk
2002-01-12 12:14
2002.01.31
Параметры запуска


4-100110
Song
2001-12-02 22:50
2002.01.31
Узнать, что программа уже запущена


3-99849
Роман_
2001-12-26 10:59
2002.01.31
Отключить триггеры InterBase ?





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