Delphi XE 10 跨平台三层数据库应用教程

 Delphi XE 开始越来越庞大,比经典的Delphi7难用,但依然是目前所有跨平台开发工具中开发效率最高、最容易上手的,其快速设计RAD理念是无与伦比的符合人性。

 目前网上XE10类似教程很少,而且学习途中遇到一些问题就难以继续了,经本菜鸟千辛万苦的求索,特推出Delphi XE 10系列教程。

 三层数据库应用是目前最简单、方便、易扩展的架构,而跨平台应用又是所谓的“互联网+”最需要的,下面的教程分服务器端和客户端两大部分完成该设计。

一、Delphi XE10 datasnap服务器设计

(1)生成DataSnap服务器的框架

初学者都是呆子,还是用向导吧,主菜单“File”->“New”->“Other…”得到“New Items”向导对话框。见图一。

图一、向导

一般选择有窗口的Forms程序,如果是正式场合,建议Service程序。见 图二。

图二、选择应用类型 

如果服务器程序运行在Windows平台就选“VCLapplication”,如果要跨平台,还是选“FireMonkeyapplication”,但生成的文件要大一些。见图三。

 

图三、选择应用基本库源 

​默认TCP/IP为通讯协议,简单快速,菜鸟专用的Sample Methods用于测试,见图四。

图四、选择通讯等参数

​缺省211端口,别忘了“Test Port”一下更健康,见图五。

图五、测试端口 

不要使用默认的“TComponent”,而用TDSServerModule作为数据服务提供主体,非常方便以后变更为能挣钱的Service应用服务。

图六、选择服务模式

​Finish这个向导后,硬盘一阵轰鸣,自动生成了工程及其三个主文件,图七:

ServerContainerUnit1.pas   放的是网络服务相关控件,非高手莫入

ServerMehtodsUnit1.pas    就是我们第二步主要的活动场所。

Unit1.pas    服务器主界面,放个TLabel表示“我是服务器”即可,不必关注。

 

图七、完成框架

(2) 数据库设置

  进入ServerMehtodsUnit1.pas 对应的窗口

 可用老旧简单的 BDE或ADO,也可用最新高大上的FireDAC,都XE10了,还是高点吧。

拖入(好吧,当一次C程序员嘲笑的Delphi拖拉员)三个控件即可:

TFDConnection,  TFDQuery  和  TDataSetProvider

由下图八可知FireDAC连接逻辑简单,而且大跨数据库平台!

图八、数据库连接构架

库驱动连接器: TFDConnection

把自带的SqlLite例子库复制到当前目录下备用:

C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Data\fddemos.sdb

 右键菜单“Connection Editor…”设置并测试,  设置Connected属性为True,图九和十。

图九、连接器设置入口

 

 

图十、连接器设置并检测

数据集:TFDQuery,设置其Connection属性为刚才测试好的FDConnection1,

  设置SQL属性为任意sql语句如:select * from orders, 再令其Active属性为True

最后拖入TDataSetProvider 将数据集对外服务,用其DataSet属性连接到刚才的FDQurey1​

 如果不用Connecton Editor.., 可以设置FDConnection1.Params的内容为:

Database=E:\prj\t\server\fddemo.sdb

//若改为 Database=.\fddemo.sdb 则表示db文件和exe文件在同一个目录下

DriverID=SQLite

 注意:需要确保sdb文件存在,否则firedac会直接生成一个空的sdb同名文件,不报错,直到运行后客户端程序访问才报xxTable does not exist .

 

最后拖入TDataSetProvider 将数据集对外服务,用其DataSet属性连接到刚才的FDQurey1。

(3) 增加服务内容

向导生成的ServerMethord1单元只提供了两个简单的服务函数

   function EchoString(Value: string): string;

   functionReverseString(Value: string): string;

现在增加一个有用点的:

复制代码

function TServerMethods1.ChangeSql(Value:string): Integer;
begin

 FDQuery1.Active := False;
 FDQuery1.SQL.Text := Value;
 FDQuery1.Active := True;
 Result := FDQuery1.RecordCount;

end;

复制代码

 最后可在主窗口Form1中加入个Tlabel,设置Text 为“服务中…”表示自己是个服务器,要不然后面客户端连接不上时,找不到服务器界面。

(4) 发布运行

测试通过后即可在prj树中右键Release菜单中选build制作release版本,见图十一,否则默认都是debug版本。注意win7防火墙弹出阻止时,许可它过外网。

图十一、制作发行版

​经测试xe10下编译的服务器程序,只需要发布exe和sdb文件即可,无需其他驱动或dll等,并且在win7和winxp下均能正常服务。

 

二、DataSnap的跨平台客户端设计

(1) 生成客户端框架

File->New->Muti-Device Application, 图十二。

图十二、新建跨平台程序

选择第一个空白的吧“BlankAppliction”, 白纸好涂鸦啊!

 为了逻辑和界面分离,New一个 DataModule

 

(2) 设置连接

在DataModule中放入TSQLConnectionTDSPProviderConnectionTClientDataSetTDataSource四个控件,  

 按照逻辑用DSProviderConnection1就可用连接到服务器了,可Delphi偏偏要用TSQLConnection。选择置其属性ConnectionName中自然列出的“DataSnapCONNECTION”,紧临的属性Driver值自动变为DataSnap。

TDSPProviderConnection.ServerClassName 为服务器端对应类名 TServerMethods1,

接下来只需要 把TDSPProviderConnection.SqlConnection 连接到TSQLConnection,TClientDataSet.RemoteServer连接到TDSPProviderConnection,即可把他们三个串通一气。当然TDataSource.DataSet也要连接到TClientDataSet。见图十三。

图十三、设置数据连接路线

注意:

现在该是激活他们的时候了:TSQLConnection.Active 设置为True(这时可能会有数据库口令验证),TDSPProviderConnection.Connected自动变为True了,然后在TClientDataSet.ProviderName才能看见传递过来的名称“DataSetProvider1”,选择之。最后设置TClientDataSet..Active 为True,没有错误提示才算真正连接好了。

  

(3) 制作界面

制作界面在主窗口unit1里进行。作为数据库客户端的基本配置,TBindSourceDB和TGrid组合来代LiveBinding替老Delphi7时代的“数据敏感”,以适应不支持“数据敏感”的OS系统如Android。当然加入一个TBindNavigator能让你浏览数据时更舒服一点,不加也无大碍。见图十四。

图十四、加入显示数据控件

TBindSourceDB.DataSet  和  DataSource 必须要  uses了datamodule: unit2.pas 后才会自动出现DataModule2.ClientDataSet1 和  DataModule2.DataSource1,选择设置之。

 

 

 ---

 

​接下来就是要所谓“LiveBinding”了,TBindSourceDB的右键菜单上有个“BindVirsully..”从老Delphi7来的人好怕怕哦,没见过这架势如图十五:

图十五、绑定数据连接

图十五中蓝色箭头就是我们需要画出来的。

关闭后回去发现多出一个BindingList1的控件来,而且数据已经输送过来啦!

图十六。

图十六、连通数据库

​太高兴了,赶紧保存并编译运行,结果大失所望,没有数据。原来还有很多工作没有做,如控制连接、生成服务器对应方法等。

遇到问题与解决: 

  1.   提示 Cannot change this property when using LiveBindings

   

 

解决方式:

      

 

 


 

 

在unit2的窗口中生成服务器对应方法GenerateDataSnap client classes菜单选择后,图十七,自动生成unit3,其中主要是TServerMethods1Client类及其方法,都是服务器上的服务器方法映射到客户端来的,方便client调用服务,具体代码不必去看(什么,不求甚解,是脑力不济)。

图十七、自动生成服务方法映射

控制连接:在界面窗口中加入IP和端口(默认为211,是不是想自诩为中国的名牌大学出品)

图十八、加入控制连接控件

​“连接”按钮button1代码如下:

procedure TForm1.Button1Click(Sender:TObject);

var

  dm: TServerMethods1Client; //就是上一步自动生成的unit3里的那个映射类

begin                      // 别忘了uses Unit3, Unit2;

  try

   //连接指定IP和Port的应用服务器

   DataModule2.SQLConnection1.Close; // DataModule2就是放连接器那个数据模块

   DataModule2.SQLConnection1.Params.Values['HostName'] := edtIP.Text;

   DataModule2.SQLConnection1.Params.Values['Port'] := edtPort.Text;

   try

     DataModule2.SQLConnection1.Open;

     try

      //创建应用服务器上的方法在客户端的实现类: 即映射方法类

       dm :=TServerMethods1Client.Create(DataModule2.SQLConnection1.DBXConnection);

     //执行服务器上的方法

       ShowMessage(dm.ReverseString(edtIP.Text)); //系统带的例子方法

        dm.ChangeSql(edtSql.Text); // 我们在服务器程序中手工添加的执行sql方法

     finally

       dm.Free;

     end;

           DataModule2.ClientDataSet1.Close;

     DataModule2.ClientDataSet1.Open; //开启客户端数据集

   except

     on E: Exception do

       ShowMessage(E.Message);

   end;

 finally

   DataModule2.SQLConnection1.Close;

 end;

end;

 注意:如果启动就连接执行,在win32下正常,在Android上会黑屏。

Win32版在xp上不能正常使用数据库功能,普通服务方法能用。

(4) 手机调试和发布

用usb连接上手机,并安装好手机驱动(如果是华为手机,则安装华为手机助手),并设置手机为“USB 调试”状态,见图十九。

图十九、设置USB连接手机为调试状态

 这时候,在Delphi的工具栏右上方自动出现手机型号,见图二十,此时可以直接点击运行,约等待1分中,就自动在手机上安装好了。

图二十、确保Delphi识别连接好的手机型号

​正式发布手机apk时注意:

     默认的Release配置会有位置、通话记录、摄像头等许多令人不悦的隐私选项,统统的设置为false,见图二十一,只留一个“Internet”为true(不知到为什么,那就别搞软件开发了)。

图二十一、手机隐私权限设置

    最后build “Release”版,见图二十二,在目录xxx\client\Android\Release\Project1\bin下面一个Project1.apk赫然在目,美中不足是大了点约9.5MB。安装在各种手机上测试吧!见图二十三。

图二十二、制作手机发行版apk文件

 

图二十三、手机上用SQL语句自由访问服务器

​在有的手机上安全软件会提示有广告插件:a.banner.doubleClick,网上查了下,是google自带的什么东东,脑力不济,管不了这么多了。

 

三、总结

本教程完成了Delphi XE 10 下,跨平台三层数据库程序例子,其中服务器程序连接数据库,客户端程序可以是PC、Android手机,发布仅需要一个exe或apk文件,无需安装其他驱动、库,无需设置注册等恼人的活动。

已标记关键词 清除标记
Delphi 7.1 Update Release Notes=======================================================This file contains important supplemental and late-breakinginformation that may not appear in the main productdocumentation, and supersedes information contained in otherdocuments, including previously installed release notes.Borland recommends that you read this file in its entirety.NOTE: If you are updating a localized version of Delphi 7, visit the Borland Registered User web site to obtain a localized readme file that may contain important late- breaking information not included in this readme file.IMPORTANT: Delphi must be closed before installing this update. =====================================================CONTENTS * INSTALLING THIS UPDATE * UPDATING LOCALIZED VERSIONS OF DELPHI 7 * KNOWN ISSUES * ISSUES ADDRESSED BY THIS UPDATE - IDE - CORE DATABASE - DATASNAP - DBGO (ADO COMPONENTS) - dbExpress - dbExpress COMPONENTS AND DB VCL - dbExpress CORE DRIVER AND METADATA - dbExpress VENDOR ISSUES - dbExpress CERTIFICATION - WEB SNAP - ACTIVEX - COMPILER - RTL - VCL - THIRD PARTY - BOLD FOR DELPHI * VERIFYING THAT THE UPDATE WAS SUCCESSFUL * FILES INSTALLED BY THIS UPDATE =======================================================INSTALLING THIS UPDATE* This update can not be applied to Delphi 7 Architect Trial version. * This update can not be removed after it is installed.* You will need the original Delphi 7 installation CD available to install this update.* To install this update from the CD, insert the CD, and launch the d7_ent_upd1.exe file appropriate for your locale.* To install this update from the Web, double-click the self-executing installation file and follow the prompts. * The Delphi 7 documentation PDF files are available on the update CD.========================================================UPDATING LOCALIZED VERSIONS OF DELPHI 7* This update can be applied only to the English version of Delphi 7. There are separate updates for the German, French and Japanese versions of Delphi 7. * This update provides new localized versions of the SqlConst files. After installing the update, backup and delete the following files from the Delphi 7 installation folder: LibDebugSqlConst.dcu LibSqlConst.dcu SourceVclSqlConst.pas and then remove the appropriate locale extension (.de, .fr, or .jp) from the new SqlConst files in the same folders. For example, for the French version of Delphi, rename SqlConst.dcu.fr to SqlConst.dcu. ========================================================KNOWN ISSUES* dbExpress driver - After installing this update, the dbxdrivers.ini file will not contain an entry for MSSQL=1. If you require that entry, please edit the ini file manually after installing the update. By default, dbxdrivers.ini is located at C:Program FilesCommon FilesBorland SharedDBExpress. * If you have updated any Borland packages in the system32 directory with unofficial patches or updates from CodeCentral, MSI might revert (auto-repair) those packages to their previous version during installation of this update. Therefore, after installing this update, you may need to re-install unofficial patches or updates. * Due to a Windows Help engine limitation on Windows 98 and Millennium, the Help system Index tab will be empty if the index exceeds 32,767 keywords. If you encounter an empty Help Index tab after installing this update, open the d7.ohi file in the Delphi7Help folder and comment out one or more of the index entries by changing the colon in column one to a semi-colon, as shown here: ;Index Open Tools API (IOTA)=d7iota.hlp Save the d7.ohi file and delete any hidden *.GID files in your Delphi7/Help folder before restarting the Help. This modification reduces the number of index keywords, but does not affect other Help system functionality, such as cross-file linking or F1 accessibility. ========================================================ISSUES ADDRESSED BY THIS UPDATEThis readme lists the maintenance for all editions of Delphi 7;not all of the features mentioned in this file are available inall editions of the product.This update resolves the following issues:IDE* Using the up/down arrow keys to navigate and select items from the Code Completion window sometimes skips items (Quality Central 2875). * In the Project Manager, units are incorrectly displayed in the order that they are listed in the USES clause, rather than alphabetically. * Using collections containing component references and form inheritance can result in incorrect references being stored in the dfm file.======================================================= CORE DATABASE* TFMTBCDField initializes to size 8 instead of size 4, allowing the system to initialize precision to 7 and size to 8 (Quality Central 5938). * Using a TDBLookupComboBox to display a list of data given by a detail TQuery results in the error "Field ‘‘ not found" (Quality Central 5384 and 4823). * TDBRadioGroup maintains its focus on the most recently selected item, even after an edit has been canceled (Quality Central 2109). =======================================================DATASNAP* After deleting a row from a TClientDataset, sometimes the delta dataset still contains a record. This happens if you populate the Nested Dataset field before populating another field that precedes it in the field order. * The TClientDataSet.ApplyUpdates method fails if the dataset contains only changes to fields that have the ProviderFlags.pfnUpdate property set to False (Quality Central 2338). * TClientDataSet does not order correctly on a TLargeIntField when used in an index or in the IndexFieldNames property (Quality Central 1050 & 2626) * TAggregateField returns an incorrect value after a filter was used and then cleared (Quality Central 1712). * A "Key violation" exception may incorrectly be generated when using poFetchDetailsOnDemand with a nested dataset that also has an InternalCalc field (Quality Central 2011). * TClientDataSet may contain invalid Delta entries when using poPropogateChanges. (Quality Central 2019 & 2333). * Editing the value of an InternalCalc field on a nested TClientDataset causes the ChangeCount property of the parent dataset to increase (Quality Central 2027). * A TLargeIntField cannot be used as a linking field in a master/detail relationship. Doing so results in the error "Cannot access field <fieldname> as type variant." * TClientDataSet doesn‘t save data to file when FileName is set and there is no existing file on disk (Quality Central 2307). * Using the Delphi 7 version of midas.dll to open an XML file that was saved with the Delphi 6 version of midas.dll results in an illegal operation. * Incorrect filter expression parsing occurs when parsing a value that contains a quote in TClientDataSet. The expression parser incorrectly treats the rest of the expression as a formula (Quality Central 1266). * TClientDataSet.ChangeCount will return an incorrect value when editing the value of a TStringField or a TWideStringField and then reverting it to the original value (Quality Central 2717 & 4508). * Canceling an update to an individual field by assigning the "unassigned" (varEmpty) value to TField.NewValue in the TDataSetProvider.BeforeUpdateRecord event handler does not work (Quality Central 3660). * TClientDataset InternalCalc fields are reset to null after calling the ApplyUpdates method when using poPropogateChanges (Quality Central 3777). * When using incremental fetching on a TClientDataset with parameters, the associated TDatasetProvider will repeatedly return the same set of records (Quality Central 3515). * TClientDataset.FindKey will fail with an list index error when used on a cloned nested dataset (Quality Central 3786). * When the size of a Persistent field in TClientDataSet is set too large, it overwrites neighboring fields upon Post (Quality Central 3974). * TDataSetProvider generates incorrect SQL in response to a RefreshRecord request in some cases and fails to update all fields properly (Quality Central 4014). * When TDataSetProvider obtains the DB ‘current‘ values after an update conflict, it does so against the wrong fields (Quality Central 4006). * TClientDataSet.Delete fails with the error "Cannot delete master record with details" even when all of the details are deleted if the detail table was previously cloned (Quality Central 5646). * In some cases, records may disappear from a nested TClientDataset after performing edits, applying updates and calling refresh (Quality Central 7287). * When multiple indexes are included with the data from a provider, the IndexDef entries in the TClientDataset will show duplicate ‘Fields‘ and ‘DescFields‘ values (Quality Central 7543). * When updating blob fields in a TClientDataset with the LogChanges property set to False, blob data is lost from other unrelated records (Quality Central 6591). * Using a Filter or Locate with a TLargeIntField on a TClientDataSet will always fail with the error "Constant is not correct type". (Quality Central 6142 & 3496). * Calling the CancelRange method on nested TClientDataset will cause all records for every master record to be displayed (Quality Central 4301). * When using RefreshRecord on a Memo or Blobfield and the field has been modified by another user, the blobsize of that field does not change if it is less than before (Quality Central 4676).* Calling the TClientDataset.Locate method on a TWordField always returns false (Quality Central 5319).* Using the TDataSetProvider poFetchDetailsOnDemand option with a server-side master/detail definition (nested dataset on the client side) raises an exception when the master TClientDataset is opened (Quality Central 5707).* TClientDataset may create an incorrect delta when inserting new master and detail records and then editing the same master record a second time (Quality Central 6849). * The assignment of a LargeInt field to another LargeInt field fails when the destination and source are both TLargeIntFields (Quality Central 6393).* When Params are passed from a TClientDataSet to a TDatasetProvider, the Size,Precision, and NumericScale property settings are lost (Quality Central 6308). * TClientDataSet allocates values against nested dataset AutoInc fields but it should not (Quality Central 5509).* When using a TimeStamp type parameter with a TClientDataSet an error occurs when the parameter is passed to the server (Quality Central 6372). * Setting MTSDataModule.AutoComplete to False in the IDE is overridden and set back to True at run time (Quality Central 4716).* Calls to ApplyUpdates(-1) on a TMTSDataModule do not work properly (Quality Central 6906). =======================================================DBGO (ADO Components)* Using TParameter.Assign(TParam) or TParam.Assign(TParameter) causes incorrect settings of the Size, NumericScale, and Precision properties (Quality Central 6366). * When values in persistent TMemoFields are returned after reading a row of a TADOTable, the values are truncated at the first occurrence of #0 (Quality Central 2771). * When using TADOQuery to get a result set from a SQL query, the SQL statement gets prepared but never gets unprepared Quality Central 3635). * With a query, when using cursorType set to ctOpenForwardOnly and cursorLocation set to clUseServer, the "First" method will move the cursor position to the second record (Quality Central 4769). * Setting the value of a TLargeInt field to a negative value in an ADODataSet and calling Post results in the error "Multiple- step operation generated errors. Check each status value" (Quality Central 2106). * When using a SQL Server 2000 table with a BigInt or decimal columns, negative values are incorrectly returned as positive values by ADO components (Quality Central 2379 & 998).=======================================================dbExpress COMPONENTS* When including the line delimiter ";" at the end of a select statement in TSQLQuery, then using the query and a TDataProvider to give data to a CDS, you cannot apply updates without encountering a the syntax error "Token unknown."* Updating on a TSQLQuery with either a WHERE clause or when adding a delimiter ";" results in the error "Unable to find record, no key specified." * When using TSQLConnection and TSimpleDataSet to access a MySQL database, it is impossible to add new records to a table that has an auto-increment primary key (Quality Central 5465). * When using the MySql driver, erroneous state information about the number of active statements with respect to a TSQLConnection might result in a transaction starting on one connection and a commit or rollback happening on another connection (Quality Central 1074). * Updating on TSQLQuery with either a WHERE clause or when adding a delimiter ";" results in the error "Unable to find record, no key specified" (Quality Central 5550). * When using TSQLQuery to add calculated fields, OnCalcFields fails on the first record, because all of the fields in the first record are empty after OnCalcFields is called (Quality Central 1328). * Calling TSQLConnection.getTableNames() to retrieve system tables takes too long.* Using TSQLConnection.CloneConnection may result in the loss of the TableScope status for a new connection (Quality Central 5867).=======================================================dbExpress CORE DRIVER AND METADATA* DB2 V8 Support - Index Metadata retrieval: (Quality Central 4150) Querying for a table with a unique index fails with "Cannot convert a variant of type (Null) to type (String)"* DB2 V8 Support - Fetching a stored procedure parameter fails.* MySQL 4.0.x support (Quality Central 3731).* MySQL driver supports only the default Port (Quality Central 3736).* MySQL SQLCommand.GetRowsAffected returns 0 on successful updates (Quality Central 4504).* MySQL TimeStamp comes back as NOT NULL always (Quality Central 4689).* MySQL metadata causing data truncation (Quality Central 4160).* AV on SQLCommand.Close() in MySQL driver (Quality Central 5819).* MySQL metadata is retrieved from wrong database (Quality Central 4130).* An MSSQL stored procedure with long names causes memory corruption (Quality Central 3225).* The MSSQL driver leaks resources on repeated SQL execution (Quality Central 4059).* MSSQL TimeStamp fraction part rounding error while fetching data.* MSSQL - ExecDirect() does not return the RowsAffected.* MSSQL return parameter is not available from a stored procedure returning cursor/cursors (Quality Central 3763).* An MSSQL stored procedure with no parameters causes memory corruption.* An MSSQL stored procedure does not return @@IDENTITY after a SP execution. The identity value is returned only on the third execution.* ORACLE Functions are now supported (Quality Central 4051).* ORACLE SQLCommand.getParameter() always returns the NULL indicator as True (Quality Central 4018).* InterBase - Support for BOOLEAN data type has been added.=======================================================dbExpress VENDOR ISSUES* MySQL - Data truncation resulted as the cursor level metadata is incorrect. MySQLField.length is 1024 for the second columns after describing the SQL "Show create table tablename". - (Quality Central - 1810)* MSSQL - SubQuery parameter binding causes an AV in MSVCRT7.DLL (Quality Central 2767) - MS bug. Case # SRX030728604937.* MSSQL Null parameter binding on a NOT NULL INTEGER columns fails with a SQL Error "SQL State:HY000, SQLError Code:0 Invalid input parameter values" - MS bug Case #SRX030728605044. dbExpress MSSQL driver calls IDBCommand.Prepare() and that seems to cause this bug in SQLOLEDB.DLL.=======================================================dbExpress CERTIFICATIONdbExpress has been certified with the following databaseversions:InterBase 7.1 (*Driver should also work with InterBase 6.5, 7.0)Oracle 9.1.0 (*Driver should also work with ORACLE 9.2.0)DB2 UDB 8.x (*Driver should also work with DB2 V7)MSSQL 2000Informix 9.xMySQL 4.0.18 * The driver should work with these database versions, however, it has not been fully certified with these versions. =======================================================INTERNET/WEBSNAP* Procedure TSockWebResponse.SendResponse contains code that causes an incomplete response. =======================================================ACTIVEX* On Windows 98 SE, registering an OLE-server on a a shared mapped drive and then starting the program from a non-UNC path drive results in an endless loop (Quality Central 3151). * ShortToLongFileName fails on some UNC paths, which makes TComServer fail when the executable is located on a remote computer (Quality Central 3049). * Additional methods begin with GhostMethod_ are added to interface declarations which would not appear in Delphi 6 (Quality Central 3426). * SetOlePicture distorts the target TPicture size (Quality Central 4137).======================================================= COMPILER* Assigning a partially empty multi-dimensional dynamic array to a variant causes an access violation. * Converting an empty dynamic array to a variant array results in a non-empty variant array with the wrong bounds. * Assert fails to break and leaves an FPU invalid op exception set (Quality Central 5248). * Under some circumstances, optimization causes an access violation on a call to a dynamic + safecall method (Quality Central 5071). =======================================================RTL* In System.pas, function LoadResString(ResStringRec: PResStringRec): string; has a hard-coded buffer of 1024 characters, which causes resource string table entries in excess of 1023 characters to be truncated (Quality Central 7581). * On Windows Server 2003, calls to SysUtils.GetEnvironmentVariable fail with an access violation wHen the requested environment variable does not exist (Quality Central 4319). * When a variant array item is a string with embedded null characters (#0), Delphi treats those items as null-terminated strings when the string is assigned to an item of variant array (Quality Central 6078). =======================================================VCL* Context and keyword help does not fire for the OnHelp events.* Selecting a zero length (empty) item in drop-down combo box results in an access violation in ntdll.dll. * Attempting to delete a single item from the TComboBoxEx ItemEx list, that item and the next item are deleted (Quality Central 3991). * Calling TBitmap.Assign(nil) may result in a GDI resource leak (Quality Central 2511). * TRegistry class leaks a register key handle if LazyWrite is set to False. * THashedStringList ignores the NameValueSeparator property (Quality Central 5632). * In a DBCS environment, an exe filename that includes DBCS characters often garbles Application.Title (Quality Central 5089). * Menu items and images are sometimes drawn partially in black on Windows XP systems that have themes disabled (Quality Central 2341). * When the ValueListEditor Visible property is set to False, making it visible and adding a string at runtime may cause an access violation (Quality Central 4953). * When connected to a network printer and the system hosting the network printer is offline, Printer.PageWidth may cause an access violation in GDI32.DLL (Quality Central 757).* The OldCreateOrder property for a form that inherits from another form is automatically set to True when the form is saved (Quality Central 1675). * When ending a Windows session (either by using Log Off or Shut Down) while a VCL-based Delphi application is running, no OnDestroy events on the application‘s forms are called, nor are any finalization sections executed. This may result in lost data and user settings (Quality Central 5332). ======================================================= THIRD PARTY - BOLD FOR DELPHI* SQLDatabaseConfig now contains settings for database evolution scripts (separator, terminator and commands for transaction start/commit). Logs can be saved from the evolution dialog (Quality Central 4679). * BoldSelectChangeAction in BoldComboBox is now triggered more appropriately on incremental searches (Quality Central 2827).* A potential infinite recursion problem in TBoldUnOrderedIndexableList.KnowsSupportsNil has been fixed.* An assert with side-effects in TBoldObjectList.GetBoldObject has been changed. This affects debug dcus only.* TBoldUMLModelValidator.ValidateClass no longer has a bad format string for one error. * TBoldDbDataValidator.Validate no longer validates without running any tests when not connected to a database.* DBDataValidation no longer fails on parent or child mapped classes. * Performance of XMI Import has been improved (Quality Central 2827) .* XMI Export now correctly exports multiplicity 0..n. * Transaction grouping in optimistic locking has been improved by performing checks in the same transaction as the update (Quality Central 3123).* A memory leak in the Object Lending Library has been fixed (Quality Central 3648).* Several issues with BoldGrid and goTabs have been resolved (Quality Central 3903 and 3904).* Saving modified multilinks no longer yields an index out of bounds condition under certain conditions (Quality Central 4870).* BoldSystemDebuggerForm no longer yields an access violation on the second invocation from a Bold Action (Quality Central 6482).* Certain combinations of tableMapping=Child and abstract classes have been improved (Quality Central 7110).* The OCL operation includesAll no longer returns false when it should return true (Quality Central 3146).* An Import problem with "Error: Class is already a relation class for another association" has been fixed (Quality Central 3093).* TBoldEnvironmentConfiguration.DeactivateQueue no longer yields an access violation during finalization (Quality Central 3227).* An access violation in BoldMemoryManager during finalization of multi-threaded applications has been fixed.* Model validation no longer incorrectly warns against parent mapped classes with derived attributes not allowing null.* Relating objects belonging to different Bold systems is no longer allowed.* Instructions for compiling IDL files have been improved. =======================================================VERIFYING THAT THE UPDATE WAS SUCCESSFULThe final dialog of the update installer indicates whether theupdate was successful. You can also:* Open Delphi 7 and use "Help | About" to display the About Box. The product version should be: Version 7.0 (Build 8.1) (Before applying the update, the version is 7.0 (Build 4.453).) * Use the file list in "FILES INSTALLED BY THIS UPDATE" below to verify that the correct file versions are installed on your machine. =======================================================FILES INSTALLED BY THIS UPDATEThis update adds or updates the following Delphi files. Thefollowing list includes files for all editions of Delphi.By default, <InstallDir> is C:Program FilesDelphi7.Version Path and File Name------- ------------------7.0.8.1 <InstallDir>incoreide70.bpl7.1.1523.17956 <InstallDir>indbexpdb2.dll7.1.1523.17956 <InstallDir>indbexpInf.dll7.1.1523.17956 <InstallDir>indbexpInt.dll7.1.1523.17956 <InstallDir>indbexpmss.dll7.1.1523.17956 <InstallDir>indbexpmysql.dll7.1.1692.666 <InstallDir>indbexpora.dll7.0.8.1 <InstallDir>indcc32.exe7.0.8.1 <InstallDir>indcc70.dll7.0.8.1 <InstallDir>indclclxdb70.bpl7.0.8.1 <InstallDir>indcldb70.bpl7.0.8.1 <InstallDir>indcldbx70.bpl7.0.8.1 <InstallDir>indelphi32.exe7.0.8.1 <InstallDir>indesignide70.bpl7.0.8.1 <InstallDir>indfm70.bpl7.0.8.1 <InstallDir>inorbpas45.dll7.0.8.1 <InstallDir>in lib70.bpl7.0.8.1 Borland SharedDebuggerDCC70.dll <InstallDir>libidl45corba.dcu <InstallDir>libADODB.dcu <InstallDir>libadortl.dcp <InstallDir>libaxctrls.dcu <InstallDir>libcomctrls.dcu <InstallDir>libComServ.dcu <InstallDir>libDB.dcu <InstallDir>libDBClient.dcu <InstallDir>libDBCommon.dcu <InstallDir>libDBCtrls.dcu <InstallDir>libdbExpDB2.dcu <InstallDir>libdbExpINT.dcu <InstallDir>libdbExpMySQL.dcu <InstallDir>libdbExpORA.dcu <InstallDir>libdbexpress.dcp <InstallDir>libdbrtl.dcp <InstallDir>libDBXpress.dcu <InstallDir>libdsnap.dcp <InstallDir>libdsnapcon.dcp <InstallDir>libForms.dcu <InstallDir>libgraphics.dcu <InstallDir>libIniFiles.dcu <InstallDir>libmenus.dcu <InstallDir>libMidasLib.dcu <InstallDir>libMtsRdm.dcu <InstallDir>libPrinters.dcu <InstallDir>libProvider.dcu <InstallDir>lib egistry.dcu <InstallDir>lib tl.dcp <InstallDir>libSqlConst.dcu <InstallDir>libSqlConst.dcu.de <InstallDir>libSqlConst.dcu.fr <InstallDir>libSqlConst.dcu.jp <InstallDir>libSqlExpr.dcu <InstallDir>libStdCtrls.dcu <InstallDir>libsystem.dcu <InstallDir>libsysutils.dcu <InstallDir>libValEdit.dcu <InstallDir>libVariants.dcu <InstallDir>libvcl.dcp <InstallDir>libvcldb.dcp <InstallDir>libdebugADODB.dcu <InstallDir>libdebugaxctrls.dcu <InstallDir>libdebugcomctrls.dcu <InstallDir>libdebugcomserv.dcu <InstallDir>libdebugDB.dcu <InstallDir>libdebugDBClient.dcu <InstallDir>libdebugDBCommon.dcu <InstallDir>libdebugDBCtrls.dcu <InstallDir>libdebugDBXpress.dcu <InstallDir>libdebugForms.dcu <InstallDir>libdebuggraphics.dcu <InstallDir>libdebuginifiles.dcu <InstallDir>libdebugmenus.dcu <InstallDir>libdebugMtsRdm.dcu <InstallDir>libdebugprinters.dcu <InstallDir>libdebugProvider.dcu <InstallDir>libdebug egistry.dcu <InstallDir>libdebugSqlConst.dcu <InstallDir>libdebugSqlConst.dcu.de <InstallDir>libdebugSqlConst.dcu.fr <InstallDir>libdebugSqlConst.dcu.jp <InstallDir>libdebugSqlExpr.dcu <InstallDir>libdebugstdctrls.dcu <InstallDir>libdebugsystem.dcu <InstallDir>libdebugsysutils.dcu <InstallDir>libdebugValEdit.dcu <InstallDir>libdebugvariants.dcu <InstallDir>libdebugidl45Corba.dcu <InstallDir>source tlcommonComServ.pas <InstallDir>source tlcommonIniFiles.pas <InstallDir>source tlcommon egistry.pas <InstallDir>SourceRtlCorba45corba.pas <InstallDir>source tlsyssysutils.pas <InstallDir>source tlsysVariants.pas <InstallDir>sourcevclADODB.pas <InstallDir>sourcevclaxctrls.pas <InstallDir>sourcevclcomctrls.pas <InstallDir>sourcevclDB.pas <InstallDir>sourcevclDBClient.pas <InstallDir>sourcevclDBCommon.pas <InstallDir>sourcevclDBCtrls.pas <InstallDir>sourcevclDBXpress.pas <InstallDir>sourcevclForms.pas <InstallDir>sourcevclgraphics.pas <InstallDir>sourcevclmenus.pas <InstallDir>sourcevclMtsRdm.pas <InstallDir>sourcevclPrinters.pas <InstallDir>sourcevclProvider.pas <InstallDir>sourcevclSqlConst.pas <InstallDir>sourcevclSqlConst.pas.de <InstallDir>sourcevclSqlConst.pas.fr <InstallDir>sourcevclSqlConst.pas.jp <InstallDir>sourcevclSqlExpr.pas <InstallDir>sourcevclStdCtrls.pas <InstallDir>sourcevclValEdit.pas 7.0.8.1 Windowssystem32adortl70.bpl7.0.8.1 Windowssystem32dbexpress70.bpl 7.0.8.1 Windowssystem32dbrtl70.bpl7.0.8.1 Windowssystem32dsnap70.bpl7.0.8.1 Windowssystem32dsnapcon70.bpl7.0.8.1 Windowssystem32 tl70.bpl7.0.8.1 Windowssystem32vcl70.bpl7.0.8.1 Windowssystem32vcldb70.bpl7.1.1692.666 Windowssystem32midas.dll 7.0.8.1 Common FilesBorland SharedDebuggerdcc70.dll======================================================Copyright (c) 2004 Borland Software Corporation.All rights reserved.
相关推荐
MateyFrame是一款由Delphi开发的三层架构框架,经过多年的升级改进,版本由MateyFrame V1.0升级到了当前的MateyFrame V5.0版本。MateyFrame V5.0具有功能强大、负载量大、安全性高、可扩展性强、同时支持B/S与C/S运行模式、开发简单等特性。MateyFrame V5.0由中间层服务端、客户端框架、MateyWeb组件三部分组成,同时支持 Oracle、MSSQL、MySQL数据库。 中间层服务端 采用面向对象方法设计而成,具有稳定性强、安全性高、负载量大、可扩展性强等特性。 采用数据库连接池技术,支持多数据库应用及多种数据库应用,可以很好的处理断网、数据库重新启动等异常情况,一旦外界环境恢复后,连接池将重新连接数据库,不需要重启服务程序。 使用HTTP协议与客户端进行通信,可以适合企业内网及企业外网等任何网络环境,更适合在Internet网络上运行程序。 服务端支持多种类型的大型数据库一起使用,支持的数据库有:Oracle、MSSQL、MySQL。 服务端采用插件技术开发,系统核心插件可以直接使用,另外用户可轻松地扩展自己需要的服务插件。 服务端采用会话管理技术,为每个客户端会话分配唯一的加密密钥,交互数据在底层进行加密传输,保证了数据在传输过程中的高安全性。 服务端支持多实例运行模式,当客户端用户量大增时,可以适当增加中间层实例,解决大并发量的问题。 服务端插件实现了真三层、伪三层的核心插件,用户可以根据安全级别选用任何一种模式进行应用。 服务端使用Win服务运行模式,重启服务器不需登录系统开启服务程序,服务端即可自动运行。 具有客户端程序发布功能,可以为客户端软件的自动更新服务。 客户端框架 客户端设计成 EXE+BPL+DLL 的文件结构模式,具有扩展性强、易于开发、易于维护、使用简单等特点; 程序框架同时支持B/S、C/S模式,即可以通过客户端运行程序,也可以通过浏览器运行程序,并且支持两种模式同时存在。 使用插件开发模式,业务功能根据实际需要封装在不同的模块 DLL 中,即插即用; 封装了强大的基类,底层数据访问、出错处理、权限控制等; 系统功能根据业务模块信息自动生成,可以手动配置功能菜单列表; 框架中包含用户及权限管理插件,拿来即用,此模块可严格控制各功能Form 的详细权限(添加、修改、删除)、特殊数据的读取权限; 框架中包含了数据字典、系统参数的设置功能,拿来即可用。 框架采用调用时下载相关依赖文件的模式进行程序更新,具有更新文件少、更新速度快等特点; 框架支持程序文件流加载模式,更新的程序文件不需要保存在客户端的机器上,可大大增强程序的安全性。 框架有设计模式与运行模式之分,在设计模式下客户端通过框架功能用SQL可以直接读取到数据库的数据,方便程序开发;但在运行模式中,此功能不可用,这样可以保证数据的安全性。 框架设计了通用的报表设计模块,用户只需简单调,就可以得到自己所需要的报表模板设计,得到功能所需要的报表。 可选用分页数据处理技术,使大批量数据分页返回,分解服务器的压力; 具有负载平衡的功能,当连接的中间层服务器端负载过大或者崩溃时,会自动转向其它可用中间层服务器。 具有断线重连功能,当网络的异常恢复时,系统底层连接会重新连接,不用重启程序就可使用。 框架提供超级查询组件,组件可以根据编号、名称、五笔码、拼音码对需要查询的数据进行快速过滤。 MateyWeb组件 MateyWeb组件是一款能被IE加载运行的ActiveX控件,它是客户端程序在B/S模式下运行的载体。 MateyWeb组件支持WinXP、Win2000、Win2003、Win7、Vista等操作系统。 MateyWeb组件支持IE及以IE为内核的所有浏览器。 应用场合 非常适合开发各种应用于Internet之上的大中型的MIS管理软件
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页