ODAC使用
来源:互联网 发布:axure rp mac 编辑:程序博客网 时间:2024/06/05 06:19
ODAC使用1 —— 写在前面
本来《ODAC使用2》是我写的第一篇有关ODAC使用的文章,但写着写着发现还有一些东西(除了ODAC控件安装)要写在前面。
TOraSession组件:
Session(会话)程序与数据库沟通的基础,就是说,要想操作数据库中的数据(查询、插入或是更新),首先要做的就是要开通程序与数据库服务之间的会话。
我是Java出身的,不知道是不是可以这样理解,Session就像是Java中的Connection(数据库连接)。
在以后的部分中会常常用到TOraSession组件,谁叫Ta是基础呢。
。。。 。。。
以后可能还会有需要写在前面的东西,随时可能添加。。。
ODAC使用2 —— TOraDataSource组件
由于工作需要,现在要学习在C++ Builder中使用ODAC(Oracle Data Access Components)的数据库操作,因为我一直以来都是做Java方面工作的,所以对C++,尤其是C++ Builder不是太熟悉。
但是,Google了一下,现在网上有关ODAC使用的内容非常少(不知道是什么原因,在网络上C++的资源要比Java资源少得多,有知道资源朋友推荐一下,谢谢)。
后来,对照了部分ODAC组件和C++ Builder自带数据库组件的方法,发现一个神奇的问题,ODAC组件和C++ Builder自带数据库组件的方法大部分是类似的,于是我找来一本《C++ Builder 6程序设计教程》(陆为中 刘文亮 等 编著,第7章7.3数据访问组件)。
ODAC使用的文章主要以《C++ Builder 6程序设计教程》为参考,甚至摘录部分内容。
整理一下,加强记忆,方便以后查阅。
名词:
数据集组件:通过设置其属性能够连接数据库,如:TOraQuery、TOraTable、TOraStoredProc组件;
数据控制组件:略
TOraDataSource组件:
TOraDataSource组件联系数据集组件和数据控制组件;
1.属性说明
AutoEdit属性
AutoEdit属性用于控制用户是否能对与之连接的数据集中的数据进行修改。
DataSet属性
上面说过的“TOraDataSource组件联系数据集组件和数据控制组件”,这个DataSet属性就是指定数据源组件引用哪个数据集组件的。
该属性可以在程序设计时指定,也可以在程序运行时赋值。
Enabled属性
Enabled属性控制与TOraDataSource组件相连的数据控制组件是否显示数据。Enabled属性值为true时,数据控制组件显示数据;Enabled属性值为false时,数据控制组件则不显示任何数据。
Enabled属性默认值为true。
State属性
State属性返回与TOraDataSource组件相连的数据集组件的当前状态。
当Enabled属性为false或者没有指定DataSet属性时,无论数据集组件的实际状态如何,State属性总是为dsInactive。否则,State属性值与数据集的当前状态相符。
2.方法说明
Edit方法,该方法允许用户对与该数据源组件相关联的数据库表进行编辑修改。Edit方法首先检查AutoEdit的属性值是否为true,State属性是否处于dsBrowse状态。然后,再调用数据集Edit方法。检查这些状态的目的是保证数据集组件处于支持编辑的状态。
3.事件说明
OnDataChange:暂不做描述
OnStateChange:暂不做描述
OnUpdateData:暂不做描述
例子:
新建一个Application项目,在Form1中一个TLabel、三个按钮,再添加TOraSession、TOraQuery、TOraDataSource三个对象;
双击TOraSession对象,在填出窗口中分别填入Username、Password、Server、Home,然后关闭窗口;设置三个按钮分别为连接、断开和关闭;
双击连接按钮,写入以下内容:
-------------------------------------------------------------------------------------------------------------
void __fastcall TForm1::connectClick(TObject *Sender)
{
OraSession1->Connect();
OraQuery1->Session = OraSession1;
OraQuery1->SQL->Clear();
OraQuery1->SQL->Add("select a,b,c from test");
OraQuery1->Open();
OraDataSource1->DataSet = OraQuery1;
}
-------------------------------------------------------------------------------------------------------------
双击断开按钮,写入以下内容:
-------------------------------------------------------------------------------------------------------------
void __fastcall TForm1::disconnectClick(TObject *Sender)
{
OraSession1->Disconnect();
}
-------------------------------------------------------------------------------------------------------------
双击关闭按钮,写入以下内容:
-------------------------------------------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Form1->Close();
}
-------------------------------------------------------------------------------------------------------------
选择TOraDataSource对象,在左边的Object Inspector窗口选择Events卡片,双击OnStateChange,写入以下内容:
-------------------------------------------------------------------------------------------------------------
void __fastcall TForm1::OraDataSource1StateChange(TObject *Sender)
{
Label1->Caption = OraDataSource1->State;
}
-------------------------------------------------------------------------------------------------------------
点击“F9”运行。
但是,Google了一下,现在网上有关ODAC使用的内容非常少(不知道是什么原因,在网络上C++的资源要比Java资源少得多,有知道资源朋友推荐一下,谢谢)。
后来,对照了部分ODAC组件和C++ Builder自带数据库组件的方法,发现一个神奇的问题,ODAC组件和C++ Builder自带数据库组件的方法大部分是类似的,于是我找来一本《C++ Builder 6程序设计教程》(陆为中 刘文亮 等 编著,第7章7.3数据访问组件)。
ODAC使用的文章主要以《C++ Builder 6程序设计教程》为参考,甚至摘录部分内容。
整理一下,加强记忆,方便以后查阅。
名词:
数据集组件:通过设置其属性能够连接数据库,如:TOraQuery、TOraTable、TOraStoredProc组件;
数据控制组件:略
TOraDataSource组件:
TOraDataSource组件联系数据集组件和数据控制组件;
1.属性说明
AutoEdit属性
AutoEdit属性用于控制用户是否能对与之连接的数据集中的数据进行修改。
DataSet属性
上面说过的“TOraDataSource组件联系数据集组件和数据控制组件”,这个DataSet属性就是指定数据源组件引用哪个数据集组件的。
该属性可以在程序设计时指定,也可以在程序运行时赋值。
Enabled属性
Enabled属性控制与TOraDataSource组件相连的数据控制组件是否显示数据。Enabled属性值为true时,数据控制组件显示数据;Enabled属性值为false时,数据控制组件则不显示任何数据。
Enabled属性默认值为true。
State属性
State属性返回与TOraDataSource组件相连的数据集组件的当前状态。
当Enabled属性为false或者没有指定DataSet属性时,无论数据集组件的实际状态如何,State属性总是为dsInactive。否则,State属性值与数据集的当前状态相符。
2.方法说明
Edit方法,该方法允许用户对与该数据源组件相关联的数据库表进行编辑修改。Edit方法首先检查AutoEdit的属性值是否为true,State属性是否处于dsBrowse状态。然后,再调用数据集Edit方法。检查这些状态的目的是保证数据集组件处于支持编辑的状态。
3.事件说明
OnDataChange:暂不做描述
OnStateChange:暂不做描述
OnUpdateData:暂不做描述
例子:
新建一个Application项目,在Form1中一个TLabel、三个按钮,再添加TOraSession、TOraQuery、TOraDataSource三个对象;
双击TOraSession对象,在填出窗口中分别填入Username、Password、Server、Home,然后关闭窗口;设置三个按钮分别为连接、断开和关闭;
双击连接按钮,写入以下内容:
-------------------------------------------------------------------------------------------------------------
void __fastcall TForm1::connectClick(TObject *Sender)
{
OraSession1->Connect();
OraQuery1->Session = OraSession1;
OraQuery1->SQL->Clear();
OraQuery1->SQL->Add("select a,b,c from test");
OraQuery1->Open();
OraDataSource1->DataSet = OraQuery1;
}
-------------------------------------------------------------------------------------------------------------
双击断开按钮,写入以下内容:
-------------------------------------------------------------------------------------------------------------
void __fastcall TForm1::disconnectClick(TObject *Sender)
{
OraSession1->Disconnect();
}
-------------------------------------------------------------------------------------------------------------
双击关闭按钮,写入以下内容:
-------------------------------------------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Form1->Close();
}
-------------------------------------------------------------------------------------------------------------
选择TOraDataSource对象,在左边的Object Inspector窗口选择Events卡片,双击OnStateChange,写入以下内容:
-------------------------------------------------------------------------------------------------------------
void __fastcall TForm1::OraDataSource1StateChange(TObject *Sender)
{
Label1->Caption = OraDataSource1->State;
}
-------------------------------------------------------------------------------------------------------------
点击“F9”运行。
ODAC使用3 —— TOraTable组件(1/2)
在ODAC的组件中,TOraTable、TOraQuery和ToraStoreProc三个组件用于来联系应用程序和数据库表,Ta们同属于数据集(DataSet)组件,都是继承数据集而来;因此,有着许多共同的属性、方法和事件。
C++ Builder中应用程序通过数据集组件(基本单元)来访问数据库。
应用程序中的数据控制组件通过数据集组件与数据库表连接,并操作(插入、删除或是修改)其中的数据。TOraTable组件只用于处理单一表,多表处理要使用TOraQuery组件。
1.TOraTable组件与数据库表连接
Session属性
TOraSession负责打开与数据库的会话,Session属性就是要告诉TOraTable组件对象通过哪个Session来访问数据库,或是说选择不同的Session就是选择不同的数据库。
TableName属性
TableName属性用来指定组件所连接的表。Ta可以在设计阶段给定,也可以在运行时通过复制语句修改此属性。
注意:设定TableName属性时,Active属性一定要设为false(Active?)
ReadOnly属性
该属性设置用true时,说明不能对TOraTable组件连接的表进行修改;当为false(默认值)则可以修改。
2.数据库表的打开、关闭与清空
Active属性
通过Active属性可以打开和关闭数据库表,Active属性设为true时打开数据库表,设为false时将关闭数据库表。
Open方法
调用Open方法打开数据库表,将Active属性值为true。
Close方法
调用Close方法关闭数据库表,同时将Active属性值为false。
注意:当属性值Sessioin和TableName发生变化时,Active属性会自动变为false。
EmptyTable方法
调用后清空数据库表中的全部记录,该方法只能在数据库表关闭的情况下进行。
针对蓝色部分的描述,我试验了一下:
OraTable1->TableName = "test2";
OraTable1->Open();
//OraTable1->Close();
OraTable1->EmptyTable();
执行结果,表test2还是被清空了,可能这只适用于TTable组件,不适用于TOraTable组件;同样,我也在Close的情况下EmptyTable,表也被清空了。
3.记录指针的移动
First方法
将记录指针移到表的第一条记录。
Prior方法
将记录指针移到当前指向记录的上一条记录。
Next方法
将记录指针移到当前指向记录的下一条记录。
Last方法
将记录指针移到表的最后一条记录。
MoveBy(n)方法
将记录指针从当前位置移动n条记录;n>0表示向后移动,n<0表示向前移动。
Bof和Eof属性
这两个属性的值均为布尔值。Bof当前记录指针在表的第一个记录时,值为true;Eof当前记录指针在表的最后一个记录时,值为true。
如果Bof和Eof都为true时,则表示表为空。
4.记录的添加、插入、删除和编辑
Append方法
该方法在数据库表的末尾加一条空记录,并将数据集置为插入状态,新的记录置为当前记录。
AppendRecord方法
该方法将给定的数据记录添加到数据库表的末尾,并将数据集置为插入状态,新的记录置为当前记录。
如:OraTable->AppendRecord(ARRAYOFCONST(("1", "2", "3")));
其中,ARRAYOFCONST是一个宏,将给定的数据转换为AppendRecord方法需要的TVarRec类型。将缺少的字段值填写为NULL。
Insert方法
该方法在表的当前记录之前插入一条空白记录,并将数据集置为插入状态。
InsertRecord方法
该方法与AppendRecord类似,在表的当前记录之前插入一条给定数据的记录,并将数据集置为插入状态。
Eidt方法
调用Edit方法使数据表处于编辑状态。如果数据集为空,则Edit方法调用Insert方法。
Post方法
该方法将当前编辑、修改的数据写入物理数据库表。
Cancel方法
取消对表中记录的修改(还未Post的),并将数据集置为dsBrowse状态。
Delete方法
删除表中的指针指向记录。
Refresh方法
刷新当前数据表,通常用于对SQL数据库表的处理(这是书上的原话,难道还有不是SQL的数据库?此话,对ODAC好像不适用)
看到这里,我才发现原来ODAC和什么BDE有好些是不一样的,《C++ Builder程序设计教程》中有两节“记录的定位与查找”和“设定数据库查找范围的方法”,其中讲解的多数的TTable方法或属性在TOraTable中都是没有的。
5.过滤记录
Filter属性
这个属性有点像select语句中where部分,Filter属性不仅可以直接设置条件,如A=‘1’;也可以在程序运行时设置,如:
OraTable->Filter = "A='" + Edit1->Text + "'";
OraTable->Filtered = true;
Filtered属性
当该属性值为true时,过滤器有效,满足条件的显示,否则全部显示。
6.数据表中的字段数、记录数与控制连接
FieldCount属性:字段个数
KeyFieldCount属性:主键个数
RecordCount属性:记录数
DisableControls方法:禁止在数据控制组件上显示对表的处理过程,此方法可以加快表的处理速度。
EnableControls方法:运行在数据控制组件上显示对表的处理过程。
还有个第7部分,挺有意思的在Java里没有的,挺神奇的,《实现多表关联》,有一个小例子,所以单独再列一篇。
C++ Builder中应用程序通过数据集组件(基本单元)来访问数据库。
应用程序中的数据控制组件通过数据集组件与数据库表连接,并操作(插入、删除或是修改)其中的数据。TOraTable组件只用于处理单一表,多表处理要使用TOraQuery组件。
1.TOraTable组件与数据库表连接
Session属性
TOraSession负责打开与数据库的会话,Session属性就是要告诉TOraTable组件对象通过哪个Session来访问数据库,或是说选择不同的Session就是选择不同的数据库。
TableName属性
TableName属性用来指定组件所连接的表。Ta可以在设计阶段给定,也可以在运行时通过复制语句修改此属性。
注意:设定TableName属性时,Active属性一定要设为false(Active?)
ReadOnly属性
该属性设置用true时,说明不能对TOraTable组件连接的表进行修改;当为false(默认值)则可以修改。
2.数据库表的打开、关闭与清空
Active属性
通过Active属性可以打开和关闭数据库表,Active属性设为true时打开数据库表,设为false时将关闭数据库表。
Open方法
调用Open方法打开数据库表,将Active属性值为true。
Close方法
调用Close方法关闭数据库表,同时将Active属性值为false。
注意:当属性值Sessioin和TableName发生变化时,Active属性会自动变为false。
EmptyTable方法
调用后清空数据库表中的全部记录,该方法只能在数据库表关闭的情况下进行。
针对蓝色部分的描述,我试验了一下:
OraTable1->TableName = "test2";
OraTable1->Open();
//OraTable1->Close();
OraTable1->EmptyTable();
执行结果,表test2还是被清空了,可能这只适用于TTable组件,不适用于TOraTable组件;同样,我也在Close的情况下EmptyTable,表也被清空了。
3.记录指针的移动
First方法
将记录指针移到表的第一条记录。
Prior方法
将记录指针移到当前指向记录的上一条记录。
Next方法
将记录指针移到当前指向记录的下一条记录。
Last方法
将记录指针移到表的最后一条记录。
MoveBy(n)方法
将记录指针从当前位置移动n条记录;n>0表示向后移动,n<0表示向前移动。
Bof和Eof属性
这两个属性的值均为布尔值。Bof当前记录指针在表的第一个记录时,值为true;Eof当前记录指针在表的最后一个记录时,值为true。
如果Bof和Eof都为true时,则表示表为空。
4.记录的添加、插入、删除和编辑
Append方法
该方法在数据库表的末尾加一条空记录,并将数据集置为插入状态,新的记录置为当前记录。
AppendRecord方法
该方法将给定的数据记录添加到数据库表的末尾,并将数据集置为插入状态,新的记录置为当前记录。
如:OraTable->AppendRecord(ARRAYOFCONST(("1", "2", "3")));
其中,ARRAYOFCONST是一个宏,将给定的数据转换为AppendRecord方法需要的TVarRec类型。将缺少的字段值填写为NULL。
Insert方法
该方法在表的当前记录之前插入一条空白记录,并将数据集置为插入状态。
InsertRecord方法
该方法与AppendRecord类似,在表的当前记录之前插入一条给定数据的记录,并将数据集置为插入状态。
Eidt方法
调用Edit方法使数据表处于编辑状态。如果数据集为空,则Edit方法调用Insert方法。
Post方法
该方法将当前编辑、修改的数据写入物理数据库表。
Cancel方法
取消对表中记录的修改(还未Post的),并将数据集置为dsBrowse状态。
Delete方法
删除表中的指针指向记录。
Refresh方法
刷新当前数据表,通常用于对SQL数据库表的处理(这是书上的原话,难道还有不是SQL的数据库?此话,对ODAC好像不适用)
看到这里,我才发现原来ODAC和什么BDE有好些是不一样的,《C++ Builder程序设计教程》中有两节“记录的定位与查找”和“设定数据库查找范围的方法”,其中讲解的多数的TTable方法或属性在TOraTable中都是没有的。
5.过滤记录
Filter属性
这个属性有点像select语句中where部分,Filter属性不仅可以直接设置条件,如A=‘1’;也可以在程序运行时设置,如:
OraTable->Filter = "A='" + Edit1->Text + "'";
OraTable->Filtered = true;
Filtered属性
当该属性值为true时,过滤器有效,满足条件的显示,否则全部显示。
6.数据表中的字段数、记录数与控制连接
FieldCount属性:字段个数
KeyFieldCount属性:主键个数
RecordCount属性:记录数
DisableControls方法:禁止在数据控制组件上显示对表的处理过程,此方法可以加快表的处理速度。
EnableControls方法:运行在数据控制组件上显示对表的处理过程。
还有个第7部分,挺有意思的在Java里没有的,挺神奇的,《实现多表关联》,有一个小例子,所以单独再列一篇。
ODAC使用4 —— TOraTable组件(2/2)
实现多表关联
这部分挺是神奇的,TOraTable可以设置Ta的上一级及与上级的对应字段,在设置好这些后,table中的数据会根据上级table中选中的记录显示不同的符合对应条件的记录。
在TOraTable是通过两个关键属性来实现Ta神奇的地方的。
MasterSource属性
在主从表关系中,给从表指明方向,设置主表的DataSource组件名称。
MasterFields属性
上面,主从表已经确定,下面需要指明字段的对应关系了。
例子:
首先,在库中新建两个表,随便放上些数,提供后面使用。
-------------------------------------------------------------------------------------------------------------
create table example_master (
m1 VARCHAR2(10),
m2 VARCHAR2(10),
m3 VARCHAR2(10)
);
alter table example_master
add constraint key_example_master primary key (m1);
create table example_detail (
d1 VARCHAR2(10),
d2 VARCHAR2(10),
md VARCHAR2(10)
);
alter table example_detail
add constraint key_example_detail primary key (d1);
insert into example_master (m1,m2,m3) values ('1', '4', '3');
insert into example_master (m1,m2,m3) values ('2', '3', '3');
insert into example_master (m1,m2,m3) values ('3', '2', '3');
insert into example_master (m1,m2,m3) values ('4', '1', '3');
insert into example_detail (d1,d2,md) values ('1', '0', '1');
insert into example_detail (d1,d2,md) values ('2', '9', '1');
insert into example_detail (d1,d2,md) values ('3', '8', '3');
insert into example_detail (d1,d2,md) values ('4', '7', '3');
insert into example_detail (d1,d2,md) values ('5', '6', '2');
insert into example_detail (d1,d2,md) values ('6', '5', '2');
insert into example_detail (d1,d2,md) values ('7', '4', '2');
insert into example_detail (d1,d2,md) values ('8', '3', '4');
insert into example_detail (d1,d2,md) values ('9', '2', '4');
insert into example_detail (d1,d2,md) values ('0', '1', '4');
-------------------------------------------------------------------------------------------------------------
在C++ Builder中新建一个Application,
添加一个TOraSession,命名为“session1”,并填好连接数据库的相关信息;
添加一个TOraTable,命名为“mTable”,双击组件,Table Name:EXAMPLE_MASTER,Key Fields:M1;
添加一个TOraDataSource,命名为“mSource”,并DataSet选择为“mTable”;
添加一个TOraTable,命名为“dTable”,这次这个是从表的了,双击组件,Table Name:EXAMPLE_DETAIL,Key Fields:D1;还有关键的两步,MasterSource属性设置为“mSource”,也就是主表的TOraDataSource ,再点击MasterFields后面的“...”按钮,弹出对话框,选择MD和M1,点击“Add”,OK;
添加一个TOraDataSource,命名为“dSource”,并DataSet选择为“mTable”;
添加一个DBGrid,命名为“mGrid”,DataSource选择为“mSource”;
添加一个DBGrid,命名为“dGrid”,DataSource选择为“dSource”;
添加一个TButton,命名为“Connect”,双击按钮主键写上事件处理:
-------------------------------------------------------------------------------------------------------------
session1->Connect();
mTable->Open();
dTable->Open();
-------------------------------------------------------------------------------------------------------------
添加一个TButton,命名为“Disconnect”,双击按钮主键写上事件处理:
-------------------------------------------------------------------------------------------------------------
mTable->Close();
dTable->Close();
session1->Disconnect();
-------------------------------------------------------------------------------------------------------------
到此OK,要做的都做了,可以F9执行一下看看效果。
点击“Connect”按钮,数据就出来了,而且下面的数还跟着上面跑,借用同事的话——“这就是Ta神奇的地方”。
这部分挺是神奇的,TOraTable可以设置Ta的上一级及与上级的对应字段,在设置好这些后,table中的数据会根据上级table中选中的记录显示不同的符合对应条件的记录。
在TOraTable是通过两个关键属性来实现Ta神奇的地方的。
MasterSource属性
在主从表关系中,给从表指明方向,设置主表的DataSource组件名称。
MasterFields属性
上面,主从表已经确定,下面需要指明字段的对应关系了。
例子:
首先,在库中新建两个表,随便放上些数,提供后面使用。
-------------------------------------------------------------------------------------------------------------
create table example_master (
m1 VARCHAR2(10),
m2 VARCHAR2(10),
m3 VARCHAR2(10)
);
alter table example_master
add constraint key_example_master primary key (m1);
create table example_detail (
d1 VARCHAR2(10),
d2 VARCHAR2(10),
md VARCHAR2(10)
);
alter table example_detail
add constraint key_example_detail primary key (d1);
insert into example_master (m1,m2,m3) values ('1', '4', '3');
insert into example_master (m1,m2,m3) values ('2', '3', '3');
insert into example_master (m1,m2,m3) values ('3', '2', '3');
insert into example_master (m1,m2,m3) values ('4', '1', '3');
insert into example_detail (d1,d2,md) values ('1', '0', '1');
insert into example_detail (d1,d2,md) values ('2', '9', '1');
insert into example_detail (d1,d2,md) values ('3', '8', '3');
insert into example_detail (d1,d2,md) values ('4', '7', '3');
insert into example_detail (d1,d2,md) values ('5', '6', '2');
insert into example_detail (d1,d2,md) values ('6', '5', '2');
insert into example_detail (d1,d2,md) values ('7', '4', '2');
insert into example_detail (d1,d2,md) values ('8', '3', '4');
insert into example_detail (d1,d2,md) values ('9', '2', '4');
insert into example_detail (d1,d2,md) values ('0', '1', '4');
-------------------------------------------------------------------------------------------------------------
在C++ Builder中新建一个Application,
添加一个TOraSession,命名为“session1”,并填好连接数据库的相关信息;
添加一个TOraTable,命名为“mTable”,双击组件,Table Name:EXAMPLE_MASTER,Key Fields:M1;
添加一个TOraDataSource,命名为“mSource”,并DataSet选择为“mTable”;
添加一个TOraTable,命名为“dTable”,这次这个是从表的了,双击组件,Table Name:EXAMPLE_DETAIL,Key Fields:D1;还有关键的两步,MasterSource属性设置为“mSource”,也就是主表的TOraDataSource ,再点击MasterFields后面的“...”按钮,弹出对话框,选择MD和M1,点击“Add”,OK;
添加一个TOraDataSource,命名为“dSource”,并DataSet选择为“mTable”;
添加一个DBGrid,命名为“mGrid”,DataSource选择为“mSource”;
添加一个DBGrid,命名为“dGrid”,DataSource选择为“dSource”;
添加一个TButton,命名为“Connect”,双击按钮主键写上事件处理:
-------------------------------------------------------------------------------------------------------------
session1->Connect();
mTable->Open();
dTable->Open();
-------------------------------------------------------------------------------------------------------------
添加一个TButton,命名为“Disconnect”,双击按钮主键写上事件处理:
-------------------------------------------------------------------------------------------------------------
mTable->Close();
dTable->Close();
session1->Disconnect();
-------------------------------------------------------------------------------------------------------------
到此OK,要做的都做了,可以F9执行一下看看效果。
点击“Connect”按钮,数据就出来了,而且下面的数还跟着上面跑,借用同事的话——“这就是Ta神奇的地方”。
ODAC使用5 —— TOraQuery组件(终)
本来我以为TOraQuery组件是比较复杂的,在整理了TOraTable组件后,发现TOraQuery并没有想象中的那么麻烦。
感觉上TOraQuery与TOraTable唯一的不同就是,table要指定表名和主键,而query有的就是一个SQL语句。
TOraQuery组件中SQL语句的编写和执行
编写SQL语句
在此默认大家都会用SQL,有两种方法可以给TOraQuery组件设置SQL,
1)双击TOraQuery组件,在填出的对话框中写SQL语句;
2)通过SQL属性,例如:
OraQuery1->Close();
OraQuery1->SQL->Clear();
OraQuery1->SQL->Add("select * from test2");
OraQuery1->Open();
执行SQL语句
执行又有两种可能,
1)执行返回数据集的SQL语句(如:select),当SQL属性被修改后,应当调用Open方法。
2)对不返回数据集的语句(如:insert、update、delete)使用ExecSQL方法。
动态SQL语句参数
很简单,就是在写SQL语句时,把可能会变动的地方,用“:<动态参数名>”代替;
如何给动态参数赋值呢?
有两种方法,
1)ParamByName方法,根据参数名给参数赋值,如:
Query->ParamByName("hehe")->AsString="ha-ha";
2)Params属性,根据参数在SQL语句中的顺序赋值,如:
Query->Params->Items[0]->AsString="ha-ha";
通过ParamCount属性可以获得参数的数目。
在TOraQuery组件中编辑数据表
要通过TOraQuery组件修改数据也没什么难的,就是我符合两个条件,
1)SQL语句是对单表的查询,且查询中不能有聚集运算(如AVG、SUM)
2)组件的ReadOnly属性设置为false。
《C++ Builder程序设计教程》中还提到了主从表的操作,看了一下,和TOraTable组件的差别不大,不写了。
到此,《C++ Builder程序设计教程》中有关数据库控件就结束了(后面,还有一个综合的例子),有时间在整理一下。
感觉上TOraQuery与TOraTable唯一的不同就是,table要指定表名和主键,而query有的就是一个SQL语句。
TOraQuery组件中SQL语句的编写和执行
编写SQL语句
在此默认大家都会用SQL,有两种方法可以给TOraQuery组件设置SQL,
1)双击TOraQuery组件,在填出的对话框中写SQL语句;
2)通过SQL属性,例如:
OraQuery1->Close();
OraQuery1->SQL->Clear();
OraQuery1->SQL->Add("select * from test2");
OraQuery1->Open();
执行SQL语句
执行又有两种可能,
1)执行返回数据集的SQL语句(如:select),当SQL属性被修改后,应当调用Open方法。
2)对不返回数据集的语句(如:insert、update、delete)使用ExecSQL方法。
动态SQL语句参数
很简单,就是在写SQL语句时,把可能会变动的地方,用“:<动态参数名>”代替;
如何给动态参数赋值呢?
有两种方法,
1)ParamByName方法,根据参数名给参数赋值,如:
Query->ParamByName("hehe")->AsString="ha-ha";
2)Params属性,根据参数在SQL语句中的顺序赋值,如:
Query->Params->Items[0]->AsString="ha-ha";
通过ParamCount属性可以获得参数的数目。
在TOraQuery组件中编辑数据表
要通过TOraQuery组件修改数据也没什么难的,就是我符合两个条件,
1)SQL语句是对单表的查询,且查询中不能有聚集运算(如AVG、SUM)
2)组件的ReadOnly属性设置为false。
《C++ Builder程序设计教程》中还提到了主从表的操作,看了一下,和TOraTable组件的差别不大,不写了。
到此,《C++ Builder程序设计教程》中有关数据库控件就结束了(后面,还有一个综合的例子),有时间在整理一下。
0 0
- ODAC使用
- odac组件(437使用)
- ODAC使用心得
- odac
- ODAC 应用技巧 (一)使用 ODAC 的 Net 方式
- ODAC使用数据根更新的问题
- ODAC安装配置与使用详解
- ODAC安装配置与使用详解
- C#使用ODAC查询Oracle数据库
- ODAC 使用技巧 (四)使用VARRAY数据类型
- ODAC 使用技巧 (四)使用VARRAY数据类型
- ODAC 应用技巧 (二)使用 BLOB 及 CLOB 数据类型
- vs2010中使用odac for .net的连接配置
- Delphi连接Oracle控件ODAC的安装及使用
- C#使用ODAC向Oracle数据库插入海量实时数据
- Delphi连接Oracle控件ODAC的安装及使用
- ODAC简介
- ODAC简介
- (intermediate) 平面区域 UVA Art of War
- Flatten Binary Tree to Linked List
- C++ 标准输入输出 操纵符
- Win8系统安装VMware9.0并安装Ubuntu12
- 两个人在一起,不要说永远,要说珍惜。
- ODAC使用
- 两个人在一起,不要说永远,要说珍惜。
- OpenCV学习记录2//浅尝图像金字塔
- 10个有关String的面试问题
- matlab编辑器颜色风格设置
- 关于Lua脚本中跨路径引用以及多重跨路径引用的问题
- ubuntu 12.04中搭建tftp服务器
- 两个人在一起,不要说永远,要说珍惜。
- walk