Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Программное создание др-ра ODBC [D7, dBase, FoxPro]


Варяг ©   (2006-02-10 22:30:00) 

Если можно объясните(приведите пример кода ) создания
драйвера для FoxPro и VFoxPro програмно из Dephi 7.0 . спасибо за внимание.


Варяг   (2006-02-22 14:55:00) [1]

Спасибо за функции , но первый вариант преодически вызывает ошибку и
виснет прога  :-( второй еще не смотрел. но нашел другое простое решение
самому создать ключи в реестре или экспортировать подраздел с дальнейшим исправлением параметра  каталога.


Lexiy   (2006-02-22 12:19:00) [2]

const
 ODBC_ADD_DSN = 1;        // Добавляем источник данных
 ODBC_CONFIG_DSN = 2;     // Конфигурируем (редактируем) источник данных
 ODBC_REMOVE_DSN = 3;     // Удаляем источник данных
 ODBC_ADD_SYS_DSN = 4;    // Добавляем системный DSN
 ODBC_CONFIG_SYS_DSN = 5; // Конфигурируем системный DSN
 ODBC_REMOVE_SYS_DSN = 6; // удаляем системный DSN

type
 TSQLConfigDataSource = function( hwndParent: HWND; fRequest: WORD;
 lpszDriver: LPCSTR; lpszAttributes: LPCSTR ) : BOOL; stdcall;

procedure Form1.FormCreate(Sender: TObject);
var
 pFn: TSQLConfigDataSource;
 hLib: LongWord;
 strDriver: string;
 strHome: string;
 strAttr: string;
 strFile: string;
 fResult: BOOL;
 ModName: array[0..MAX_PATH] of Char;
 srInfo : TSearchRec;
begin
 Windows.GetModuleFileName( HInstance, ModName, SizeOf(ModName) );
 strHome := ModName;
 while ( strHome[length(strHome)] <> '\' ) do
   Delete( strHome, length(strHome), 1 );
 // Тестовая база данных (Axes = Access)
 strFile := strHome + 'TestData.MDB';
 // загружаем библиотеку (путь по умолчанию)
 hLib := LoadLibrary( 'ODBCCP32' );
 if( hLib <> NULL ) then
 begin
   @pFn := GetProcAddress( hLib, 'SQLConfigDataSource' );
   if( @pFn <> nil ) then
   begin
     // начинаем создание DSN
     strDriver := 'Microsoft Access Driver (*.mdb)';
     strAttr := Format( 'DSN=TestDSN' + #0 + 'DBQ=%s' + #0 +
     'Exclusive=1' + #0 + 'Description=Test Data' + #0 + #0, [strFile] );
     fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] );
     if( fResult = false ) then
       ShowMessage( 'Ошибка создания DSN (Datasource) !' );

     // test/create MDB file associated with DSN
     if( FindFirst( strFile, 0, srInfo ) <> 0 ) then
     begin
       strDriver := 'Microsoft Access Driver (*.mdb)';
       strAttr := Format( 'DSN=TestDSN'+#0+ 'DBQ=%s'+#0+ 'Exclusive=1'+#0+
       'Description=Test Data'+#0+ 'CREATE_DB="%s"'#0+#0, [strFile,strFile] );
       fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] );
       if( fResult = false ) then
         ShowMessage( 'Ошибка создания MDB (файла базы данных) !' );
     end;
     FindClose( srInfo );
   end;
   FreeLibrary( hLib );
 end
 else
   ShowMessage( 'Невозможно загрузить ODBCCP32.DLL' );
end;


у меня вот такой вариант ... это для аксеса может у кого еще есть ?


Lexiy   (2006-02-22 12:16:00) [3]

если найдете ответ плиз не поленитесь прислать на 13_angelov@mail.ru

самому стало интересно :)


Слоник   (2006-02-20 01:39:00) [4]

хей, как быть?


Слоник   (2006-02-17 12:35:00) [5]

но вопрос всё же в том, как, не показывая диалога, создать системный DSN.
при использовании ODBC_ADD_SYS_DSN и вне зависимости от HWND окно появляется и поля его не заполнены (при ODBC_CONFIG_SYS_DSN всё заполняется, окно тоже есть)?


Слоник   (2006-02-17 12:31:00) [6]

сам полез за ответом в эту конференцию =)
нашёл такой вот код на разных языках:


 const
 ODBC_ADD_DSN = 1; (* Add data source *)
 ODBC_CONFIG_DSN = 2; (* Configure (edit) data source *)
 ODBC_REMOVE_DSN = 3; (* Remove data source *)
 ODBC_ADD_SYS_DSN = 4; (* add a system DSN *)
 ODBC_CONFIG_SYS_DSN = 5; (* Configure a system DSN *)
 ODBC_REMOVE_SYS_DSN = 6; (* remove a system DSN *)

type
 TSQLConfigDataSource = function(hwndParent: HWND;
   fRequest: WORD;
   lpszDriver: LPCSTR;
   lpszAttributes: LPCSTR): BOOL; stdcall;



var
 pFn: TSQLConfigDataSource;
 hLib: LongWord;
 strDriver, strAttr: string;
 fResult: BOOL;
 srInfo: TSearchRec;
begin
 hLib := LoadLibrary('ODBCCP32'); //load from default path
 if (hLib <> NULL) then
 begin
   @pFn := GetProcAddress(hLib, 'SQLConfigDataSource');
   if (@pFn <> nil) then
   begin
     strDriver := 'SNAP PRIMEBASE';
     strAttr :='DSN=K4DSN_TST' +#0+
               'SERVER=K4_DS'+#0+
               'DATABASE=K4'+#0+
               'PROTOCOL=TCP'+#0+
               'PROT_OPTS=127.0.0.10'+#0+#0 ;
     fResult := pFn(Application.Handle, ODBC_ADD_SYS_DSN , PChar(strDriver), PChar(strAttr));
     if (fResult = false) then
     begin
       ShowMessage('Create DSN (Datasource) failed!');
        Exit;
     end;
       FindClose(srInfo);
   end;
   FreeLibrary(hLib);
 end
 else   ShowMessage('Unable to load ODBCCP32.DLL');
end;


только у меня почему-то максимум, чего удалось добиться - это вызвать окно с заполненными полями при использовании константы ODBC_CONFIG_SYS_DSN. Первый же параметр судя по документации отвечает за родительское окно и при 0 должен бы не показывать окно диалога.


Варяг   (2006-02-12 22:06:00) [7]

да если можно или код или фукнция (если есть)


Int_64   (2006-02-11 13:33:00) [8]

Имеешь ввиду DSN?


tesseract   (2006-02-10 22:44:00) [9]

Connection String ? Вроде всё работает. У меня получалось, покрайней мере с 1С.


Варяг   (2006-02-10 22:42:00) [10]

сорри, я не совсем правильно поставил вопрос я имел ввиду создание псевдонима для ODBC


tesseract   (2006-02-10 22:38:00) [11]

У меня получалось следующим образом: Качается драйвер с сайта микрософта и к нему обращается через ADO.  
Это в случае если standart драйвер не проходит.


Наверх

Титульная страница Поиск, карта сайта Написать письмо