![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 07.10.2007
Сообщений: 49
|
![]()
Уважаемые программеры! Никак не могу заставить работать БД с помощью компонентов IBX (закладка в Дельфи7 "InterBase").
Кидаю на форму компоненты: IBDataBase, IBTransaction, IBDataSet, IBQuery - все связи нормальные, поля по идеи как надо установлены (единственное что в IBTransaction особо ничего не менял, тока связял с др компонентами) и с помощью TDataSet подключаюсь к DBGrid. Таблица открывается нормально (для примера 2 поля - ключевое INTEGER и вещественное DECIMAL(15,2)) - но при попытки добавления выскакиевает ошибка - "таблица находится в режиме Read Only". Как это исправить? Заранее спасибо, 3Lander. |
![]() |
![]() |
![]() |
#2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
А вы попробуйте использовать спец. компонент IBUpdateSQL...
![]() |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 07.10.2007
Сообщений: 49
|
![]() |
![]() |
![]() |
![]() |
#4 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
У IBQuery (как и у IBTable) последней строкой в инспекторе объектов стоит свойство UpdateObject. Так что любой IBUpdateSQL можно связать с любым IBQuery.
А дальше совсем просто - присваиваем нужное значение нужному свойству IBUpdateSQL (надеюсь, свойства понятны из их названий? ![]() Вместо IBQuery можно спокойно использовать IBTable, ведь IBUpdateSQL все за них и для них сделает... ![]() |
![]() |
![]() |
![]() |
#5 | |
Пользователь
Регистрация: 07.10.2007
Сообщений: 49
|
![]() Цитата:
мда... ошибка ушла - но всё подвисло))) база состоит из 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 |
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 07.10.2007
Сообщений: 49
|
![]()
надеюсь ничего что я использую .Open, а не ExecSQL - менял но не пашет((
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
выкинь нах IBQuery вместе с IBUpdateSQL, а оставь вместо них один IBDAtaSet с запросами из выше упомянутых компонент. IBQuery - зло. Если хотите убедиться, то помотрите исходники. IbQuery фактически урезанный IBDataSet, а IBUpdateSQL делает IBQuery по функционалу аналогом IBDataSet, так зачем эти пляски с бубном, когда есть нормальный один компонент?
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Open - служит для открытия набора данных, а ExecSQL - просто для выполнения запроса, т.е. если надо вставить запись, то надо ExecSQL, а для получения записей таблицы нужен Open
|
![]() |
![]() |
![]() |
#9 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Так "код на кнопке" теперь не нужен!
Там теперь нужно задать переменные для скулек IBUpdateSQL и запустить IBUpdateSQL.ExecSQL. Потом нужно просто закрыть/открыть IBQuery, чтобы увидеть изменения после отработки IBUpdateSQL.ExecSQL. И что это вообще за конструкция: Код:
Уж либо добавляем, либо редактируем, если уж на то пошло ![]() P.S. И по поводу IBDаtaSet pu4koFF правильно указал... Последний раз редактировалось mihali4; 07.10.2007 в 22:38. |
![]() |
![]() |
![]() |
#10 | |
Пользователь
Регистрация: 07.10.2007
Сообщений: 49
|
![]() Цитата:
вощем выкинул что вы сказали - все подвисло нахрен(( |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите с Delphi | Lenusik | Помощь студентам | 0 | 31.05.2008 21:36 |