出售稳定运行多年软件架构源码(0分)

  • 主题发起人 主题发起人 风清杨
  • 开始时间 开始时间

风清杨

Unregistered / Unconfirmed
GUEST, unregistred user!
本C/S软件架构利用面向对象编程的特性,把诸如权限控制,消息传送等技术放在基类窗体,然后所有窗体从基类继承,派生窗体加入各自独特的功能,如新增修改删除操作无须写一句代码,可以大大减少工作量,提高系统可维护性。运用此框架能实现快速开发任意数据库系统。<br><br>本框架特性:<br>*** 本框加采用一个项目(如采购管理,库存管理等)编译成一个DLL的方式,所有窗体都包含在里面,由主EXE调用,如某个项目有更新只需更新相应的DLL,方便发布更新,同时也减少了主程序的体积。<br><br>*** 所有窗体都由BaseForm继承,由此派生出几种常用的窗体基类,如对话框,编辑框,查询窗体等等,所有数据的新增,修改,删除操作无须写一句代码,大大提高开发速度。<br><br>*** 主程序功能有[登陆管理],[欢迎界面],[更改密码],[用户权限管理],[用户组权限管理],[登出系统],[数据锁定],[导出EXECL]<br><br>*** 用户窗体权限设置,可设置哪些用户能够打开哪些窗体。没有权限的窗查菜单都不会显示。每个窗体暂设有[新增],[修改],[删除],[审核],[导出EXECL],[打印]6种权限,可设置每个用户具体拥有哪种权限,具有灵活的权限管理功能。<br><br>*** 用户组权限设置,可将用户设置为一个组,统一更新组别所有用户权限,提高设置的速度。<br><br>*** 主程序跟DLL之间全部采用消息机制系,增强模块独立性。<br><br>*** 拥有部门权限设置功能,如某部门主管只能查看本部门员工数据,加强数据安全性。<br><br>*** 所有导出EXCEL功能,打印报表功能都做成独立模块,其它窗体只需调用即可。无须重复代码。<br><br>*** 用户登陆记录查询,如发生用户异常操作可即时查出。<br><br>*** 通用详细查找功能,可根据不同的表生成查询界面,然后根据用户选择的条件产生相应的SQL代码,可查询复杂的条件组合。<br><br>***臣拥有批次数据一次插入的基类,继承这个类可实现快速插入成批数据的功能,如输入整个部门100人的加班单,按一般操作须录入100次,而继承这个窗体只须操作一次就即产生100条记录。大大提高录入速度。<br><br>*** 所有功能名称都放在数据库,要主程序启动时动态生成菜单和TreeView列表。用户点击菜单即可打开窗体,还有菜单分组功能,自动生成子菜单。<br><br>*** 所有表都有[创建用户],[创建时间],[更新用户],[更新时间]四个字段,当发现输入错误数据时可以即时发现是哪个用户输入的。而这四个字段是由框架自动赋值的,无须再写语句。<br><br>*** 不同编辑状态时(如新增或修改)会自动设置相应按扭的Enabled属性,使软件更加专业化。<br><br>*** 拥有一个配套消息系统软件,本软件有企业内部即时通讯(类似QQ)功能,快速传送文件功能,群发信息功能,像发行政命令,开会通知都可以用这个软件发送。当有框架中有需审核的消息时(如请假单需审核),会自动弹出显示,关闭此条信息时会自动打开主程序及相应窗体,提高用户工效率。<br><br>*** 拥有自动更新功能,用户每次打开时系统时都会检查是否有程序是否有更新,有则自动下载,保证所有用户版本一致。<br><br>*** 高质量OOP的源码编写,每个过程都有文字说明,参研源码可以学习到很多软件开发方面新的思想及实现方式。有很高的参考价值。<br><br>*** 此框架已稳定使用了几年,曾用此开发出十几套数据库软件,在各个企业内成功部署。<br><br>*** 框架使用了三个第三方控件,购买时一并附送。<br><br><br>有意请电邮索取文档说明及框架剪图:dinghello@163.com
 
DLL封装业务逻辑就可以了,窗体就在EXE里就可以了。
 
我们是放在DLL里面的。更新时只更新一个DLL即可,其实原理实不多。
 
要多少钱呀?[8D]
 
来自:特尔斐, 时间:2008-4-9 17:33:37, ID:3886372<br>要多少钱呀?[8D] <br><br>兄台邮箱多少?聊聊
 
价格可以谈挖
 
要多少钱?邮箱:ctl@dgvtt.cn
 
文档及价格: meng169@sina.com
 
呵呵,正需要<br>clickmouse@126.com<br>不过价格不要太贵
 
我也做过类似的框架。希能够购买你的后,再充实我的。<br>把相关资料发到我信箱 daizhicun@126.com
 
多少钱?界面截图。发到我邮箱:gao_ad@163.com
 
请把价格、界面、文档发到我邮箱:guwei5@163.com。<br>谢谢
 
价格、界面、文档等,请发到我邮箱:ying_zsb@21cn.net<br>谢谢
 
二层还是三层的呀?
 
有购买意向<br>价格、界面、文档等,请发到我邮箱:hrpsoft@gmail.com<br>谢谢
 
有购买意向<br>价格、界面、文档等,请发到我邮箱:softyes@163.com<br>谢谢
 
有购买意向<br>价格、界面、文档等,请发到我邮箱:si.king@163.com<br>谢谢
 
有购买意向<br>价格、界面、文档等,请发到我邮箱:gao_ad1971@163.com<br>谢谢 &nbsp; &nbsp; 抱歉 上次邮箱地址写错了
 
以上邮件已发送。请查收。
 
我的目的是想用一个tmp adoquery去更新数据库,因为tmp adoquery是多个表的view,而多个表view,adoquery.post会更新多个tabel,所以用update set ...去更新Table<br>adod.sql.add(我想动态产生)<br>如何确定要个field被更改过,我用ados.fields.oldvalue &lt;&gt; ados.fields.value 比较,但这里出现错误.<br><br>function Tform1.updatetable(ados:Tadoquery;lcTable:string):Boolean;<br>var<br>&nbsp; i:integer;<br>&nbsp; msql:string;<br>&nbsp; lnparm:string;<br>&nbsp; lnkey:variant;<br>&nbsp; msql1,msql2,msql3:string;<br>&nbsp; adod:Tadoquery;<br>// &nbsp;lcold,lcnew:variant;<br>begin<br>&nbsp; lnparm:='';<br>&nbsp; msql:='';<br>&nbsp; adod:=Tadoquery.Create(nil);<br>&nbsp; adod.Connection:=form1.ADOConnection1;<br>&nbsp; adod.Close;<br>&nbsp; adod.SQL.Clear;<br>&nbsp; lnkey:=ados.Fields[0].AsInteger;<br>&nbsp; if (lnkey&gt;0) &nbsp;then<br>&nbsp; begin<br>&nbsp; msql1:='update '+lcTable +' set ';<br>&nbsp; msql2:='';<br>&nbsp; msql3:='';<br>&nbsp; &nbsp;for i:=1 to ados.FieldCount-1 do<br>&nbsp; &nbsp; if ((copy(ados.Fields.FieldName,0,2) &lt;&gt; 'tmp') and (ados.Fields.FieldName &lt;&gt; 'iren') &nbsp;and &nbsp;(ados.Fields.FieldName &lt;&gt; 'idate') and (ados.Fields.FieldName &lt;&gt; 'uren') &nbsp;and &nbsp;(ados.Fields.FieldName &lt;&gt; 'udate')) then<br>&nbsp; &nbsp; &nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ados.Fields.OldValue&lt;&gt;ados.Fields.Value then &nbsp;----&gt; ERROR "Invaild variant operation" please help me<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;msql2:=msql2+ados.Fields.FieldName+'=:'+ados.Fields.FieldName+',';<br>&nbsp; &nbsp; &nbsp; &nbsp;end;<br>&nbsp; &nbsp;// &nbsp;end;<br>&nbsp; msql2:=copy(trim(msql2),0,length(trim(msql2))-1);<br>&nbsp; if (length(msql2) &lt;&gt; 0) then<br>&nbsp; &nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp; &nbsp; msql1:=msql1+msql2+',uren=:uren,udate=:udate where id=:id';<br>&nbsp; &nbsp; &nbsp; &nbsp; adod.SQL.add(msql1);<br>&nbsp; &nbsp; &nbsp; &nbsp; for i:=1 to ados.FieldCount-1 do<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((copy(ados.Fields.FieldName,0,2) &lt;&gt; 'tmp') and (ados.Fields.FieldName &lt;&gt; 'iren') &nbsp;and &nbsp;(ados.Fields.FieldName &lt;&gt; 'idate') and (ados.Fields.FieldName &lt;&gt; 'uren') &nbsp;and &nbsp;(ados.Fields.FieldName &lt;&gt; 'udate')) then<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if [red]ados.Recordset.Fields.OriginalValue&lt;&gt;ados.Recordset.Fields.Value[/red] then ---<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lnparm:=ados.Fields.FieldName ;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; adod.Parameters.ParamByName(lnparm).Value:=ados.Fields.Value;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end; &nbsp; &nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;<br>&nbsp; &nbsp; &nbsp; &nbsp; adod.Parameters.ParamByName('uren').Value :='admin';<br>&nbsp; &nbsp; &nbsp; &nbsp; adod.Parameters.ParamByName('udate').Value:=now();<br>&nbsp; &nbsp; &nbsp; &nbsp; adod.Parameters.ParamByName('id').value:=ados.Fields[0].Value;<br>&nbsp; &nbsp; &nbsp; &nbsp; adod.Prepared:=true;<br>&nbsp; &nbsp; &nbsp; &nbsp; try<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; adod.ExecSQL;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result:=true;<br>&nbsp; &nbsp; &nbsp; &nbsp; except<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result:=false;<br>&nbsp; &nbsp; &nbsp; &nbsp; end;<br>&nbsp; &nbsp; &nbsp; &nbsp; adod.Free;<br>&nbsp; &nbsp; end;<br>&nbsp; end
 
后退
顶部