CSDN论坛 > Delphi > 数据库相关

用三层更新多个数据库时,用updatesql组件怎么更新数据库 [问题点数:0分]

Bbs2
本版专家分:113
结帖率 100%
CSDN今日推荐
Bbs9
本版专家分:70753
Blank
进士 2002年 总版技术专家分年内排行榜第九
2001年 总版技术专家分年内排行榜第四
Blank
金牌 2001年9月 总版技术专家分月排行榜第一
Blank
银牌 2002年3月 总版技术专家分月排行榜第二
Blank
铜牌 2002年2月 总版技术专家分月排行榜第三
2001年8月 总版技术专家分月排行榜第三
Bbs2
本版专家分:113
Bbs9
本版专家分:70753
Blank
进士 2002年 总版技术专家分年内排行榜第九
2001年 总版技术专家分年内排行榜第四
Blank
金牌 2001年9月 总版技术专家分月排行榜第一
Blank
银牌 2002年3月 总版技术专家分月排行榜第二
Blank
铜牌 2002年2月 总版技术专家分月排行榜第三
2001年8月 总版技术专家分月排行榜第三
匿名用户不能发表回复!
其他相关推荐
使用 DataAdapter 和 DataSet 更新数据库
DataAdapter   的 Update 方法可调用来将 DataSet 中的更改解析回数据源。与 Fill 方法类似,Update 方法将 DataSet 的实例和可选的 DataTable 对象或 DataTable 名称用作参数。DataSet 实例是包含已作出的更改的 DataSet,而 DataTable 标识从其中检索更改的表。当调用 Update 方法时,DataAdapte
Yii 1.0数据库操作 查询、增加、更新、删除(事务处理)
http://blog.sina.com.cn/s/blog_66ac09390102vkpd.html 1、根据条件查询一个集合 $objectResult=Post::model()->findAll($condition,$params); $objectResult=Post::model()->findAll("username=:name",array(":name"
Delphi最新三层源码
随便说说最近项目中的三层架构吧。讲点实际的东西。我最讨厌空讲道理。网上讲道理的太多了,不喜欢举例子。 大多数文章中都或多或少的讲到了三层架构。表示层,业务层,数据层。又把业务层再细分,分为外观服务层,主业务服务,及数据库库服务层。 今天主要讨论一下业务层吧。举个最简单的例子。客户端获取数据。 业务层要与表示层尽量解藕, 我的方法是:首先我们在中间层TLB_中定义一个接口 IBusinessService, 定义一个方法。getvoList,我要得到一个VO的列表, VO即ValueObject, 例如:TValueObject= class(TPersistent) private b_insertFlag :Boolean; b_updateFlag :Boolean; b_deleteFlag :Boolean; d_rowVersion :double; procedure setInsertFlag(pInsertFlag :Boolean); function getInsertFlag: Boolean; procedure setUpdateFlag(pUpdateFlag :Boolean); function getUpdateFlag: Boolean; procedure setDeleteFlag(pDeleteFlag :Boolean); function getDeleteFlag: Boolean; procedure setRowVersion(pRowVersion :double); function getRowVersion:double; protected function GetOLEData: OleVariant; virtual; procedure SetOLEData(const Value: OleVariant); virtual; published property bInsertFlag: Boolean read getInsertFlag write setInsertFlag; property bUpdateFlag: Boolean read getUpdateFlag write setUpdateFlag; property bDeleteFlag: Boolean read getDeleteFlag write setDeleteFlag; property dRowVersion: double read getRowVersion write setRowVersion; property POLEData:OleVariant read GetOLEData write SetOLEData; end;TUserVO = class(TValueObject) private id: string; name: string; password: string; 。。。。。。。。。。 VO的列表:TValueObjectList = Class(TObjectList) private ValueObject: TValueObject; ClassName: TClass; procedure setClassName(pTmpClsName :TClass); function getClassName: TClass; procedure setValueObject(pTmpVO :TValueObject); function getValueObject: TValueObject; protected function GetOLEData: OleVariant; virtual; procedure SetOLEData(const Value: OleVariant); virtual; published function AddItem(index: integer; AObject: TObject ):Integer; virtual; function GetItem(index, itemid: integer ): TObject; virtual; function CountItem:Integer; virtual; public constructor Create; virtual; destructor Destroy; override; procedure AfterConstruction; override; property PClassName: TClass read getClassName write setClassName; property POLEData: OleVariant read GetOLEData write SetOLEData; property PValueObject: TValueObject read getValueObject write setValueObject; end;TValueObjectList就是VO的装载器。在 JAVA中有一个好听的叫法,VOList值列表组装器,具体的功能是可以管理VO, 当然你可以进行扩充,比如后来我加入了OLE<->TOBJECT<->TDataset互换的功能。主键生成机制,分页存取功能,生成子集功能,及懒装载功能,压缩传输流功能等,同步数据更新问题等。这要你自己去发挥吧。 说了这么多,话题转回来吧。现在说客户端怎么去存取数据。在前面中间层已经定义了IBusinessService, 定义一个方法。getvoList,这个就是通用存取数据的接口了。 下面看看他的完整形式: procedure getvoList(const sBOName: WideString; const sBOService: WideString; out voListObj: OleVariant); 这里有三个参数,sBOName:sBOService:voListObj: 干什么用的?第一个就是业务对象名称, 第二个是业务对象服务名称,第三个是传回来的olevariant; 强调一点。sBOName:sBOService:这两个参数并不直接对应中间层的业务对象。之间加了一个转换层。也就是service定位层。这个东西把客户传来的两个参数定位到相应的业务对象中。有什么好处呢。其实就相当于客户端和中间层的一个简单的协议,客户端发一个boname,一个服务名,这都是约定的。也就是不变的。以后该业务要变,就十分方便,只需要在中间层的定位器,配置一下就可以了,如果采用XML或文件配置,不需要修改任何程序,客户的业务已经发生改变。当然会采用名字调用等技术了。相关代码如下: TBOService= class(TServiceObject) private //srvOBName : String; IBasBO: IBaseBO; BOPool: TBOPrototype; //业务对象持久池: public constructor Create; procedure getvoList(const sBOName: WideString; const sBOService: WideString; out voListObj: OleVariant); safecall; 。。。。。。。。。。 再说说TBOPrototype吧 ,这个东西是管理业务对象池的。由他统一创建业务对象。采用的是单例模式。 之后具体的调用,相关代码如下: if FindClass(fClsPer.ClassName) <> nil then begin tmpPer := TPersistentClass(FindClass(fClsPer.ClassName)).Create; Supports(tmpPer, StringToGUID(&#39;{3AE5EA91-41EA-41E7-B40C-CF00F8B75F8A}&#39;), IBasBO); try IBasBO.InitBusinessObj; voListObj := IBasBO.GetDAOValueObject.getDAOValueList; finally IBasBO := nil; end; end else ShowMessage(&#39;no found!&#39;);其中IBasBO,是一个接口定义,IBaseBO = interface(IUnknown) [&#39;{3AE5EA91-41EA-41E7-B40C-CF00F8B75F8A}&#39;] function GetObject: TObject; procedure SetObject( value: TObject ); function GetDAOValueObject: TDAOValueObject; procedure SetDAOValueObject(tmpDAOVO: TDAOValueObject); procedure InitBusinessObj; end;呵呵,现在可以看到冰山一角了吧。 经过业务对象初始化之后,他就去创建DAO了。。。呵呵。 如果你不了解DAO,看看相关的资料吧。。。。。 主要功能就是把数据存储隐藏起来,调用SQL, ORACLE,之类。我主要是用它调用数据库工厂创建。 大致看一下代码吧。 //----------//1.工厂基类(SQLServer工厂类)//----------unit ConnDBFactory_SQLServer;interfaceuses Classes, ADODB, ConnDB, DB, DBTables, Controls, Dialogs, IConnDB, ConnDBFactory;type TConnBDEDBFactory_SQLServer = class(TConnDBFactory) public function CreatorConnDB() :IConnDataBase; override; end; TConnADODBFactory_SQLServer = class(TConnDBFactory) public function CreatorConnDB() :IConnDataBase; override; end;又扯远了,还是再回来吧。中间层的定位器通用业务对象管理器创建或获得一个业务对象之后,定位到相应的服务上去。比如数据存取。这里有一点说明:就是业务对象的数据存取和业务服务是分开的。 数据存取就采用DAO的方法。 直接一点说就是创建DAO对象。 这是 TDAOValueObject= class(TPersistent, IDAOValueObject) private............ 上面的是基类。完成基础服务的。看看接口吧。 IDAOValueObject = interface(IUnknown) [&#39;{DF03C9E7-2A5B-4E32-8EF5-C4E8FC77E8BB}&#39;] function createDAOValue: TValueObject; function insertDAOValue(pValueObject: TValueObject): Integer; function updateDAOValue(pValueObject: TValueObject) :Integer; function deleteDAOValue(pValueObject: TValueObject) :Integer; function findByPrimaryKey(const pServiceName: WideString; vKey: OleVariant): TValueObject; function getDAOValueList: OleVariant; overload; function getDAOValueList(sSQL: String): OleVariant; overload;。。。。。。。。。。看看干了什么。。。。 inherited Create; sqlAnySrvObj := TSQLAnalyzeService.Create; if not assigned(VOList) then VOList := TValueObjectList; VOList.pVOClassName := ‘TUSERVO’创建了一个SQL分析器。 一个VOLIST对象, 并且传了一个VO名字。。 TSQLAnalyzeService,SQL分析器可以动态的生成SQL脚本。。 再看看 function getDAOValueList: OleVariant; overload; function getDAOValueList(sSQL: String): OleVariant; 这两个函式吧。 把生成的VO, olevariant化。 这些基础的工作, 已经由VOLIST做了。 重要的一点: prepareTable,这是VOLIST中的函式,由他动态的生成TDATASET, 当然没必要在中间层生成。但可以打包传给客户端,就OK了。 现在在看一下客户端的代码吧: MyInterface2.getvoList(&#39;TUserBO&#39;, &#39;&#39; , oo); pp := TValueObjectList.Create; pp.OLEToDS(oo); dataSource1.DataSet := pp.pDataSet; 呵呵,PP是公共的TVOLIST,发布到客户端。 通由Ole,自动生成了TDATASET。 想用对象,没问题,看下面: 定义: ss: TVALUEOBJECT; ss := TUserVO(pp.GetItem(1)); if ss<>nil then ShowMessage((ss as TUserVO).pName); 之后,你想怎么样就怎么样了。。。。。 呵呵,下次再讲讲业务逻辑方面吧,希望给做DELPHI三层的兄弟一个参考。我的QQ: 11718111 Email: wu_yanan2003@yahoo.com.cn
VB 利用UPDATE语句批量更新数据表中的数据
VB 利用UPDATE语句批量更新数据表中的数据 VB 利用UPDATE语句批量更新数据表中的数据
C#实现用DataSet来更新数据库
  好像从Excel中读取出来的DataSet不能用这种方法更新,还没找到原因,希望能尽快解决。/**////         /// 用DataSet更新数据库        ///         /// 用于更新数据库的数据源DataSet        /// 用于更新数据库的数据源表DataTable        /// 初始化SqlDataAdapter.SelectComm
用SqlCommandBuilder 更新数据库
原文地址:http://blog.sina.com.cn/s/blog_5252e0900100aobl.html     一般是这样的,如果用设计器将SqlDataAdapter拖到页面中使用时,不会出现SqlDataAdapter.Update(ds)更新时出错情况,因为系统会自动生成SqlDataAdapter的属性命令,比如: .UpdateCommane insertCommand
用CommandBuilder更新数据库
用OdbcCommandBuilder更新数据库,这种更新数据库的方式的好处是系统会自动产生更新辑逻辑,不用自己写更新逻辑,坏处是没有自己写的更新逻辑运行效率高.
ADO.net——使用数据集更新数据库(例子及代码解析)
前面的博客也讲到了使用数据集(此处为DataSet)更新数据库。   已经了解到DataSet与数据源是断开的,所以不能直接使用DataSet将更改后的数据更新 到数据源。这里用到了数据适配器(DataAdapter)   如何做?   答:1,从 数据源——>数据集:调用DataAdapter的Fill()方法;   2,从 数据集——>数据源:调用DataAdapter的Up
如何用一个数据库的数据去更新另一个数据库的内容
数据库之间数据交换,是比较费时,也是比较麻烦的,人们在做类似操作的时候,不希望一条一条的去写SQL语句。那么我最近作了一个DEMO,通过使用DataAdapter+Dataset可以方便的完成数据库之间的更新操作。 我的例子是把Access数据库中的数据去更新SQL Server数据库,其中用到数据表的结构一样(这儿只是为了简化操作,并不是必要条件,其实只要两个数据库中数据表的字段要进
Code First更新数据库结构
CodeFirst 模式下,当你的实体类发生变化时,支持自动更新的变化有以下几种:     a、增加属性或者类     b、对属性和类重命名(想要使其正常工作,需要编写一些脚本)//尽量少用     c、对列(column)或者表(table)重命名,而不对属性或类重命名     d、删除属性 以下是具体操作: 1、确保项目已引用EntityFramework(都已经在更新数据
关闭