Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.11.2010, 13:37
Аватар для oxy-fox
oxy-fox oxy-fox вне форума
Прохожий
 
Регистрация: 24.02.2009
Адрес: Беларусь, г. Гродно
Сообщения: 9
Репутация: 10
По умолчанию Проверка открываемой БД Access

Суть такова:
Есть программа, есть возможность выбирать файл через OpenDialog, нужно:
1. Проверить, что открываем. БД или нет, если файл базы данных то идём дальше.
2. Проверяем ту ли базу открыли (в базе имеется таблица, например, "init"? в которой есть поле, например, тоже "init")
2.1. Проверяем есть ли такая таблица, есть - дальше
2.2. Проверяем есть ли такое поле в таблице, есть дальше
2.3. Проверяем соответствует ли содержимое поля заданному ключу, соответствует - открываем БД
при несовпадении любого из пунктов выдать ошибку и предложить выбрать другой файл

Как мне это реализовать программно?
__________________
Жизнь - не те дни, что прошли, а те, что запомнились!
Ответить с цитированием
  #2  
Старый 08.11.2010, 23:02
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Цитата:
1. Проверить, что открываем. БД или нет, если файл базы данных то идём дальше.
Как вариант:
Читаешь первые (с начала файла) 19 байт.
По идее должна быть цепочка байт (шестнадцатиричные):

00 01 00 00 53 74 61 6E 64 61 72 64 20 4A 65 74 20 44 42

.. .. .. .. S t a n d a r d пробел J e t пробел D B

Последний раз редактировалось roamer, 08.11.2010 в 23:04.
Ответить с цитированием
  #3  
Старый 08.11.2010, 23:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Пытаемся подключиться к БД. Если ошибка - то явно проблемы с файлом.
2. Делаем запрос нужного поля из нужной таблицы. Если ошибка - ну значит не туда попали.
3. проверяем полученное значение. Не то - значит неправильная БД.

Код:
function OpenDB(AFileName : String);
begin
  Try
    Try
      ADOConnection.DBName := AFileName; // Здесь типа правим строку подключения, сорри, delphi под рукой нет
      ADOConnection.Open;
      ADOQuery.SQL.Text := 'SELECT INIT FROM INIT';
      ADOQuery.Open;
      If ADOQuery.RecordCount = 0 Then
        Raise Exception.Create('No records.');
      If ADOQuery.FieldbyName('INIT').AsInteger <> 101 Then // проверяемое значение
        Raise Exception.Create('Wrong key value.');
      Result := True;
    Finally
       ADOQuery.Close;
    End;
  Except
     If ADOConnection.Connected then ADOConnection.close;
     Result := False;
  End;
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:57.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter