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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2009, 14:42   #1
amigo555
 
Регистрация: 12.04.2009
Сообщений: 8
По умолчанию Доступ к базе из нескольких модулей

Здравствуйте! Есть программа, использующая SQLite, как описано здесь: http://www.delphi.int.ru/articles/43/
Сделал, все, как там описано, все работает, поменял только в разделе implementation имя глобального объекта для работы с базой sldb: TSQLiteDatabase на MAIN_DB: TSQLiteDatabase.

Но возникла необходимость добавить в программу дополнительные формы, которые тоже используют этот объект MAIN_DB.
Сначала я из implementation перенес его в раздел Public, но компилятор стал ругаться: Undeclared Identifier: TSQLiteDatabase.
Аналогичная ситуация, когда я поместил его вот сюда
Код:
unit main;
...
private
    
    { Private declarations }

public

    { Public declarations }
    MAIN_DB:TSQLiteDatabase;//Поместил его сначала сюда
end;

var
  Form1: TForm1;
  MAIN_DB:TSQLiteDatabase;//Потом вот сюда

implementation

...

end.
Модули друг к другу все подключены.
Пожалуйста, подскажите, что я делаю неправильно, как сделать, чтобы БД была видна из всех модулей?
amigo555 вне форума Ответить с цитированием
Старый 12.04.2009, 14:44   #2
KingOfNothing
Пользователь
 
Регистрация: 06.02.2009
Сообщений: 89
По умолчанию

Попробуй так обращаться из других модулей -
Код:
main.MAIN_DB
когда он в var
Если вдруг захотите сказать мне спасибо - воспользуйтесь кнопкой "Добавить отзыв"
KingOfNothing вне форума Ответить с цитированием
Старый 12.04.2009, 18:44   #3
amigo555
 
Регистрация: 12.04.2009
Сообщений: 8
По умолчанию

Вся фигня в том, что даже когда в других модулях нет обращений к MAIN_DB , программа все равно не компилится, а компилятор ругается на Undeclared Identifier.
Интересно, что когда я поместил MAIN_DB в раздел var того модуля, где описан сам этот класс TSQLiteDatabase, т.е. модуля SQLiteTable3, все остальные модули этот объект увидели. Но, во-первых, пришлось править сторонний модуль, что не очень красиво, а, во-вторых, хочется понять, почему все-таки такое произошло. Часто ведь бывает, что класс описан в одном модуле, а объект в другом!
amigo555 вне форума Ответить с цитированием
Старый 12.04.2009, 18:48   #4
KingOfNothing
Пользователь
 
Регистрация: 06.02.2009
Сообщений: 89
По умолчанию

а в main в uses точно было - SQLiteTable3? а во всех остальных модулях в uses был main?
Если вдруг захотите сказать мне спасибо - воспользуйтесь кнопкой "Добавить отзыв"
KingOfNothing вне форума Ответить с цитированием
Старый 12.04.2009, 21:09   #5
amigo555
 
Регистрация: 12.04.2009
Сообщений: 8
По умолчанию

Если ты про тот uses, что в разделе implementation, а не в interface, то да, он там как раз и есть. Переключился на модуль main, потом в меню File->Use Unit, выбрал SQLite3 и SQLiteTable3. Потом из других модулей аналогично подцепил эти модули и main. Теоретически все должны друг друга видеть.
amigo555 вне форума Ответить с цитированием
Старый 12.04.2009, 23:21   #6
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
По умолчанию

в каждый модуль, в котором объявлена переменная класса TSQLiteDatabase, в interface > uses пропиши тот юнит, где живет класс TSQLiteDatabase, а если в implementation он уже есть, то лучше перенеси наверх, потому что по смыслу ошибки явно видно, что он не знает откуда брать данные для этого класса
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
koma_grusha вне форума Ответить с цитированием
Старый 13.04.2009, 11:05   #7
amigo555
 
Регистрация: 12.04.2009
Сообщений: 8
По умолчанию

Получается, что uses в разделе interface обладает бОльшим приоритетом, чем uses в implementation? Перенес в interface > uses сразу SQLiteTable3 и SQLite3. Сейчас объект виден в тех модулях, которые используют main. Не будет ошибкой, что я перенес туда сразу два модуля (на всякий случай)?
amigo555 вне форума Ответить с цитированием
Старый 13.04.2009, 14:08   #8
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
Радость

нет ошибкой не будет, но если ты вторую не используешь, то лучше не хлами прогу.
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
koma_grusha вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подключение модулей... Teleport Помощь студентам 2 25.06.2008 00:26
подключение модулей... Teleport Помощь студентам 1 13.06.2008 15:04
Доступ к com порту для нескольких приложений Lexx Win Api 11 06.04.2007 20:10
Доступ к базе SQL из Delphi Miranda БД в Delphi 3 26.03.2007 13:14