Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка mdb-файла, Являеся ли он файлом MSAccess. 
V
    Опции темы
Gwire
Дата 9.4.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: нет
Всего: 4



smile Всем привет.
Это функция создания mdb-файла (с ней все нормально).
Код

function CreateAccessDatabase(FileName: string): Boolean;
var MDB: OLEVariant;
begin
    Result:= True;
    try
        MDB:= CreateOleObject('ADOX.Catalog');
        MDB.Create( 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + FileName + ';' );
    except Result:= False; end;
    MDB:= Null();
end;
smile А моя проблема вот где...
Если файл сущестует, то его не нужно создавать.
Ну а вдруг он сущесвует и не правильный имеет формат? Что тогда? Я не смогу с ним работать.
Нужно бы его провевить и пересоздать если он "плохой".
Причем это нужно сделать еще до создания форм....
Код

begin
  Application.Initialize;
  .......... // <-------- Вот здесь.
smile Короче говоря чтобы "компоненты ни о чем не догадовались".
Может что-то типа: MDB.Open


Это сообщение отредактировал(а) Gwire - 9.4.2009, 21:05
PM MAIL   Вверх
Kbl4AH
Дата 9.4.2009, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(Gwire @  9.4.2009,  21:45 Найти цитируемый пост)
Может что-то типа: MDB.Open

Может запрос какой-нибудь сделать и если он вызовет ошибку, то пересоздавать?!
PM MAIL ICQ   Вверх
Данкинг
Дата 9.4.2009, 21:53 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Gwire @  9.4.2009,  21:45 Найти цитируемый пост)
Короче говоря чтобы "компоненты ни о чем не догадовались".

Зачем такое условие? Я бы сделал просто try...except на подключение к этой БД.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Gwire
Дата 10.4.2009, 09:52 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: нет
Всего: 4



Цитата(Данкинг @  9.4.2009,  21:53 Найти цитируемый пост)
Я бы сделал просто try...except на подключение к этой БД.

Еще Людовик XI сказал: «Diviser pour regner» — «Разделять, чтобы царствовать».
smile Ребята и "девчата", пытайтесь не смешивать отдельные блоки программы в один MIX.
В ней потом тяжело будет разобратся. А если вы работаете над проектом не одни, вашим коллегам будет еще сложнее.

У меня задача:
Написать функцию-исталятор базы данных. Которая не зависит от основной программы.
Причем модулю, в котором находится эта функция, было все равно частью какой программы он является.


PM MAIL   Вверх
Kbl4AH
Дата 10.4.2009, 10:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(Gwire @  10.4.2009,  10:52 Найти цитируемый пост)
У меня задача:Написать функцию-исталятор базы данных.

Так какие проблемы? Пиши!
Цитата(Gwire @  9.4.2009,  21:45 Найти цитируемый пост)
Нужно бы его провевить и пересоздать если он "плохой".

Что значит плохой? Если к БД не подключается, то точно плохой! Чем тебя совет Данкинга не устроил?
А может таблица в БД изменена... Это тоже плохой или нет?
Какие критерии "плохости" ты выдвигаешь?

ЗЫ. Прежде, чем задавать туманные вопросы, а потом упрекать отвечающих, выказывая при этом недюжинные исторические познания, ты бы над формулировкой вопроса подумал. а так: общий вопрос - общий ответ...

ЗЗ.ЫЫ. А вот тебе информация к размышлению по поводу вопросов:
Цитата

«Обычно люди обращаются за советом, – говорил Атос, – только для того, чтобы не 
следовать ему, а если кто-нибудь и следует совету, то только для того, чтобы 
было кого упрекнуть впоследствии».


Это сообщение отредактировал(а) Kbl4AH - 10.4.2009, 10:17
PM MAIL ICQ   Вверх
Gwire
Дата 10.4.2009, 13:04 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: нет
Всего: 4



smile Kbl4AH, злой ты.
Я тут сидел и думал, что я туманно написал...
Цитата(Kbl4AH @  10.4.2009,  10:16 Найти цитируемый пост)
Что значит плохой?

Цитата(Gwire @  9.4.2009,  20:45 Найти цитируемый пост)
а вдруг он сущесвует и не правильный имеет формат?
именно формат файла, а не измененная таблица.
И тема называется "Проверка mdb-файла, Является ли он файлом MSAccess".

smile А против Данкинга я ничего не имею против. Я его не в чем не могу винить. Он же не знает какая у меня квалификация в delphi. Также как я не знаю его. Но мне показалось, что стоит "черкнуть" совет адресованный всем. 

smile Данкинг, прости, если мой совет тебя обидел.
Меня так учили решать задачи - проводить декомпозицию, и решать подзадачи. Одна из подзадач - Убедится что файл существует и имеет правильный формат. И сие нужно сделать до создания TADOConnection, чтобы экземпляр этого класса просто подключился и готов был к работе, уже ничего не проверяя.

PM MAIL   Вверх
Данкинг
Дата 10.4.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Gwire @  10.4.2009,  10:52 Найти цитируемый пост)
Еще Людовик XI сказал: «Diviser pour regner» — «Разделять, чтобы царствовать».

Oui, il a raison, un homme sage beaucoup. smile 

Цитата(Gwire @  10.4.2009,  10:52 Найти цитируемый пост)
Ребята и "девчата", пытайтесь не смешивать отдельные блоки программы в один MIX.

Кто что смешивает? smile Я привел пример решения твоего вопроса.smile
(почему "девчата" в кавычках? smile )

Цитата(Gwire @  10.4.2009,  10:52 Найти цитируемый пост)
В ней потом тяжело будет разобратся.

Да, оператор try весьма сложен для понимания. smile 

Цитата(Gwire @  10.4.2009,  10:52 Найти цитируемый пост)
Причем модулю, в котором находится эта функция, было все равно частью какой программы он является.

Философия какая-то. smile

Добавлено @ 13:08
Цитата(Gwire @  10.4.2009,  14:04 Найти цитируемый пост)
Данкинг, прости, если мой совет тебя обидел.

Да ничё. smile 

Цитата(Gwire @  10.4.2009,  14:04 Найти цитируемый пост)
И сие нужно сделать до создания TADOConnection,

А в чём смысл придумывать проблемы там, где их нет? Или я чего-о не понимаю? smile 

Это сообщение отредактировал(а) Данкинг - 10.4.2009, 15:53


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Gwire
Дата 10.4.2009, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: нет
Всего: 4



smile Фиг победишь её... Данкинг, Будь по твоему 
Код

uses SysUtils, ADODB, ComObj, Variants;

function DatabaseCreate(ADO: TADOConnection; DataBaseName: String): Boolean;

implementation

var FDataDir: String;
    FProvider: String;

//---  Создает новую базу данных  ---------------------------------------------
function CreateDatabase(ConnectionString: string): Boolean;
var MDB: OLEVariant;
begin
    Result:= True;
    try
        MDB:= CreateOleObject('ADOX.Catalog');
        MDB.Create( ConnectionString );
    except Result:= False; end;
    MDB:= Null();
end;

//---  |  ---------------------------------------------------------------------
function DatabaseCreate(ADO: TADOConnection; DataBaseName: String): Boolean;
var S: String;
    I: Integer;
begin
    Result:= False;
    if not Assigned(ADO) then Exit;
    ADO.Close;

    S:= FDataDir + DataBaseName +'.mdb';
    ADO.ConnectionString:= Format('%s;Data Source=%s;', [FProvider, S] );

    I:= 3; // Попытки создать
    repeat
         if FileExists( S ) or CreateDatabase( ADO.ConnectionString ) then
         try
             ADO.Open;
             Result:= True;
             Break;
         except DeleteFile( S ); end;
         Dec(I);
    until I = 0;
end;

begin
    FProvider:= 'Provider=Microsoft.Jet.OLEDB.4.0';
    FDataDir:= ExtractFileDir( ParamStr(0) ) +'\data\';
    if not DirectoryExists( FDataDir ) then CreateDir( FDataDir );
end.

PS: Слова которых нет в русском языке (или я думаю что нет) я беру в кавычки - "девчата". Есть правда "дівчата", но это украинский. (Ошибки не считаются)

PM MAIL   Вверх
Kbl4AH
Дата 10.4.2009, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(Gwire @  10.4.2009,  15:51 Найти цитируемый пост)
Слова которых нет в русском языке (или я думаю что нет) я беру в кавычки - "девчата".

 smile 
Рекомендую к просмотру старый черно-белый советский фильм "Девчата".
Только не знаю, интересно ли тебе будет, там (в фильме) простой народ и нет ни одной монаршей особы smile 

PM MAIL ICQ   Вверх
Gwire
Дата 10.4.2009, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: нет
Всего: 4



smile Википедия рулит

Это сообщение отредактировал(а) Gwire - 10.4.2009, 19:38
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0677 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.