您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > UniDAC使用日记
UniDAC使用日记1.UniQuery默认状态为行提交,使用前根据需要设置readonly或cachedupdates属性2.UniQuery.Filter默认大小写区分,请注意设置FilterOptions属性([foCaseInsensitive]),TVirtualtable也存在相同情况3.UniQuery默认情况下,有些varchar类型的字段有自动加了一个空格,请注意设置Options.TrimVarChar=true4.UniQuery在进行Insert时,若字段不能为null且前台操作未填写时,可能会报错,请设置RequiredFields=true5.UniQuery在修改数据集时,默认的方式是按关键字生成SQL语句进行数据提交。还有另外两种方式:一是设置updateSQL,一是设置KeyFields(具体请sql跟踪查看)6.UniQuery的数据排序属性是IndexFieldNames7.数据提交的顺序,一定要注意:withMyQuerydobeginSession.StartTransaction;try...{Modifydata}ApplyUpdates;{trytowritetheupdatestothedatabase}Session.Commit;{onsuccess,committhechanges}exceptRestoreUpdates;{restoreupdateresultforappliedrecords}Session.Rollback;{onfailure,undothechanges}raise;{raisetheexceptiontopreventacalltoCommitUpdates!}end;CommitUpdates;{onsuccess,clearthecache}end;对于单数据集的提交:MyQuery.ApplyUpdates;MyQuery.CommitUpdates;8.DataM中提供了一个功能Clone(Source,Dest):一、Dest是TVirtualTable,则完整的将源数据集复制;二、Dest是UniQuery,则是将Source的SQL复制到Dest,并Open9.UniQuery.SetReadOnly属性说明1)我们经常会用到多表关联,且需要在前台修改数据。举个例子:a表和b表,在前台两个表字段都需要修改,则需要将SetReadOnly设置成false2)特别注意:若将一个UniQuery.SetReadOnly设置成true,而这个表有一个自增长ID,那么你在提交数据时会出错,跟踪SQL会发现,ID被前台前行传了一个null值10.UniQuery.RefreshRecord,可以刷新当前选择的数据11.我们经常会在UniQuery的SQL定义一些参数,在传参时,需要特别注意,例如:QExec.Close;QExec.SQL.Text:=‘select*fromYHBwheresYHBH=:P_YHBH’;在传参时有两种写法1)最稳妥的写法QExec.ParamByName(‘P_YHBH’).DataType:=ftString;QExec.ParamByName(‘P_YHBH’).ParamType:=ptInPut;QExec.ParamByName(‘P_YHBH’).AsString:=‘张三’;(此处可将AsString换成Value)2)下面这个写法我做了简单测试,也是可以的,但对复杂的SQL传参是否正确,未知QExec.ParamByName(‘P_YHBH’).AsString:=‘张三’;(在不对参数的数据类型和传入传出类型进行指定的情况下,绝对不能使用Value)UniDAC的过程中一定要注意,在DataM中提供了一个函数PrepareParam,请注意看一下。在ADO12.Sybase的一个特性updateaseta.fSJ=b.fSJfromtable1ajointable2bona.sYPBSM=b.sYPBSM上述SQL语句在Sybase下执行不能通过,请改写成如下SQL(在MS和ASE中都能执行通过)updatetable1setfSJ=b.fSJfromtable1ajointable2bona.sYPBSM=b.sYPBSMUniDAC官方网址:一、连接数据库ConnectingtoDatabase1、通用连接属性Provider第一个就应该设置的属性,指定要连接的数据库类型,根据指定的数据库连接类型不同其它的设置也会发生相应的变化;UsernameandPassword登录数据的有效用户名和密码;Server通常将此设成要连接数据库所在的计算机名或IP地址,如果将此属性设置为空,对于MySQL,InterBase连接数据库方式,UniDAC将试图连接本地(Localhost)。Oracle:客户端模式下,指定的Server名称一定要出现在tnsnames.ora中,且有效,设置效果如下:withUniConnection1dobeginProviderName:='Oracle';Server:='ORCL';Username:='username';Password:='password';end;直连模式(Directmode)下:在此模式下,运行软件的计算机可以不安装Oracle客户端而连接Oracle数据库,但要做以下设置:1)设置直连模式2)设置Server指定Server格式:Host:Port:SID.注:客户端模式和直连模式的设置不能混淆,否则无法执行。两种格式严格区分。效果如下:withUniConnection1dobeginProviderName:='Oracle';Server:='192.168.1.113:1521:ORCL';Username:='Username';Password:='Password3';end;SQLServer:指定要连接的数据库所在的网络IP,且有效,如果采用的不是默认端口(1433),Server应该这样设置:HostName,PortNumber.Database这个属性只对SQLServer,MySQL,PostgreSQL,InterBase,andSQLite连接方式有效,Port指定TCP/IP协议访问的有效端口MySQL–默认端口3306PostgreSQL-默认端口5432二、UniDAC(版本:2.7)连接数据库必要文件或局限需求1、Oracle连接Oracle在采用直连模式将受到以下限制:特别要注意的是(包括:应用TUniLoader):1)、应用直连模式,本地执行程序的客户机必须要安装TCP/IP协议2)、注意防火墙3)、数据库的triggers、checkconstraints、clusteredtables、loadingofremoteobjects、user-definedtypes将得不到支持4)、available,likeOBJECT,ARRAY,REF,XML,BINARY_DOUBLE,BINARY_FLOAT这些类型将变为不可用5)、TUniLoader的应用版本应高于Oracleclient8.17以下是英文原文:triggersarenotsupportedcheckconstraintsarenotsupportedreferentialintegrityconstraintsarenotsupportedclusteredtablesarenotsupportedloadingofremoteobjectsisnotsupporteduser-definedtypesarenotsupportedLOBsmustbespecifiedafterallscalarcolumnsLONGsmustbespecifiedlastYoucannotuseTUniLoaderinathreadedOCIenvironmentwithOracleclient8.17orlower.ConnectusingtheTCP/IPnetworkprotocolonly.Sometypesarenotavailable,likeOBJECT,ARRAY,REF,XML,BINARY_DOUBLE,BINARY_FLOAT.Certainproblemsmayoccurwhenusingfirewalls.NLSconversionontheclientsideisnotsupported.TransparentApplicationFailoverisnotsupported.Statementcachingisnotavailable.OSauthenticationandchangingexpiredpasswordsfeaturesarenotavailable.TheDESauthenticationisused.OracleAdvancedSecurityisnotsupported.Wedonotguaranteestabilityofmultithreadedapplications.ItishighlyrecommendedtousetheseparateTUniConnectioncomponentforeachthreadwhenusingUniDACfromdifferentthreads.2、SQLServer连接1)提供连接支持服务端:SQLServer2005(includingCompactandExpresseditions),SQLServer2000,SQLServer7,andMSDE.客户端:SQLOLEDBandSQLNativeClient.2)环境需求MDAC(MicrosoftDataAccessComponents)版本不低于2.53、MySQL连接MySQL提供的连接也包括直连和客户端连接方式,默认采用的是直连方式,如果要更改连接方式,在应用程序分发时要带上libmysqld.dll二、Delphi与各数据库数据类型比较Delphi数据类型与各数据库数据类型对比如下表,如有具体说明见表中脚注:DelphiTypeOracleTypesSQLServerTypesMySQLTypes[1]InterBaseTypesPostgreSQLTypesSQLiteTypesftSmallintNUMBER(p,0)[2](p5)SMALLINTTINYINT(M)(M1)SMALLINTSMALLINTSMALLINTTINYINTSMALLINTftWord-TINYINTTINYINT(M)---UNSIGNED(M1)SMALLINTUNSIGNEDYEARftIntegerNUMBER(p,0)[2](4p10)INTMEDIUMINTMEDIUMINTUNSIGNEDINTINTEGERINTEGERINTEGERINTftLargeintNUMBER(p,0)[2](9p19)BIGINTBITINTUNSIGNEDBIGINTBIGINTUNSIGNEDBIGINTBIGINTBIGINTftFloatNUMBER(p,s)[2]BINARYFLOAT(FLOAT)BINARYDOUBLEDECIMAL(p,s)[3]FLOATREALDECIMAL(p,s)[3]FLOATDOUBLENUMBER(p,s)[3]FLOATDOUBLEPRECISIONDECIMAL[3]REALDOUBLEPRECISIONDECIMAL(p,s)[3]FLOATDOUBLEPRECISIONftBCDNUMBER(p,s)[2](p15)and(s5)DECIMAL(p,s)[3](p15)and(s5)DECIMAL(p,
本文标题:UniDAC使用日记
链接地址:https://www.777doc.com/doc-3714015 .html