Непонятки с доступом к базе данных
Модератор: Модераторы
Непонятки с доступом к базе данных
На форме размещены SQLQuery, DBGrid(подключенный к SQLQuery) и SQLScript.
Если SQLQuery.Active = true приложение при запуске выдает ошибку "Database not assigned".
Если установить SQLQuery.Active=false, повесить активизацию SQLQuery на кнопку и включать ее так после отображения формы, все прекрасно работает. Запросы с INSERT INTO через SQLScript тоже работают.
Подскажите пожалуйста, в чем дело.
Если SQLQuery.Active = true приложение при запуске выдает ошибку "Database not assigned".
Если установить SQLQuery.Active=false, повесить активизацию SQLQuery на кнопку и включать ее так после отображения формы, все прекрасно работает. Запросы с INSERT INTO через SQLScript тоже работают.
Подскажите пожалуйста, в чем дело.
dunin писал(а):Думаю не хватает компонентов типа tКонекшн и tТранкзация...
Они тоже есть. Только в отдельном DataModule. И DataSource тоже присутствует. Иначе после нажатия на кнопку содержимое таблицы не отображалось бы в Grid'е.
SQLite3Connection1.Active=True
SQLite3Connection1.DatabaseName='C:\base.db'
SQLite3Connection1.Transaction=SQLTransaction1
SQLTransaction1.Database=SQLite3Connection1
SqlQuery1.Database=DataModule1.SQLite3Connection1
SqlQuery1.Transaction=DataModule1.SQLTransaction1
SqlScript1.Database=DataModule1.SQLite3Connection1
SqlScript1.Transaction=DataModule1.SQLTransaction1
Datasource1.DataSet=SQLQuery1
DbGrid1.DataSource=Datasource1
krab писал(а):Они тоже есть. Только в отдельном DataModule.
А порядок создания какой? И зачем, если есть DataModule, размещать SqlQuery на форме?
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
Когда создается DataModule? До создания основной формы или после?
v-t-l писал(а):krab писал(а):Они тоже есть. Только в отдельном DataModule.
А порядок создания какой? И зачем, если есть DataModule, размещать SqlQuery на форме?
Потому что приложение будет иметь около шести форм с кучей компонент. Если я буду хранить все в DataModule, получиться каша. А так общие Connection и Transaction будут в DataModule, а остальное - на каждой форме.
Padre_Mortius писал(а):Когда создается DataModule? До создания основной формы или после?
Application.Initialize;
Application.CreateForm(TMyDataModule, DataModule1);
Application.CreateForm(TFormMain, Main);
Application.CreateForm(TFormAdd, FormAdd);
Application.Run;
Раньше DataModule создавался вторым, но я переделал к вышеприведенному виду. Никакой разницы.
Но потом попробовал перенести Соединение и Транзакцию на главную форму. После чего все заработало. Даже скрипт с формы FormAdd успешно добавляет данные.
Не понимаю только в чем причина и почему с DataModule не получается.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
У вас не инициализируются параметры для нормального подключения к базе. Смотрите где не прописали. Либо выкладывайте проект, иначе сложно искать ошибку
Padre_Mortius писал(а):У вас не инициализируются параметры для нормального подключения к базе. Смотрите где не прописали. Либо выкладывайте проект, иначе сложно искать ошибку
Так ведь все дело в том, что если я вырезаю и помещаю(cut & paste) эти же компоненты на форму - все работает. Если переношу обратно в DataModule - нет. Естественно, при этом сбрасываются параметры Query.Database и т. п. и их приходится повторно выбирать.
Причем в рантайме(в конструкторе форм Лазаруса) таблица прекрасно отображается в DBGrid.
Или нужно прописывать и что-то еще?
Последний раз редактировалось krab 26.02.2010 22:29:20, всего редактировалось 1 раз.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
Вы параметры заполняете в самой программе или в инспекторе прописываете? Для начала попробуйте в инспекторе прописать и постепенно переносите в real-time
Padre_Mortius писал(а):Вы параметры заполняете в самой программе или в инспекторе прописываете? Для начала попробуйте в инспекторе прописать и постепенно переносите в real-time
Все прописано в инспекторе. Я только Query пробовал делать Active'ным кнопкой и то только как обходной путь. А так все работает в самой среде. Только после запуска возникают проблемы.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
если выложите проект, то смогу подсказать где ошибка.
Padre_Mortius писал(а):если выложите проект, то смогу подсказать где ошибка.
Сделал тестовый пример для демонстрации этой ошибки.
Выложил на 2 файлохранилища:
http://filebox.od.ua/?file=ecaf2ce44966dbfb7f411e583218233a
http://www.2shared.com/file/11717978/c8de8d94/help.html
В архиве:
- база данных SQLite test1.db
- работающий пример
- пример, вызывающий ошибку.
Чтобы работало базу test1.db нужно положить в C:\
Два последних отличаются только тем, что в работающем все компоненты на одной форме, в другом Connection и Transaction на DataModule.
В "ошибочном" примере попробуйте включать Query кнопкой activatequery. Все будет прекрасно отображатся в Grid. После этого в инспекторе задайте свойство Query1.Active=True. В конструкторе форм Лазаруса все будет работать и показывать результат в Grid, а вот при запуске программа будет прерыватся "Database not assigned".
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
проекты полность выложите. не хватает файлов *.lrs
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
добавьте в mainunit.pas в модули datamodule и все должно компилиться
