Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Вниз

Программное создание др-ра 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.082 c
15-1143189547
Alarm
2006-03-24 11:39
2006.04.16
Ограничение на количество подключений


9-1128171842
Ibrox
2005-10-01 17:04
2006.04.16
OpenGL


4-1138029294
Anton B.
2006-01-23 18:14
2006.04.16
Глючит DDE


15-1143462286
PZ
2006-03-27 16:24
2006.04.16
Информация для размышления


2-1143875943
tort
2006-04-01 11:19
2006.04.16
Почему окно вылезает два и более раз?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский