⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 -

📁 数据库封装原代码 1. 该代码可以免费使用, 该代码的名字暂时定为"哲别" 2. 如果你需要使用该代码, 请注明该代码的原来作者: Jacky Zhou 3. 如果你发现该代码有bug,可以自己修改
💻
字号:
---------- 说明 ----------
1. 该代码可以免费使用, 该代码的名字暂时定为"哲别"
2. 如果你需要使用该代码, 请注明该代码的原来作者: Jacky Zhou
3. 如果你发现该代码有bug,可以自己修改或者请给我发email: zyx040404@163.com
4. 该数据库封装代码功能可以对数据库的表,视图和存储过程进行封装,易于系统移植,扩展,使用了interface,factory等方法
5. 核心代码是在"Sample\base\DBGW"里
6. Sample演示了查询,增加,删除记录和如何使用存贮过程


---------- 如何使用Sample代码 ----------
1. 数据库是SQL Server 2005, 在“sample\Database”里有已经生成的数据库,还有数据库脚本
2. 创建完数据库后需要创建数据库的ODBC, TdmSampleDBGW的AleasName必须是ODBC的名字, 参考TdmSampleDBGW.DataModuleCreate
	//init m_db
	m_db.AliasName := 'Sample_SQLServer';
3. 数据库的用户名和密码需要设置在
	procedure TdmSampleDBGW.m_dbBeforeConnect(Sender: TObject);
	begin
	  inherited;

	  if m_db.LoginPrompt = false then
	  begin
	    m_db.Params.Values['USER NAME'] := 'sa';
	    m_db.Params.Values['PASSWORD'] := '';
	  end;
	end;
4. 每一个自定义的Entity类都必须要有一个对应的xml文件, xml文件必须放在“Sample\EntityMap\”路径下
5. 在Factory类里要创建每一个自定义的Entity类, 参考以下代码
	//-----------------------------------------------------------------------------
	//                              GetEntityName
	//-----------------------------------------------------------------------------
	function TFtySample.CreateEntity(strEntityName : String) : IEntity;
	begin
	  strEntityName := LowerCase(strEntityName);

	  if (strEntityName = LowerCase(TEtyUser.Create.GetEntityName)) then
	    Result := TEtyUser.Create
	  else if (strEntityName = LowerCase(TEtySumAge.Create.GetEntityName)) then
	    Result := TEtySumAge.Create
	  else
	    Result := nil;
	end;


---------- 如何写xml文件 ----------
<EntityMap>
	<!--etyUser是TEtyUser.GetEntityName()的值-->
	<EntityName>etyUser</EntityName>

	<!--Table表示该etyUser对应的是数据库的表-->
	<LoadType>Table</LoadType>

	<!--tabUser 是对应的是数据库的表的名字-->
	<TableName>tabUser</TableName>
	<Fields>
		<Field>
			<!--UserName 是TEtyUser类的一个常量字符串, 是FD_USER_NAME = 'UserName'-->
			<EntityFieldName>UserName</EntityFieldName>

			<!--UserName是Entity的UserName对应在表tabUser里的字段名字-->
			<TableFieldName>UserName</TableFieldName>

			<!--string是字段的类型-->
			<TableFieldType>string</TableFieldType>

			<!--字段是否是表的主键(Primary Key)-->
			<IsPK>true</IsPK>
		</Field>

		<Field>
			<EntityFieldName>Address</EntityFieldName>
			<TableFieldName>Address</TableFieldName>
			<TableFieldType>string</TableFieldType>
			<IsPK>false</IsPK>
		</Field>

		<Field>
			<EntityFieldName>Age</EntityFieldName>
			<TableFieldName>Age</TableFieldName>
			<TableFieldType>int</TableFieldType>
			<IsPK>false</IsPK>
		</Field>
	</Fields>
</EntityMap>

说明:
	1. "EntityMap"文件夹的路径必须和EXE路径一样
	2. <LoadType>目前可以是Table, StoredProc
	3. <TableFieldType>目前可以是string, int等


---------- 注意事项 ----------
1. 数据库的字段类型必须是delphi能识别的, 参考 http://www.delphibbs.com/delphibbs/dispq.asp?lid=3693204


---------- 需要改进的地方 ----------
1. 目前只测试过SQL Server数据库, 没有测试过其他数据库
2. <TableFieldType>目前可以是string, int等, 但需要改进
3. <LoadType>目前可以是Table, StoredProc, 但需要改进
4. 不支持主从表直接操作
5. 需要改进FormatValueAppToDB
6. 需要改进FormatValueDBToApp
7. 需要改进ConnectionPool
8. 数据库暂时是用ODBC, 可以改成其他方式


---------- 已知bug ----------
1. TEtyList.Clear并没有真正释放内存
2. Entity = nil并没有真正释放内存, 参考 http://www.delphibbs.com/delphibbs/dispq.asp?lid=3674946

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -