我想在delphi程序中让用户自己创建ODBC数据源,就是调用控制面板中的创建数据源(ODBC)程序,请问该如何做?
解决方案 »
- 关于提取所有文件的图标
- 操作两个时间相加,对吗?
- datetostr(2004/02/29)为什么得出的结果却是1900-2-2 ?
- 给配置文件ini加个密!如何做到啊?抢分题!
- RyanGT(笑书神侠) 请进来 现在是第四个100分
- 请教DBComboBox的用法.谢谢
- 为什么我用CreateThread创建线程时.参数不能传递进去?
- override和overload是干什么作用?
- 各位兄弟,急需读写注册表的例子,那位能不能帮帮忙~!
- 各位,如何在DateTimePicker控件上既可以形式年月日,又可以显示小时、分钟
- 为什么这段过程只能找*.txt的文件
- 一个ADOTable的问题!竟然出现could not convert type(null)into string;
摘自猛料下面这个例子显示了如何加载实现了ODBC 管理功能的DLL(odbccp32.dll)来创建一个Access MDB文件和指向它的ODBC DSN。注意:这里假设DLL和MDB都在当前目录下。
同时,"CREATE_DB"的调用是Access(MS Jet引擎)的专有调用,类似的还有COMPACT_DB和REPAIR_DB等。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; // 删除系统DSNtype
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 );
strFile := strHome + 'TestData.MDB'; // 检查Access权限(Axes = Access)
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)失败!' ); // 检测/创建同DSN关联的 MDB 文件
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
begin
ShowMessage( '无法加载ODBCCP32.DLL' );
end;
end;