Непонятки с доступом к базе данных

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Непонятки с доступом к базе данных

Сообщение krab » 24.02.2010 20:42:15

На форме размещены SQLQuery, DBGrid(подключенный к SQLQuery) и SQLScript.

Если SQLQuery.Active = true приложение при запуске выдает ошибку "Database not assigned".
Если установить SQLQuery.Active=false, повесить активизацию SQLQuery на кнопку и включать ее так после отображения формы, все прекрасно работает. Запросы с INSERT INTO через SQLScript тоже работают.

Подскажите пожалуйста, в чем дело.
krab
постоялец
 
Сообщения: 108
Зарегистрирован: 17.02.2010 18:23:08

Re: Непонятки с доступом к базе данных

Сообщение dunin » 24.02.2010 21:54:04

krab писал(а):На форме размещены SQLQuery, DBGrid(подключенный к SQLQuery) и SQLScript.
...
Подскажите пожалуйста, в чем дело.

Думаю не хватает компонентов типа tКонекшн и tТранкзация... :wink:
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Непонятки с доступом к базе данных

Сообщение krab » 24.02.2010 22:15:16

dunin писал(а):Думаю не хватает компонентов типа tКонекшн и tТранкзация... :wink:

Они тоже есть. Только в отдельном 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
постоялец
 
Сообщения: 108
Зарегистрирован: 17.02.2010 18:23:08

Re: Непонятки с доступом к базе данных

Сообщение v-t-l » 25.02.2010 12:07:05

krab писал(а):Они тоже есть. Только в отдельном DataModule.

А порядок создания какой? И зачем, если есть DataModule, размещать SqlQuery на форме?
v-t-l
энтузиаст
 
Сообщения: 735
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Непонятки с доступом к базе данных

Сообщение Padre_Mortius » 25.02.2010 14:43:50

Когда создается DataModule? До создания основной формы или после?
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Непонятки с доступом к базе данных

Сообщение krab » 26.02.2010 21:28:29

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 не получается. :?
krab
постоялец
 
Сообщения: 108
Зарегистрирован: 17.02.2010 18:23:08

Re: Непонятки с доступом к базе данных

Сообщение Padre_Mortius » 26.02.2010 22:56:10

У вас не инициализируются параметры для нормального подключения к базе. Смотрите где не прописали. Либо выкладывайте проект, иначе сложно искать ошибку
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Непонятки с доступом к базе данных

Сообщение krab » 26.02.2010 23:24:40

Padre_Mortius писал(а):У вас не инициализируются параметры для нормального подключения к базе. Смотрите где не прописали. Либо выкладывайте проект, иначе сложно искать ошибку


Так ведь все дело в том, что если я вырезаю и помещаю(cut & paste) эти же компоненты на форму - все работает. Если переношу обратно в DataModule - нет. Естественно, при этом сбрасываются параметры Query.Database и т. п. и их приходится повторно выбирать.

Причем в рантайме(в конструкторе форм Лазаруса) таблица прекрасно отображается в DBGrid.

Или нужно прописывать и что-то еще?
Последний раз редактировалось krab 26.02.2010 23:29:20, всего редактировалось 1 раз.
krab
постоялец
 
Сообщения: 108
Зарегистрирован: 17.02.2010 18:23:08

Re: Непонятки с доступом к базе данных

Сообщение Padre_Mortius » 26.02.2010 23:28:37

Вы параметры заполняете в самой программе или в инспекторе прописываете? Для начала попробуйте в инспекторе прописать и постепенно переносите в real-time
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Непонятки с доступом к базе данных

Сообщение krab » 26.02.2010 23:31:10

Padre_Mortius писал(а):Вы параметры заполняете в самой программе или в инспекторе прописываете? Для начала попробуйте в инспекторе прописать и постепенно переносите в real-time

Все прописано в инспекторе. Я только Query пробовал делать Active'ным кнопкой и то только как обходной путь. А так все работает в самой среде. Только после запуска возникают проблемы.
krab
постоялец
 
Сообщения: 108
Зарегистрирован: 17.02.2010 18:23:08

Re: Непонятки с доступом к базе данных

Сообщение Padre_Mortius » 26.02.2010 23:39:43

если выложите проект, то смогу подсказать где ошибка.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Непонятки с доступом к базе данных

Сообщение krab » 27.02.2010 21:53:01

Padre_Mortius писал(а):если выложите проект, то смогу подсказать где ошибка.

Сделал тестовый пример для демонстрации этой ошибки.

Выложил на 2 файлохранилища:
http://filebox.od.ua/?file=ecaf2ce44966dbfb7f411e583218233a
http://www.2shared.com/file/11717978/c8de8d94/help.html

В архиве:
  1. база данных SQLite test1.db
  2. работающий пример
  3. пример, вызывающий ошибку.

Чтобы работало базу test1.db нужно положить в C:\
Два последних отличаются только тем, что в работающем все компоненты на одной форме, в другом Connection и Transaction на DataModule.

В "ошибочном" примере попробуйте включать Query кнопкой activatequery. Все будет прекрасно отображатся в Grid. После этого в инспекторе задайте свойство Query1.Active=True. В конструкторе форм Лазаруса все будет работать и показывать результат в Grid, а вот при запуске программа будет прерыватся "Database not assigned".
krab
постоялец
 
Сообщения: 108
Зарегистрирован: 17.02.2010 18:23:08

Re: Непонятки с доступом к базе данных

Сообщение Padre_Mortius » 27.02.2010 23:46:11

проекты полность выложите. не хватает файлов *.lrs
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб


Re: Непонятки с доступом к базе данных

Сообщение Padre_Mortius » 28.02.2010 00:48:21

добавьте в mainunit.pas в модули datamodule и все должно компилиться
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: MailRu[bot] и гости: 56

Рейтинг@Mail.ru