如何使用ADO连接ACCESS数据库并打开一个记录集。我不希望使用ODBC,而是使用connectionstring。
假设有一个数据库MyDB,其中有个表TableA;需要得到一个datasource为'select * from TableA'的记录集对象RecordsetA。具体该怎么做,望给以代码示范。
我想方法应该有多种,方法越多越好,便于学习。
我以前是用VB,新转DELPHI,望指点。
假设有一个数据库MyDB,其中有个表TableA;需要得到一个datasource为'select * from TableA'的记录集对象RecordsetA。具体该怎么做,望给以代码示范。
我想方法应该有多种,方法越多越好,便于学习。
我以前是用VB,新转DELPHI,望指点。
解决方案 »
- initialization (预设值) 出错要怎么解决?
- 关于桌面型数据库的问题?
- 齐达内就是牛,临走了还要你忘不掉!--十年后也不会忘记的话题
- 用过TdxTreeList控件的进来看看
- 系统按键到底保存在系统的哪里?好难啊
- 怎么用Shape画出斜线
- 请教一个ADO的问题!!
- 麻烦大家推荐几个delphi的好网站,最好有详细的系统分析示例的!
- 用delphi开发工厂程序,求合作伙伴!!!!
- #####这个sql语句怎么写??(有详细说明)在线等待######
- devexpress 中如何可以把风格设为 web look&feel
- RC4 Invalid Key length错误,调用Bpl时发生,高分求助
var
myaccess: string;
strSql: string;
recA: TRecordset;
cnn: TConnection;
const
mystr1='Provider=%s;Data Source=%s;Persist Security Info=false;Jet OLEDB:Database Password=%s';
myprovider='Microsoft.Jet.OLEDB.4.0';
mypassword='AAA';
begin
opendialog1.filename:='*.mdb';
if opendialog1.execute then
begin
//打开数据库连接
myaccess:=opendialog1.FileName;
cnn:=TConnection.Create(self);
if cnn.State=adStateOpen then
cnn.Close;
cnn.ConnectionString:=format(mystr1 ,[myprovider,myaccess,mypassword]);
cnn.CommandTimeout:=30;
cnn.CursorLocation:=adUseClient;
cnn.Open('','','',-1);
//打开记录集
strSql:='select * from songs';
recA:=TRecordset.Create(self);
{
???
到这里就不知道怎么办了...
如果用recA.open(),又提示没有该方法。
我用VB的时候,可以肯定recordset对象有open方法,但为什么在delphi中就没有该方法了呢?
}
end;
end;
类似上面的就是connectionstring,当然你可以动态赋值。
动态赋值过程也可以写到BeforeConnect过程里面
希望各位能给予具体的代码以说明。
连接没问题,问题是如何open recordset
直接用AdoDataSet(AdoDataSet,AdoTable,AdoQuery)就行了。
你可以在设计期就将他们连接上(Connetion属性,如果是AdoTable要用TableName选择连接的表,AdoQuery要写SQL语句),然后DataSource连接到AdoDataSet,再连接一个DBGrid就完全把数据表里面的数据全部显示出来。
这是Delphi里面标准数据库连接。
就是数据绑定。
var
DBFile: string;
strSql: string;
recA,cnn: variant;
const
mystr1='Provider=%s;Data Source=%s;Persist Security Info=false;Jet OLEDB:Database Password=%s';
myprovider='Microsoft.Jet.OLEDB.4.0';
mypassword='AAA';
begin
opendialog1.filename:='*.mdb';
if opendialog1.execute then
begin
//打开数据库连接
DBFile:=opendialog1.FileName;
cnn:= CreateOleObject('ADODB.Connection');
cnn.ConnectionString:=format(mystr1 ,[myprovider,DBFile,mypassword]);
cnn.Open('','','',-1);
if cnn.State=adStateOpen then
showmessage('connected');
//打开记录集
strSql:='select * from songs';
recA:= CreateOleObject('ADODB.RecordSet');
recA.open(strSql,cnn,adOpenStatic,adLockOptimistic,adCmdText); showmessage(inttostr(recA.recordcount));
recA.Close; end;
建议你先看清问题,我不希望使用可视化控件,我想使用ADO的标准化组件来实现。
如果你非要自己写,可以参照SOURCE\VCL\ADODB.PAS,看看它是怎么封装的。
你的意思是:delphi中的ADO控件,将MDAC中的ADO组件又进行了二次封装,是这个意思吧?
而且我试了一下,使用delphi的ADO,在功能实现上,代码要比原生的ADO还要简单些。
直接用AdoDataSet(AdoDataSet,AdoTable,AdoQuery)就行了。
------------------
这是解决我问题的关键所在。