Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

Программное создание др-ра ODBC   Найти похожие ветки 

 
Варяг ©   (2006-02-10 22:30) [0]

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


 
tesseract ©   (2006-02-10 22:38) [1]

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


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

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


 
tesseract ©   (2006-02-10 22:44) [3]

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


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

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


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

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


 
Слоник   (2006-02-17 12:31) [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-17 12:35) [7]

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


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

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


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

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

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


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

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;


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.04.16;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.03 c
2-1144140111
__alex
2006-04-04 12:41
2006.04.16
Изменение переменной-счетчика в цикле for


2-1143885703
Dyakon_Frost
2006-04-01 14:01
2006.04.16
Проблемы с StringGrid


1-1141660248
Алик
2006-03-06 18:50
2006.04.16
Быстро выполнение FillRect


1-1142341226
kyn66
2006-03-14 16:00
2006.04.16
В чем ошибка загрузки Waw-файла ?


15-1143213902
Juice
2006-03-24 18:25
2006.04.16
Альтернатива TImageList