Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2007, 21:35   #1
3lander
Пользователь
 
Регистрация: 07.10.2007
Сообщений: 49
Вопрос Помогите с IBX в Delphi 7

Уважаемые программеры! Никак не могу заставить работать БД с помощью компонентов IBX (закладка в Дельфи7 "InterBase").
Кидаю на форму компоненты: IBDataBase, IBTransaction, IBDataSet, IBQuery - все связи нормальные, поля по идеи как надо установлены (единственное что в IBTransaction особо ничего не менял, тока связял с др компонентами) и с помощью TDataSet подключаюсь к DBGrid.
Таблица открывается нормально (для примера 2 поля - ключевое INTEGER и вещественное DECIMAL(15,2)) - но при попытки добавления выскакиевает ошибка - "таблица находится в режиме Read Only". Как это исправить?
Заранее спасибо,
3Lander.
3lander вне форума Ответить с цитированием
Старый 07.10.2007, 21:53   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А вы попробуйте использовать спец. компонент IBUpdateSQL...
mihali4 вне форума Ответить с цитированием
Старый 07.10.2007, 21:54   #3
3lander
Пользователь
 
Регистрация: 07.10.2007
Сообщений: 49
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
А вы попробуйте использовать спец. компонент IBUpdateSQL...

ясно))) и какие параметры в нем надо указать если не секрет
3lander вне форума Ответить с цитированием
Старый 07.10.2007, 22:06   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

У IBQuery (как и у IBTable) последней строкой в инспекторе объектов стоит свойство UpdateObject. Так что любой IBUpdateSQL можно связать с любым IBQuery.
А дальше совсем просто - присваиваем нужное значение нужному свойству IBUpdateSQL (надеюсь, свойства понятны из их названий? ) и запускаем на выполнение обычным способом - ExecSQL...
Вместо IBQuery можно спокойно использовать IBTable, ведь IBUpdateSQL все за них и для них сделает...
mihali4 вне форума Ответить с цитированием
Старый 07.10.2007, 22:13   #5
3lander
Пользователь
 
Регистрация: 07.10.2007
Сообщений: 49
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
У IBQuery (как и у IBTable) последней строкой в инспекторе объектов стоит свойство UpdateObject. Так что любой IBUpdateSQL можно связать с любым IBQuery.
А дальше совсем просто - присваиваем нужное значение нужному свойству IBUpdateSQL (надеюсь, свойства понятны из их названий? ) и запускаем на выполнение обычным способом - ExecSQL...
Вместо IBQuery можно спокойно использовать IBTable, ведь IBUpdateSQL все за них и для них сделает...

мда... ошибка ушла - но всё подвисло)))
база состоит из 2 полей (для теста): NUMB INTEGER, SUMM DECIMAL(15,2)

вот код на кнопке:
IBQuery1.Open;
IBQuery1.Edit;
IBQuery1.Append;
IBQuery1['NUMB']:=1;
IBQuery1['SUMM']:=11.11;
IBQuery1.Post;


(в IBUpdateSQL) добавил след код: (он кстати сгенерился сам в IBDataSet):

delete from MYTABLE
where
NUMB = :OLD_NUMB

insert into MYTABLE
(SUMM)
values
(:SUMM)

update MYTABLE
set
SUMM = :SUMM
where
NUMB = :OLD_NUMB
3lander вне форума Ответить с цитированием
Старый 07.10.2007, 22:16   #6
3lander
Пользователь
 
Регистрация: 07.10.2007
Сообщений: 49
По умолчанию

надеюсь ничего что я использую .Open, а не ExecSQL - менял но не пашет((
3lander вне форума Ответить с цитированием
Старый 07.10.2007, 22:20   #7
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

выкинь нах IBQuery вместе с IBUpdateSQL, а оставь вместо них один IBDAtaSet с запросами из выше упомянутых компонент. IBQuery - зло. Если хотите убедиться, то помотрите исходники. IbQuery фактически урезанный IBDataSet, а IBUpdateSQL делает IBQuery по функционалу аналогом IBDataSet, так зачем эти пляски с бубном, когда есть нормальный один компонент?
pu4koff вне форума Ответить с цитированием
Старый 07.10.2007, 22:21   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от 3lander Посмотреть сообщение
надеюсь ничего что я использую .Open, а не ExecSQL - менял но не пашет((
Open - служит для открытия набора данных, а ExecSQL - просто для выполнения запроса, т.е. если надо вставить запись, то надо ExecSQL, а для получения записей таблицы нужен Open
pu4koff вне форума Ответить с цитированием
Старый 07.10.2007, 22:23   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Так "код на кнопке" теперь не нужен!
Там теперь нужно задать переменные для скулек IBUpdateSQL и запустить IBUpdateSQL.ExecSQL.
Потом нужно просто закрыть/открыть IBQuery, чтобы увидеть изменения после отработки IBUpdateSQL.ExecSQL.
И что это вообще за конструкция:
Код:
IBQuery1.Edit;
IBQuery1.Append;
???
Уж либо добавляем, либо редактируем, если уж на то пошло

P.S. И по поводу IBDаtaSet pu4koFF правильно указал...

Последний раз редактировалось mihali4; 07.10.2007 в 22:38.
mihali4 вне форума Ответить с цитированием
Старый 07.10.2007, 22:24   #10
3lander
Пользователь
 
Регистрация: 07.10.2007
Сообщений: 49
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
выкинь нах IBQuery вместе с IBUpdateSQL, а оставь вместо них один IBDAtaSet с запросами из выше упомянутых компонент. IBQuery - зло. Если хотите убедиться, то помотрите исходники. IbQuery фактически урезанный IBDataSet, а IBUpdateSQL делает IBQuery по функционалу аналогом IBDataSet, так зачем эти пляски с бубном, когда есть нормальный один компонент?
боюсь без компонента IBTransaction - не пашет.
вощем выкинул что вы сказали - все подвисло нахрен((
3lander вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с Delphi Lenusik Помощь студентам 0 31.05.2008 21:36