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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2012, 07:46   #1
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию "Файлы dBASE" если ли в системе

Собственно как определить есть ли в системе драйвер Файлы dBASE он же
Microsofft dBase Driver (*.dbf). Подключаться к тестовой DBF не вариант, ибо куча факторов нарваться на ложное срабатывание.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)

Последний раз редактировалось BARNEY; 08.10.2012 в 10:30.
BARNEY вне форума Ответить с цитированием
Старый 08.10.2012, 08:37   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

В реестре проверить не устроит?
HKEY_CURRENT_USER\Software\ODBC\ODB C.INI\Файлы dBASE
HKEY_LOCAL_MACHINE\SOFTWARE\Borland \Database Engine\Settings\DRIVERS\Microsoft dBase Driver (*.dbf)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.10.2012, 08:53   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Вы сейчас имеет в виду ODBC драйверы? (см. скриншот)

Так, если не ошибаюсь, начиная с Windows 98 они входят в состав ОС.
Или Вы хотите защититься от кривых ручек пользователя, который может удалить стандартные драйвера? Тогда копайте в сторону программного получения источников данных (я лично такое не делал и не умею делать, но, думаю, что технически это возможно)


Добавлено
уп-с. опоздал. Аватар уже разрулил проблему...
Изображения
Тип файла: jpg odbc.jpg (63.9 Кб, 152 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.10.2012, 09:02   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Подключаться к тестовой DBF не вариант, ибо куча факторов нарваться на ложное срабатывание.
Что имеется ввиду?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.10.2012, 11:01   #5
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Аватар,
в 64-битной системе такое не катит, видимо где-то в другом месте лежит.
HKEY_CURRENT_USER\Software\ODBC\ODB C.INI\Файлы dBASE

Имею ввиду, что dbf может не открыться из-за корявого пути к файлу, допустим если выбросили проект на рабочий стол.

Serge_Bliznykov, да да да... я про это.

В 7 винде он по умолчанию не прописал для 32-х битных приложений, а в 64-х его вообще тупо нет... майкрасофт поддержку прекратило.

Попробую поковыряться программно.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 08.10.2012, 11:09   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Имею ввиду, что dbf может не открыться из-за корявого пути к файлу, допустим если выбросили проект на рабочий стол.
От корявого пути можно избавится разместив тестовый dbf в каталог exe-шника и програмно настраивать соединение. Еще дальше пойти - небольшой тестовый dbf поместить в ресурс exe, выгружать из него в tmp-каталог например, и опять же програмная настройка соединения. Рабочий стол ни как не при делах, и вообще любой другой способ запуска проги

ADD

Есть еще SQLConfigDataSource из odbccp32.dll. Никогда не пользовался правда, возможно и поможет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 08.10.2012 в 11:22.
Аватар вне форума Ответить с цитированием
Старый 08.10.2012, 12:08   #7
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Гугл + переделка под XE2 ..в итоге имеет в лист боксе что нужно.
Код:
 function SQLDataSources(EnvironmentHandle:LongWord;Direction:Smallint;
    ServerName:PAnsiChar;BufferLength1:Smallint;NameLength1Ptr:PSmallInt;
    Description:PAnsiChar;BufferLength2:Smallint;NameLength2Ptr:PSmallInt): Smallint; stdcall; external 'odbc32.dll';
function SQLAllocHandle(HandleType:Smallint;InputHandle:Smallint;
    OutputHandlePtr:Pointer): Smallint; stdcall; external 'odbc32.dll';
function SQLSetEnvAttr(EnvironmentHandle:LongWord;Attribute:Integer;
    ValuePtr:Pointer;StringLength:Integer): Smallint; stdcall; external 'odbc32.dll';
function SQLFreeHandle(HandleType:Smallint;Handle:LongWord): Smallint; stdcall; external 'odbc32.dll';

procedure TForm1.Button1Click(Sender: TObject);
const
  MAX_BUF=1024;
  SQL_HANDLE_ENV=1;
  SQL_NULL_HENV=0;
  SQL_ATTR_ODBC_VERSION=200;
  SQL_IS_INTEGER=-6;
  SQL_FETCH_FIRST_USER=31;
  SQL_FETCH_FIRST=2;
  SQL_FETCH_NEXT=1;
  SQL_OV_ODBC3=3;
  SQL_NO_DATA=100;
var
  datasrc,descrip:array [0..MAX_BUF-1] of AnsiChar;
  tmpstr,descstring,datastring:AnsiString;
  direction,ValuePtr,ret:Smallint;
  rdsrc,rdesc:SmallInt;
  hEnv:Cardinal;
  UL3:Cardinal;
begin
  rdsrc:=0;
  rdesc:=0;
  datasrc[0]:=#0;
  descrip[0]:=#0;
  ret := SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HENV, @hEnv);
  ret := SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION,POINTER(SQL_OV_ODBC3),SQL_IS_INTEGER);
  direction:=SQL_FETCH_FIRST;
  Strins.Clear;  // Это лист бокс
  while (SQLDataSources(hEnv,direction,@datasrc[0],MAX_BUF,@rdsrc,@descrip[0],MAX_BUF,@rdesc)<>SQL_NO_DATA)do begin
    Strins.Items.Add(string(datasrc));
    direction:=SQL_FETCH_NEXT;
  end;
  SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
end;
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа функциями "ЕСЛИ", "И" и вывод текстового результата johny_03 Microsoft Office Excel 3 04.08.2014 11:01
если >30 тогда "да" иначе "нет"... DBgrid Daur БД в Delphi 4 30.05.2010 16:54
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. Каравай Microsoft Office Excel 13 17.02.2010 09:53
настроить при открытии Excel 2003 в окошке "Тип файлов" вывод пункта "Все файлы (*.*)" по умолчанию? Unior Microsoft Office Excel 2 01.03.2009 02:42
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51