说明:OrFlying For VBNET 目前只能根据SQL Server的数据库自动产生代码。
1登录系统
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 219.75pt; HEIGHT: 166.5pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.png"></imagedata></shape>
l帐号密码为登录SQL数据库的用户名和密码
l服务器为SQLServer2k的服务器名称或者IP地址
l数据库为指定的数据库的名称,对大小写敏感。
2主界面
<shape id="_x0000_i1026" style="WIDTH: 414.75pt; HEIGHT: 311.25pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image003.png"><font size="3"></font></imagedata></shape>
界面解释:
l菜单
n保存配置,系统自动把转换配置保存到本地的XML文件AgileSoftEccConfig.xml
n保存代码,把自动产生的代码文件保存到选择的目录中。其中关于缓冲类的代码如果为选择为新的VB.NET,则自动生成两个文件,并且保存。如果没有选择需要如上图所示选择现存的两个文件,系统将部分代码自动插入到这两个文件中去。
缓冲集的管理为工程级共享,即在工程内部缓存。刷新的时候需要调用CCacheManage.ReleaseAllCache() 清除缓存。
n产生代码根据当前的配置信息产生代码,分别在后面的五个Tab页面中显示。可以手工复制粘贴。
n退出系统退出系统
l对象列表主要来源于两个源头,以表明成为唯一标示
n数据库,对于当前XML文件中没有配置信息的对象,读取数据库取出相应的字段信息。
n配置文件AgileSoftEccConfig.xml 对于已经产生过代码和保存过的配置信息,从XML文件中读取,并且显示。可以进行编辑。
n注意:数据库的同步功能没有做,也就是说你在变更数据结构后,需要手工保持数据结构和代码转换配置的对应关系。然后在生成代码。
l代码转换配置
n对象名称内部定义的对象名称,唯一标示,如定义为XXX,则将产生CClsXXX CColXXX CEngXXX 等三个文件,并且内部类的名称也如此。
n对象关键字本方案默认所有的系统均有关键字,并且为整形类型 bigint 由代码自动维护而不是数据库的自增量。并且表中的关系最好通过本字段关联。
n关于缓冲剂的代码
u新建vb.net工程,将产生完整的声明文件:MdlEccCache.cls 和管理文件: CCacheManage.cls
u不选择,双击文本框选择现有的文件,则把部分缓冲集的代码插入上述两个文件中。
n对象属性信息手工维护对象的属性
<shape id="_x0000_i1027" style="WIDTH: 230.25pt; HEIGHT: 195pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image005.png"><font size="3"></font></imagedata></shape>
u属性类型
l数据库关联该属性将自动和数据库中对应的字段数据同步,即读取和写入
l变量独立的属性和数据库无关
l实体关联的对象实体如下图所示定义一个关联对象:
<shape id="_x0000_i1028" style="WIDTH: 228.75pt; HEIGHT: 193.5pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image007.png"><font size="3"></font></imagedata></shape>
ü属性名称和对应字段最好以Cls开头表示为独立的一个对象,例如班级的班主任关联对象ClsClass.ClsTeacher
ü数据类型为当前系统中已经产生的基本类类型
ü关联对象为代码转换配置中定义的对象名称
ü关联条件:这里填写当前类中关联字段的名称即可如:Class中有关联Teacher表中的TeacherUID字段,则这里的关联条件写TeacherUID
l实体集合如下图:
<shape id="_x0000_i1029" style="WIDTH: 228.75pt; HEIGHT: 193.5pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image009.png"><font size="3"></font></imagedata></shape>
ü属性名称和对应字段最好以Col开头表示为独立的一个对象,例如班级的学生关联对象ClsClass.ColStudents
ü数据类型为当前系统中已经产生的集合类类型
ü关联对象为代码转换配置中定义的对象名称
ü关联条件:注意这里要写的是关联的SQL语句片段,主要是条件如:对于Class类的ColStudents ,如:
uClassUID=<%ClassUID%> <%ClassUID%>为关联条件,ClassUID为Class类中的ClassUID对应的属性名称,= 号前面的ClassUID为Student表中的关联Class的字段
uClassUID in (Select ClassUID from Class where grade=’二年级’) 固定条件
uNodeTypeUID in (Select Distinct NodeTypeUID from ADP_SysTreeNode Where TreeUID=<%TreeUID%>)
uParentLayerName='Root' and TreeUID=<%TreeUID%>
l基本类代码产生的基本类代码
l集合类代码产生的集合类代码
l引擎类代码产生的引擎类代码
l缓存声明代码产生的缓存声明代码
l缓存管理代码产生的缓存管理代码
3OrFlying Ecc代码的使用
需要引用AgileSoft.CGlbDll.dll
附录会附上相关的数据处理的部分源代码
l获取对象:
Dim xClsStudent as CClsStudent
If not CEngStudent. GetClsStudentByKey(xClsStudent, 102) then
‘错误信息
Endif
Msgbox xClsStudent.Name
如果student对象关联了课程集合类CColCase
则可以直接访问:
Dim xCase as CClsCase
For each xCase in xClsStudent.ColCase
Msgbox xCase.name‘显示课程名称
Next
l插入对象
Dim xClsStudent as new CClsStudent
xClsStudent.IsNew=true
xClsStudent.Name=’张三’
….属性赋值
If not CEngUpdateStudent(xClsStudent) then
‘错误信息
endif
l删除对象
Dim xClsStudent as CClsStudent
If not CEngStudent. GetClsStudentByKey (xClsStudent, 102) then
‘错误信息
Endif
xClsStudent.IsDel=true
If not CEngUpdateStudent(xClsStudent) then
‘错误信息
endif
l修改对象
Dim xClsStudent as CClsStudent
If not CEngStudent. GetClsStudentByKey (xClsStudent, 102) then
‘错误信息
Endif
xClsStudent.Name=’张三<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="123" unitname="’"><span lang="EN-US"><font face="Times New Roman">123’</font></span></chmetcnv>
xClsStudent.IsDirty=true
If not CEngUpdateStudent(xClsStudent) then
‘错误信息
endif
l更新集合对象
Dim xColStudent as CColStudent
If not CEngStudent. GetColStudentBySQL(xColStudent) then‘不传入条件返回所有对象
Endif
‘删除第一个对象
xColStudent(1).IsDel=true
‘修改第二个对象
xColStudent(2).Name=”xxx”
xColStudent(2).IsDirty=true
‘插入新对象
Dim xClsStudent as new CClsStudent
xClsStudent.IsNew=true
xClsStudent.Name=’张三’
xColStudent.Add(xClsStudent)
‘更新数据库
If not CEngStudent.UpdateCol(xColStudent) then
endif