var TN:TStrings;
begin
TN := TStringList.Create;
try
ADOConnection1.GetTableNames(TN,false); //false или true будут ли системные
//таблицы посчитаны, не помню что за что отвечает.
//а здесь крутишь цикл по элементам листа и в нем проверяешь, есть ли твоя таблица
finally;
TN.Free;
end;
end;
базы данных
И ещё... После использования метода ADOQuery1->ExecSQL() в процессах появляется MCACCES и так и висит, пока не закроется само приложение. Т.е. фактически приложение намертво привязывается к базе, и перезаписать эту базу нельзя, т.к. она используется приложением. Как это можно убрать? Перепробовал все методы и способы закрытия ADOQuery1, от Active = false до тупого ADOQuery1->Free. Помогает только последнее, но так мы фактически убиваем сам компонент ADOQuery... Есть идеи?
Цитата:
Originally posted by Azaze1
Есть mdb база. Можно ли как-нибудь через ADO (SQL запросом или иным способом) узнать, содержится ли в этой базе таблица с известным именем?
И ещё... После использования метода ADOQuery1->ExecSQL() в процессах появляется MCACCES и так и висит, пока не закроется само приложение. Т.е. фактически приложение намертво привязывается к базе, и перезаписать эту базу нельзя, т.к. она используется приложением. Как это можно убрать?
Есть mdb база. Можно ли как-нибудь через ADO (SQL запросом или иным способом) узнать, содержится ли в этой базе таблица с известным именем?
И ещё... После использования метода ADOQuery1->ExecSQL() в процессах появляется MCACCES и так и висит, пока не закроется само приложение. Т.е. фактически приложение намертво привязывается к базе, и перезаписать эту базу нельзя, т.к. она используется приложением. Как это можно убрать?
Определить можно! :) Я сейчас просто под Delphi, поэтому потом стрелочки поставишь вместо точек. :)
Получить список таблиц в базе можно через ADOConnection.
Код:
Лично у меня после ExecSQL ничего не появляется. :) Я не знаю как у тебя сделано, но предложил бы сделать через ADOConnection . У него есть замечательное свойство Connected. Отсоединяешься и делаешь с базой что хочешь и приложение тебе не мешает!
А что значит перезаписать эту базу нельзя: 1) нельзя добавить запись в нее или 2)удалить файл базы?
Если 1) то, тогда есть настройки открытия базы в драйвере, измени их на ReadWrite.
Если 2) то ADOConnection1.Connected := false;
Случай именно второй, то есть базу (сам файл) нельзя перезаписать, ни даже удалить (вручную, найдя на диске). То есть файл вроде как юзается работающим процессом, хотя ADOQuery отключена. ADOConnection с некоторых пор просто не использую - просто сразу задавал строку подключения в ADOQuery и уже ставил Active = false/true. Всё по одной причине - лень писать на две три строчки больше =))) Но видимо придётся использовать, попробую с ADOConnection поработать... Хотя по сути работает вариант, о котором я уже упомянул:
Код:
TADOQuery *ADOQuery2 = new TADOQuery (Form1);
/*коннектимся, работаем...*/
ADOQuery2->Free();
/*коннектимся, работаем...*/
ADOQuery2->Free();