var
Form1: TForm1;
Function ReadODBCDriver(AName: String):String;
Function CreateMsAccess(AName: String; APath: String; ADriver:String):Boolean;
implementation
{$R *.DFM}
//***************************************************
//目的:读取驱动程序位置
//参数:AName--要读取的数据库驱动类型的标志(自己可以任意定制)
//***************************************************
Function ReadODBCDriver(AName: String):String;
var
registerTemp: TRegistry;
s:string;
begin
registerTemp:=TRegistry.Create;
if AName='Access' then
begin
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('Software\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb)',True) then
begin
s:=ReadString('Driver');
ReadODBCDriver:=ReadString('Driver');
CloseKey;
Free;
Exit;
end;
end;
end;
registerTemp.Free;
ReadODBCDriver:='';
end;
//****************************************************
//目的:建立数据库驱动程序并配置
//参数:AName--要建立的ODBC数据库别名
// APath--要连接的数据库路径名称
// ADriver--ODBC驱动名称,由系统获取
//****************************************************
Function CreateMsAccess(AName: String; APath: String; ADriver: String):Boolean;
var
registerTemp:TRegistry;
bData:array[0..0] of byte;
begin
if ADriver='' then
begin
//ShowMessage('读取ODBC驱动程序失败,请重新安装ODBC!');
CreateMsAccess:=False;
Exit;
end;
registerTemp:=TRegistry.Create;
CreateMsAccess:=True;
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then
begin
//注册一个DSN名称--AName
WriteString(AName,'Microsoft Access Driver (*.mdb)');
end
else
begin
CreateMsAccess:=False;
Exit;
end;
CloseKey;
//写入DSN配置信息
if OpenKey('Software\ODBC\ODBC.INI\'+AName,True) then
begin
//数据库目录,连接你的数据库
WriteString('DBQ',APath);
//非只读方式
WriteBinaryData('ReadOnly',bData,1);
end
else
begin
CreateMsAccess:=False;
Exit;
end;
CloseKey;
//写入DSN数据库引擎配置信息
if OpenKey('Software\ODBC\ODBC.INI\'+AName+'\Engines\Jet',True) then
begin
WriteString('ImplicitCommitSync','Yes');
//缓冲区大小
WriteInteger('MaxBufferSize',512);
//页超时
WriteInteger('PageTimeout',10);
//支持的线程数目
WriteInteger('Threads',3);
WriteString('UserCommitSync','Yes');
end
else
begin
CreateMsAccess:=False;
Exit;
end;
CloseKey;
Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
FileName:String;
s:string;
begin
s:='select * from tab_answ where A10 like ''11%'' and (E2 = '''' or E2 is null)'+' order by A13 ASC,A1 DESC';
if OpenDialog1.Execute then
begin
FileName:=OpenDialog1.FileName;
//创建ODBC
if CreateMsAccess('TemAccess',FileName,ReadODBCDriver('Access')) = False then
begin
ShowMessage('数据库连接错误,请与公司联系!');
Application.Terminate;
end;
//连接ODBC
Database1.Connected:=False;
Database1.AliasName := 'TemAccess';
Database1.DatabaseName := 'TemAccess';
Database1.Connected := True;
Query1.DatabaseName := DataBase1.DatabaseName ;
Query1.RequestLive := True;
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add(s);
Open;
end;
if Query1.CanModify = true then
showmessage('ok')
else
showmessage('no');
end;