初次提问(数据库方面),重奖235分(235分)

  • 主题发起人 主题发起人 sw
  • 开始时间 开始时间
S

sw

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠:
大家好!

小弟是个初学者,首次来到这里,希望各位大侠多多帮助.

问题:

我在做数据库程序时一般用Access97,

步骤大致如下:
1.用"控制面板"中的"ODBC(32bit)"定义一个数据源(问题1:其中的
User DSN, System DSN, File DSN这三项有什么区别? 我平时总
是用System DSN),
2.然后,在程序里将TTable控件的DatabaseName指向刚才设好的DSN,
或用TDatabase控件转一下,这样就可以用了.
(问题2:许多人在上面的第一步之后都喜欢用"BDE Administrator"
设一个别名,可我总是设不好,
我是这样设的:
<1>.打开"BDE Administrator",
<2>.选中Databases页,
<3>.菜单中选Object->New,
<4>.在Database Driver Name 中选择 Microsoft Access Driver (*.mdb),
<5>.在右边的Definition页中,将 DATABASE NAME 指向数据库,
ODBC DSN 中随便起一个名aaa,
<6>.在菜单中Oject->Apply,这样就完成了.
但在使用时,系统却说"Invalid configuration parameter.Alias:aaa",
我想可能也是什么参数没设好,但应该怎么设?)

另外,我总希望自己做的程序用户安装好就可以用(不需要在用户的机器上
安装ODBC... ,总之一切都不要用户多设置一下)
我是这样做的:
1.象上面那样用"控制面板"中的"ODBC(32bit)"手动设一个数据源,
然后,打开注册表,观察一下发生了什么变化,根据其中的变化自己
在程序中修改注册表,这样不就可以动态设数据源了吗.别名也可以
在程序中动态设置.
2.(问题3:但问题是在程序中动态设置ODBC,总是设不好,就是说在用户的
机器上不论是用Office97盘还是Vc++的盘都必须手动安装ODBC, 我实在
不想这么做,如果能将ODBC做到安装盘里也行,
请问怎么办?)

鉴于小弟初次提问,虽然问题很简单,为表示诚心,
将所有Money都拿出来,表示感谢!
 
我也很想知道问题答案,同时我在Table的TableName中设置表明是需要填写
username 和 password, 这怎么解决?
 
1. user dsn只能由这个用户看到, 用其它用户登录是看不到的. system则所有用户
都可以看到. file dsn是把dsn设置放到磁盘上, 凡是有读取此磁盘权限的用户
才可以使用.
2. access用bde设置确实好象有问题, 我也没成功:-(

3. 设置access数据库的方法, 以前有很多帖子都是, 请查询一下access就可以看到.

 
我自己做了一个可以设置ODBC别名的控件TODBCMgr,还有一个可以设置BDE别名的控
件,你要的话我给你发过去.
 
顾名思义:
USER DNS: 普通用户用的alias
SYSTEM DNS: 系统用的alias
FILE DNS: 连接某个文件的alias.

其实你在ttable.databasename中填的就是bde alias. bde自动搜索了odbc
设置,自动建立了一个和odbc别名相同的alias而已。
如果要自己建立一个和odbc相连的bde alias, 在ODBC DNS中可不能随便填,
必须填写一个odbc中存在的alias名字. 如果要用bde提供的驱动, 建立alias
时必须选择正确的数据库类型, 然后不要填写ODBC DNS.
去掉username和password很简单.
在你的form上加一个DataBase控件.
填入一个不重复的databasename(最好和bde的alias不重名, 比如'aaaaaa')
指定aliasname为你的bde aliasname(也就是odbc的name)
设置loginprompt为false
编辑params, 填写下面两行:
username=
password=
然后指定ttable的databasename为这个database控件的databasename就
成了(在table.databasename下拉列表中已经有了你刚才添加的database
控件的databasename了).

用做安装盘的工具或者控件做安装盘.
 
1、有过讨论,可以看http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=109651

2、Database Driver Name 可用MSACCESS,只不过缺省情况下,用户名和口令都是空。
 
>>问题3.

我以前遇到过类似问题,程序用到Foxpro的表需要安装ODBC.经过试验,
只要将下面几个文件拷贝到Windows的System 即可在控制面板看到Odbc图标.
Odbccp32.dll , odbcad32.exe,odbcint.dll,odbc32.dll,msvcrt.dll
另外关于注册表中的设置,只要在安装过的机器上看一下就可了.
加上Access要用到的文件.我想就没有问题了.
 
1。在BDE中,Microsoft Access Driver (*.mdb)只能用在ODBC中,而
MSACCESS才是原生驱动程序。
2。第二问题我也回答过,很详细的,请找找,我这上网很慢。
 
d4对access的连接是有问题,我们已前也遇到过不少。
不过在到d5后问题就少多了,另外,你可以升级一个odbc
 
各位大侠:
大家好!
小弟上网很不方便,所以直到今天才再次发表意见.
看了大家的回答,前两个问题已经解决了,以前的帖子我也看了一些,
但第三个问题还是没能解决,而且发现有类似疑问的朋友还不少.
为了能完全解决BDE别名及做带有数据库的应用程序的安装盘问题
(老实说,这个问题捆扰我很长时间了,我已经无可奈何了,而且再也不
想为它多花精力了).也为了大侠们回答方便,同时也为了找出症结之
所在,以下小弟将每一步骤都写出来,这样大家就可以直接在操作错误
的地方指出来.

至于那235分,小弟决不失言,对答得好的朋友一定重奖,这里先给
Another_eYes大侠记上50分.

具体步骤:

1.用ODBC连接Access数据库:

<1>打开 "控制面板"
<2>双击 "ODBC数据源(32位)"
<3>选择 "系统DSN(页)"
<4>单击 "添加"
<5>选择 Microsoft Access Driver (*.mdb)
<6>单击 "完成"
<7>数据源名=MyAccess 数据库=c:/data/sj.mdb
<8>单击 "确定"
(至此,ODBC数据源设定完毕)

<9>打开 "BDE Administrator"
<10>选择 Databases(页)
<11>单击 菜单Object|New
<12>选择 Microsoft Access Driver (*.mdb)
<13>单击 OK
<14>选择 右边Definition(页)
<15>填写参数 ODBC DSN = MyAccess (只填了这一项)
<16>回到 左边Databases(页),将新加的别名设为AAA
<17>单击 菜单Object|Apply
(至此,BDE别名设定完毕,其实这一步似乎可以省略不用)

<18>打开C++Builder4(虽然Delphi在各方面都比C++Builder做得成熟,
但由于以前用的是C++,所以只能将就了)
<19>新建一工程
<20>在Form1上分别放置TTable,TDataSource,TDatabase,TDBGrid控件
各一个
<21>双击 TDatabase控件
<22>在AliasName栏,选AAA 在DatabaseName栏,填入BBB
将LoginPrompt中的钩去掉 单击右边Defaults,参数什么都没有改动
<23>Table1->DatabaseName = "BBB";
Table1->TableName = "产品";
DataSource1->DataSet = Table1;
DBGrid1->DataSource = DataSource1;
Table1->Active = true;
<24>按F9,运行成功.

以下用InstallShield Express For C++Builder 4 (Version 2.02) 制作安装盘
(在以前的帖子上,朋友们总说Version 2.11的好用,不知是否支持C++Builder4),
前后的设置比较简单,这里详细地将中间设BDE的几步写出来

<25>单击 General Options.
<26>分别复选 RTL:dynamically linked,multithreaded 以及 Standard VCL Packages
和 Database Component Packages
<27>复选BDE.
<28>选择 Full BDE Installation ,下一步.
<29>单击 New , 填入BBB , OK , 下一步 , 直接再下一步(我的程序不需要考虑16位问题)
<30>AliasName = BBB , Path = "c:/data"(这既是现在数据库的路径,也是在用户机器上数据库的路径)
Type = Microsoft Access Driver (*.mdb)
在 List any optional parameters for the alias below 中填入上面<22>中
单击右边Defaults时出现的参数,DATABASE NAME=c:/data/sj.mdb
ODBC DSN=MyAccess 或干脆什么都不添
下一步 , 完成
<31>单击 Groups and Files
<32>在Groups页中 , 将数据库文件(c:/data/sj.mdb)加到 Program Files
将Charles所说的Odbccp32.dll , odbcad32.exe,odbcint.dll,odbc32.dll,msvcrt.dll
加到System Files-WinSysDir中
或者将以前rss在Q0107880.htm中说过的
DS32GT.DLL MSJET35.DLL DS16GT.DLL MSJTER35.DLL ODBC32GT.DLL MSJINT35.DLL
ODBC16GT.DLL VBAJET32.DLL ODBCINST.DLL VBAR332.DLL ODBCINST.HLP
MSREPL35.DLL ODBCCP32.CPL ODBCAO32.EXE MSVCRT40.DLL ODBCTRAC.DLL
ODBCINT.DLL ODBCCR32.DLL MSRD2X35.DLL ODBCJT32.DLL ODBCJI32.DLL
ODBCTL32.DLL 一起加到System Files-WinSysDir中
<33>Disk Builder

在另一机器上只装了一个Windows98,将刚才的软件包安装.
运行, 却报告说 Unknown database Alias:BBB
请问各位大侠,错误在哪里?


2.用C++Builder(或Delphi)本身的驱动程序连接Access
为安全起见,我完全安装了Office97
<1>打开 "BDE Administrator"
<2>选择 Databases(页)
<3>单击 菜单Object|New
<4>选择 MSACCESS
<5>单击 OK
<6>选择 右边Definition(页)
<7>DATABASE NAME = c:/data/sj.mdb (其他不设)
<8>回到 左边Databases(页),将新加的别名设为CCC
<9>单击 菜单Object|Apply
但在应用时却给出这样的错误:Cannot load an IDAPI service library.
File: c:/windows/msapps/dao/dao3032.dll
Alias: CCC
请问各位大侠,错误在哪里?
 
cytown:
>>access用bde设置确实好象有问题
BDE Administrator->Configuration->Drivers->Native->MSAccess
DLL32缺省为IDDAO32.dll,设置为<font color=red>IDDA3532.dll</font>即可

sw:
我的观点和阿猫一样,
<B>定义Alias:</B>
BDE Administrator->Databases->New
Database Driver Name选MSAccess,这是BDE自带的for Access驱动程序
Database Name设置为你的Access数据库文件名,即可

<B>在程序中使用这个Alias:</B>
加入一个TDatabase组件,
属性AliasName指定为刚才建立的Alias
属性DatabaseName自己定义一个,其他所有使用该数据库的Dataset的DatabaseName属性设置为相同
属性LoginPrompt设置为False
Params参数中增加以下内容:
'User name='
'Password='
Connected设置为True

<B>不使用Alias,直接连接到数据库的:</B>
仍用TDatabase组件,但不通过Alias来确定数据库,
所有数据库设置全部在Params属性中,
方法:双击TDatabase组件,出现设计向导,设置好所有应该设置的属性即可
上例中,应该设置:
Database Driver Name为MSAccess
Login Prompt为False
Params为:
'Database Name=C:/.../.../xxxx.mdb'
'User name='
'Password='
 
呵呵, 终于发现错的地方了:-)
原来把database driver设成Microsoft Access Driver (*.mdb)了, 这是odbc
的驱动, 当然要设定dsn了, 如果是bde, 要用msaccess的驱动才行, 很简单, 却
困扰了我很长时间:-(
 
各位大侠:
用C++Builder或Delphi自带的驱动程序连接Access已经成功.
现在只剩下一步了,就是用ODBC连接Access,连接,运行都成功,
只是做的安装盘在用户的机器上安装后,运行时报告说"没有找到
我设的别名".
请大家再费心帮我找找原因,这一步解决后马上就"发奖金".
 
BDE TDatabase 参数设置:使用driver name:msaccess
(点一下Default按钮,再输入1,5行)
DATABASE NAME=d:/database/xxxx.mdb
USER NAME=
OPEN MODE=READ/WRITE
LANGDRIVER=
SYSTEM DATABASE=d:/database/system.mdw
PASSWORD=

然后设置别名
SYSTEM DATABASE 如果不用,可能会有问题
安装ACCESS后可以在windows/system 下找到system.mdw,可以复制到你的数据库
目录,发行时一并打包。
没有必要设置 BDE Administrator
 
在windows/system 下找到system.mdw,复制到你的数据库目录,发行时一并打包。
 
讨论好精彩!!!
 
多人接受答案了。
 
注意要是odbc 驱动,access 可能不支持事务,且delphi 中的table 中各个field
都可以用asstring 与access 进行存储!!
要是用了BDE access 可以支持事务,但是程序对数据属性要求边高了,要是数据库的field是number 几不能用asstring 进行存储了
 
后退
顶部