数据库连接 (50分)

H

hhh77

Unregistered / Unconfirmed
GUEST, unregistred user!
access数据库,使用DATABSE,DRIVER NAME设置为MSCESS,
PARAMS设置如下:
DATABASE NAME=D:/mzsf.mdb
OPEN MODE=READ/WRITE
LANGDRIVER=
SYSTEM DATABASE=
PASSWORD=
USER NAME=

说明:
D:盘已经存在MZSF.MDB
此时NAME设置任何字符都无法正确连接,报错

错误信息为:
GENERAL SQL ERROR
-2147221164
TABLE NAME
ALIAS:'刚才起的NAME名'

如果用ODBC连则正常,错在哪?
 
ACCESS 用DATABASE参数方法可能行不通。
要么创建DSN,要么用ADOConnection
 
{*******************************************************
在本程序中,将创建一个ODBC系统数据源(DSN), 数据源名称:MyAccess 数据源描述:我的新数据源 数据库类型:ACCESS97 对应数据库:C:/Inetpub/wwwroot/test.mdb
*******************************************************}

{ 注意应在USES语句中包含Registry }

procedure TForm1.Button1Click(Sender: TObject);
var registerTemp : TRegistry;
  bData : array[ 0..0 ] of byte;
begin
 registerTemp := TRegistry.Create; //建立一个Registry实例
 with registerTemp do begin
  RootKey:=HKEY_LOCAL_MACHINE; //设置根键值为HKEY_LOCAL_MACHINE

  //找到Software/ODBC/ODBC.INI/ODBC Data Sources
  if OpenKey('Software/ODBC/ODBC.INI /ODBC Data Sources',True) then
    begin
     //注册一个DSN名称
     WriteString( 'MyAccess', 'Microsoft Access Driver (*.mdb)' );
    end
   else
    begin
     //创建键值失败
     memo1.lines.add('增加ODBC数据源失败');
     exit;
   end;

  CloseKey;

  //找到或创建Software/ODBC/ODBC.INI /MyAccess,写入DSN配置信息
  if OpenKey('Software/ODBC/ODBC.INI /MyAccess',True) then
    begin
     WriteString( 'DBQ', 'C:/inetpub/wwwroot /test.mdb' );//数据库目录
     WriteString( 'Description', '我的新数据源' );//数据源描述
     WriteString( 'Driver', 'C:/PWIN98/SYSTEM/ odbcjt32.dll' );//驱动程序DLL文件
     WriteInteger( 'DriverId', 25 ); //驱动程序标识
     WriteString( 'FIL', 'Ms Access;' ); //Filter依据
     WriteInteger( 'SafeTransaction', 0 ); //支持的事务操作数目
     WriteString( 'UID', '' );//用户名称
     bData[0] := 0;
     WriteBinaryData( 'Exclusive', bData, 1 ); //非独占方式
     WriteBinaryData( 'ReadOnly', bData, 1 ); //非只读方式
   end
  else //创建键值失败
   begin
    memo1.lines.add('增加ODBC数据源失败');
    exit;
   end;

  CloseKey;

  //找到或创建Software/ODBC/ODBC.INI /MyAccess/Engines/Jet
  //写入DSN数据库引擎配置信息
 if OpenKey('Software/ODBC/ODBC.INI /MyAccess/Engines/Jet',True) then
   begin
    WriteString( 'ImplicitCommitSync', 'Yes' );
    WriteInteger( 'MaxBufferSize', 512 );//缓冲区大小
    WriteInteger( 'PageTimeout', 10 );//页超时
    WriteInteger( 'Threads', 3 );//支持的线程数目
    WriteString( 'UserCommitSync', 'Yes' );
   end
  else//创建键值失败
   begin
    memo1.lines.add('增加ODBC数据源失败');
    exit;
   end;

  CloseKey;

  memo1.lines.add('增加新ODBC数据源成功');
  Free;
 end;
end;

  以上程序在PWIN98+DELPHI3.0下调试通过.

  下面是创建常见数据库类型的DSN需要设置的信息([]为注释内容,除特殊注释外,各 参数可见前面说明):

  1.Access(Microsoft Access Driver(*.mdb))

DBQ、Description、Driver[odbcjt32.dll]、 DriverID[25]、FIL[Ms Access;]、
SafeTransaction[默认为0]、UID[默认为空]、
Engines/Jet/ImplicitCommitSync[默认为Yes]、
Engines/Jet/MaxBufferSize[默认512]、
Engines/Jet/PageTimeout[默认为512]、
Engines/Jet/Threads[默认为3]、
Engines/Jet/UserCommitSync[默认为Yes]
可选设置:
SystemDb[字符串,系统数据库的路径]、
ReadOnly[二进制,是否以只读方式打开,1为是,默认为0]、
Exclusive[二进制,是否以独占方式打开,1为是,默认为0]、
PWD[字符串,用户密码]

  2.EXCEL(Microsoft Excel Driver(*.xls))

DBQ[Excel97(=path/xxx.xls)、5.0/7.0 (=path/xxx.xls)、4.0(=path)、3.0(=path)]、
Description、Driver[odbcjt32.dll]、
DefaultDir[Excel97(< >DBQ)、5.0/7.0 (< >DBQ)、4.0(=DBQ)、3.0(=DBQ)]、
DriverID[790(Excel97)、22(5.0/7.0)、278(4.0)、534(3.0)]、
FIL[Excel5.0;]、ReadOnly、SafeTransaction、UID、
Engines/Excel/ImplicitCommitSync、
Engines/Excel/MaxScanRows[数字,扫描行数,默认为8]、
Engines/Excel/Threads、
Engines/Excel/UserCommitSync、
Engines/Excel/FirstRowHasName[二进制,第一行是否是域名, 1表示是,默认为1]

  注: Excel97和Excel7.0/5.0的DBQ对应一个XLS文件,而Excel4.0和Excel3.0则对应 一个目录;DefaultDir对应一个目录,在Excel97和Excel7.0/5.0中是DBQ所对应的路径, 而在Excel4.0和Excel3.0下则与DBQ相同;各个版本的DriverID不同.

  3.dBase(Microsoft dBase Driver(*.dbf))

DefaultDir[字符串,数据库文件所在目录]、
Description、Driver[odbcjt32.dll]、
DriverID[277(IV)、533(5.0)]、
FIL[dbase III;]、SafeTransaction、UID、
Engines/Xbase/ImplicitCommitSync、
Engines/Xbase/Collating[字符串,排序依据, 可为ASCII、International、Norwegian-Danish、 Swedish-Finnish]、
Engines/Xbase/Deleted[二进制,是否不显示 被软删除的记录,0表示显示,默认为1]、
Engines/Xbase/PageTimeout[默认为600]、
Engines/Xbase/UserCommitSync、
Engines/Xbase/Threads、
Engines/Xbase /Statistics[二进制,是否用大约的行数,1为是,默认0] 注:(dBaseIV和dBase5.0两个版本的DriverId有不同)

  4.Foxpro(Microsoft Foxpro Driver(*.dbf))

DefaultDir[数据库文件所在目录]、
Description、Driver[odbcjt32.dll]、
DriverID[536(2.6)、280(2.5)]、
FIL[Foxpro 2.0;]、SafeTransaction、UID、
Engines/Xbase/Collating[字符串, 排序依据,可为ASCII、International]、
Engines/Xbase/Deleted[二进制,是否不显示 被软删除的记录,0表示显示,默认为1]、
Engines/Xbase/PageTimeout[默认为600]、
Engines/Xbase/UserCommitSync、
Engines/Xbase/Threads、
Engines/Xbase /Statistics[二进制,是否用大约的行数,1为是,默认0] 注:(Foxpro2.5和Foxpro2.6两个版本的DriverId有不同)
 
不可以直接连吗?
有没有简单点的办法呢
 
就是啊,麻烦了点
大家都怎么用的呢?
 
你用的是Access2000吧,BDE对Access2000的支持不太好
装上DAO35的驱动就没事了,另外还要改BDE配置.
强烈建议用ADO
 
TO:碧血剑
谢谢!
能不能对ADO使用方法做个简单说明呢
 
ADOConnection控件用Microsoft Jet 4.0 DB,一般在第一项,
然后用ADOQuery连ADOConnection
一切OK,Delphi有ADO使用例子
 
多人接受答案了。
 
顶部