Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

базы данных

1.8K
23 сентября 2005 года
Azaze1
102 / / 08.01.2005
Есть mdb база. Можно ли как-нибудь через ADO (SQL запросом или иным способом) узнать, содержится ли в этой базе таблица с известным именем?
И ещё... После использования метода ADOQuery1->ExecSQL() в процессах появляется MCACCES и так и висит, пока не закроется само приложение. Т.е. фактически приложение намертво привязывается к базе, и перезаписать эту базу нельзя, т.к. она используется приложением. Как это можно убрать? Перепробовал все методы и способы закрытия ADOQuery1, от Active = false до тупого ADOQuery1->Free. Помогает только последнее, но так мы фактически убиваем сам компонент ADOQuery... Есть идеи?
5.2K
26 сентября 2005 года
Duncan MacLeod
14 / / 14.11.2003
Цитата:
Originally posted by Azaze1
Есть mdb база. Можно ли как-нибудь через ADO (SQL запросом или иным способом) узнать, содержится ли в этой базе таблица с известным именем?
И ещё... После использования метода ADOQuery1->ExecSQL() в процессах появляется MCACCES и так и висит, пока не закроется само приложение. Т.е. фактически приложение намертво привязывается к базе, и перезаписать эту базу нельзя, т.к. она используется приложением. Как это можно убрать?



Определить можно! :) Я сейчас просто под Delphi, поэтому потом стрелочки поставишь вместо точек. :)

Получить список таблиц в базе можно через ADOConnection.

Код:
var TN:TStrings;
begin
  TN := TStringList.Create;
  try
  ADOConnection1.GetTableNames(TN,false); //false или true будут ли системные
//таблицы посчитаны, не помню что за что отвечает.

  //а здесь крутишь цикл по элементам листа и в нем проверяешь, есть ли твоя таблица
  finally;
  TN.Free;
  end;
end;


Лично у меня после ExecSQL ничего не появляется. :) Я не знаю как у тебя сделано, но предложил бы сделать через ADOConnection . У него есть замечательное свойство Connected. Отсоединяешься и делаешь с базой что хочешь и приложение тебе не мешает!
А что значит перезаписать эту базу нельзя: 1) нельзя добавить запись в нее или 2)удалить файл базы?
Если 1) то, тогда есть настройки открытия базы в драйвере, измени их на ReadWrite.
Если 2) то ADOConnection1.Connected := false;
1.8K
26 сентября 2005 года
Azaze1
102 / / 08.01.2005
за "список таблиц" спасибо, чичас попробую. =))

Случай именно второй, то есть базу (сам файл) нельзя перезаписать, ни даже удалить (вручную, найдя на диске). То есть файл вроде как юзается работающим процессом, хотя ADOQuery отключена. ADOConnection с некоторых пор просто не использую - просто сразу задавал строку подключения в ADOQuery и уже ставил Active = false/true. Всё по одной причине - лень писать на две три строчки больше =))) Но видимо придётся использовать, попробую с ADOConnection поработать... Хотя по сути работает вариант, о котором я уже упомянул:
 
Код:
TADOQuery *ADOQuery2 = new TADOQuery (Form1);
/*коннектимся, работаем...*/
ADOQuery2->Free();
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог