![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Программное создание др-ра 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 драйвер не проходит.