OO4O随笔

总结

 OO4O 可以比较方便的用于  数据查询, 数据修改, 存储到XML文件(修改TAG最好通过文本)。

 多线程不确定性。

 不支持数据插入!

 

数据库无非两种东西: 数据和属性,操作数据和属性的方法。   

OO4O特点:

1. 系统要求Windows XP, Windows 2000, or Windows Server 2003。

2. 不提供插入数据接口..可以读数据,更新数据



准备工作: 1. Getting Started  引入相关.h .lib .dll。    2. OStartup();OShutdown();

oo4o对象列表Classes

oo4o方法列表Methods  注: 用起来没有直接看每个对象有哪个Operations方便对象列表 只是对每个对象里的Operations的一个罗列。

 

 

架构图

手画的,没时间腾上来。如果有需要的反应一下。


 

OAdvise ,OAQ, OAQAgent, OAQMsg: oracle10g没介绍,在8i中。


oracleAPI对原始类型只支持:int,long,double,char.   还有他自己的类型:

OObject OBfile ,OBlob OClob :oracle的数据类型  

ORef :oracle指针

OCollection : 对象集合。类似数组,但是可以装对象。


OClientOSession ODatabaseODynaset OField,包含顺序。

OSession : 对ODatabase的操作进行 事务 控制。 ODatabase的多个 修改类型 语句,可以通过OSession进行原子控制。

OConnection :   ODatabaseODynasetOConnectionCollection来GetConnectStringGetDatabaseName,GetSession

 

OBinder , OBound  :写界面交互操作时绑定数据集。用不上没细看。

 

OParamArray  , OParameter ,OParameterCollection :  执行SQL语句时,传参用。
OParameterCollection: 保存着实际使用的参数集合。

OParameter :

1. Operations包含了所有可用类型,类似operator const char *, 意思就是const char *可以当作变量类型。

2. 可以指向OParameterCollection中的 单个变量

OParamArray:可以指向 OParameterCollection 中的 数组变量。

例子:

1. 数据库连接,查询 的例子:A Simple Example

   注意: 连接时以 数据库全局变量名+用户名+密码链接。  

2. 数据库属性,字段属性获取 的例子: Example: Displaying Attributes of an OMetaData Object

3. 往SQL语句里传参数 的例子:OParameterOParamArray , ExecuteSQL
  注意: 目前我测试,select * from A where name = B;  A不能用参数传递, B可以。 其他位置不知。


非主线例子:

1. 获取另一个数据库连接:Close


小结

会操作数据和属性了, 数据库的操作就掌握了。


只要大概浏览一遍Classes, 就能基本掌握oo4o了。


疑问:

1. OPARAMETER_INVAR 这些,什么叫输入,输出变量?


调试碰到的问题:

1. setXMLRowTag在某个新建的单线程中起作用,,


糟糕的:XML函数,多线程

XML函数: 只有直接在main下用可以,其他情况下失灵,但也有少数情况有效。

9i以后oo4o增加了XML函数。 

情况1

main()
{
...
  odyn.SetXMLRowsetTag("One");
  odyn.SetXMLRowTag("Two");
  odyn.GetXMLToFile("abc.txt", 0, 2);
..
}
可以。
SaveXML()
{
...
  odyn.SetXMLRowsetTag("One");
  odyn.SetXMLRowTag("Two");
  odyn.GetXMLToFile("abc.txt", 0, 2);
..
}
main()
{
SaveXML();
}
失效。 第一级的One修改了,第二级的Two总为空。

各种尝试都不成。

 

分析:这么简单的改变都出问题,只可能:

1. 我少引用东西了,可是既然能成功,说明应该没少引用东西。

2. 提供函数本身有漏洞,严重的漏洞。


多线程:无法在多线程下使用oracle.h的函数,会在线程退出时报“堆错误,或DLL有bug”

网查原因:1.调整vs的多线程选项, 实践失败   2. dll与exe要在各自空间申请释放变量,不能有交集. 实践但是oracle.h是封装好的,我在单线程也没申请其他变量,,,所以不是这个错误。

分析: 

1. 我少引用东西了,少装东西了。

2. 提供的oraclm32.lib库本身有问题。(oraclm32.dll用不用效果一样)


posted on 2010-10-14 10:06  oleeceo  阅读(4314)  评论(1)    收藏  举报

导航