Форум: "Базы";
Текущий архив: 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