![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| holodnaya |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 30.7.2008 Репутация: нет Всего: нет |
Кто хорошо знаком с компонентами, позволяющими работать Delphi с FireBird, подскажите, пожалуйста, как лучше сделать.
В одной форме у меня таблица с выведеными данными по студентам (Использую cxGrid, соединенный с IBDataSet1). А редактирование и добавление новых данных происходит в другой форме (в основном, используются DBEdit-ы). Для того, чтобы во второй форме отображались данные по выбранному студенту, DBEdit- ы соединяю с тем же IBDataSet1. в IBDataSet1 запрос только на выборку данных (SelectSQL). При этом я понимаю, что с таким запросом через IBDataSet1 с данными кроме выбора ничего больше сделать нельзя. Задаю запросы Insert/Update/Delete/Refresh, и программа ругается...
При этом меня смущает, что все эти запросы хранятся одновременно в соответсвующих свойствах SelectSQL, InsertSQL и т.д. Вопрос №1. Как же всё-таки правильно сделать? Сразу их задавать или по мере необходимости (при вызове определённой процедуры и соответсвенно в коде писать)? И ещё вычитала одно замечание, что при использовании IBDataSet для выборки данных, их изменение и добавление лучше проводить через IBQuery... но тогда придётся ручками код прописывать для вывода данных на вторую форму. Вопрос №2Каким способом (с помощью какого компонента) лучше и правильнее изменять данные (при этом нужно учесть, что данные редактируются не в самой таблице, а в другой форме). |
|||
|
||||
| holodnaya |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 30.7.2008 Репутация: нет Всего: нет |
Ура! Мне удалось решить один вопрос
Все запросы SelectSQL, InsertSQL... действительно нужно устанавливать в IBDataSet одновременно (наверное, в нужное время они вызываются как у IBTable, только у IBTable запросы формируются автоматически, а здесь можно самим формировать). Причем, очень важно, чтобы последовательность полей в Insert была такой же как в базе (генератором запроса может и в другом порядке сформироваться). А ошибка выходила потому, что имя поля "WORK" по каким-то причинам не понравилось компоненту, обращающемуся из делфи к базе (наверное, зарезервированное слово... А вот на вопрос, каким компонентом правильнее изменять данные IBDataSet или IBQuery, я всё же надеюсь получить ответ ) Это сообщение отредактировал(а) holodnaya - 9.11.2009, 23:33 |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Я бы предпочёл Query - для того он и придуман, в конце концов. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 4 Всего: 17 |
Именно так оно и есть.
Это уже как кому больше нравится. IBDataSet по большому счету - это совокупность нескольких IBQuery. Можно вообще пользоваться одним IBQuery и формировать запросы в тексте программы. Вот Данкинг-у удобней IBQuery, а мне IBDataSet, т.к. использую FibPlus. -------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
| holodnaya |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 30.7.2008 Репутация: нет Всего: нет |
IBDataSet проще использовать, но тогда не очень красиво получается, в одной форме добавляешь данные или редактируешь, в общей таблице видны сразу все изменения. Как сделать так, чтобы изменения в таблице были видны только после закрытия Формы редактирования? Если использую IBQuery и пишу такой код (при нажатии на кнопочку "Изменить данные")
получаю ошибку
Или как устранить эту ошибку и в чем причина её возникновения? Это сообщение отредактировал(а) holodnaya - 10.11.2009, 23:17 |
||||
|
|||||
| Данкинг |
|
||||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Кому как.
Значение параметра присваивай после DM.IBQuery1.SQL.Add(Query). -------------------- There's nothing left but silent epitaphs. |
||||
|
|||||
| holodnaya |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 30.7.2008 Репутация: нет Всего: нет |
||||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Эмм... holodnaya, текст ошибки читала?
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| holodnaya |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 30.7.2008 Репутация: нет Всего: нет |
||||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Как переводится сообщение об ошибке? Это сообщение отредактировал(а) Данкинг - 11.11.2009, 00:18 -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| holodnaya |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 30.7.2008 Репутация: нет Всего: нет |
С английским у меня, конечно, не очень... Но я так понимаю, что столбец ID_STUDENT неизвестен (то есть не найден)... Я понимаю, если бы в заспросе было несколько таблиц и в каждой из них было одинаковое поле, но здесь-то одна таблица и поле там такое точно есть |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Тогда попробуй: 1) Вызывать DM.IBQuery1.Close перед DM.IBQuery1.SQL.Clear 2) Переименовать параметр ID_STUDENT, чтобы он не совпадал с названием поля. Добавлено через 56 секунд Да, и вообще, с запросами SELECT... используется DM.IBQuery1.Open, а не DM.IBQuery1.ExecSQL. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| holodnaya |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 30.7.2008 Репутация: нет Всего: нет |
Выдает ошибку, что парамерт param не найден. А его не надо изначально ещё как-то объявлять, прежде чем устанавливать туда значение? |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Бывает такая тупость, как "параметр не найден"... В таких случаях я делаю просто:
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| holodnaya |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 30.7.2008 Репутация: нет Всего: нет |
Я тоже так делаю иногда )))
Нашла как здесь справиться, нужно просто у свойства ParamCheck = true, так как используются параметры в запросе Спасибо за советы, Данкинг! Это сообщение отредактировал(а) holodnaya - 11.11.2009, 00:52 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |