阵列DML(FireDAC)

De RAD工作室
艾利尔:航行研究者

重新输入a命令的使用(FireDAC)

信息目录

技术演示阵列DML soume une seule commande de SGBD伴随着参数表。命令一个联合国的政治舞台,以及我们的政治舞台。消防发展援助委员会要求在SGBD d’exécuter的命令下,与表格保持一致。Cette technique réduit le volume de communication entre le SGBD et le client,et permet au SGBD de fluifier l’exécution de la commande。Le délai d'exécution est ainsi réduit报。

L'image suivante插图流程:

FDPhysCmdBatch.png文件

Dans FireDAC,les formulations“exécution d'une command groupée”et“execution Array DML”sont souvent utilisées comme des synonyments。数组DML peutétre utiliépour pratiquement吹嘘les commandes paramétrées,y compriss les apples aux procédures stockées。FireDAC实现了阵列DML,利用了SGBD本身的API能力。

Le tableau suivant présente les SGBD et les fonctionnalités阵列DML:

SGBD公司 阵列DML的实现 模式阵列DML 阵列DML极限交响乐团
Advantage数据库 仿真 aeUpToFirst错误
服务器数据快照 仿真 aeUpToFirst错误
IBM DB2 本地 aeCollectAllErrors(收集所有错误)
Informix公司 本地 aeCollectAllErrors(收集所有错误)
InterBase v<XE3 仿真 aeUpToFirst错误
InterBase v>=XE3 本机(API de groupes de commandes) aeUpToFirst错误
Firebird v<2.1 仿真 aeUpToFirst错误
Firebird v>=2.1 本机(EXECUTE BLOCK) aeOnErrorUndoAll(错误全部取消) 埃勒“特罗普·德孔特克斯”
Microsoft SQL Server 本地 aeCollectAllErrors(收集所有错误) Erreur可能会“违反规定”
Microsoft Access数据库 仿真 aeUpToFirst错误
服务器MySQL 本地(插入avec plusieurs VALEURS) aeOnErrorUndoAll(错误全部取消)
Oracle服务器 本机(阵列DML OCI) aeUpToFirst错误 L’应用程序暂停。有限的解释-65000个表格。
PostgreSQL v<8.1 仿真 aeUpToFirst错误
PostgreSQL v>=8.1 本地(INSERT/MERGE avec plusieurs VALEURS) aeOnErrorUndoAll(错误全部取消)
Base de données SQLite v<3.7.11 仿真 aeUpToFirst错误
SQLite基准v>=3.7.11
  • 仿真,花哨的参数。绑定模式=pbByName
  • 本地(插入avec plusieurs VALEURS),lorsque Params。绑定模式=pbByNumber
  • aeUpToFirst错误
  • aeOnErrorUndoAll(错误全部取消)
Sybase SQL Anywhere 本地 aeUpToFirst错误
德多内斯·特拉达塔基地 本地 aeOnErrorUndoAll(错误全部取消)
重新定价:

命令执行

Avant l’exécution de Array DML,le code de l’application doit configurer les tableaux de valeurs des paramètres。开始在瓦卢拉帕拉姆斯指定的舞台上进行表演。数组大小。在矫揉造作的性质上,您可以指定隐含的表格特殊性参数数组大小。Params ne doit don c pasás系列提供了前卫的“une valeuráParams赋值”。数组大小。Ensuite,assignez des valeurs aux tableaux de paramètres公司。TADParam系列组合方案AsXXXs[A索引:整数],类似于AsXXX和autres proprietés et méthodes接受方案委员会主席参数l’index de tableau。Par示例:

FD查询1.SQL语言.文本 := '插入MyTab值(:p1,:p2,:p3)';
//此处FDQuery1.Params集合由3个参数填充
FD查询1.参数.阵列大小 := 100;
对于  := 0  100-1  开始
  FD查询1.参数[0].作为整数[] := ;
  FD查询1.参数[1].AsStrings(字符串)[] := “qwe”;
  FD查询1.参数[2].清除();
结束;

TFDCustomCommand、TFDQuery和TFDStoredProc组件方法执行(A时间:Integer=0;AOffset:Integer=0)。舞蹈表演,时间有限。A表中总理指数的偏差。命令血清供切(A时间-A偏移)fois,共有A偏移。A有时会向Params提供信息。数组大小。Par示例:

FD查询1.执行(100 0);

阵列DML的4月l’exécution,la propriétét行受影响遵守法律法规和非法律法规影响法律法规。Par示例:

显示消息(国际贸易协定(FD查询1.行受影响));

错误手势

TFDAdaptedDataSet、TFDQuery和TFDStoredProc ont la capacitéd’intercepter des erreurs en utiliant des gestionnaires d’evénementOnExecuteError(执行错误).Si le gestionnaire d’erreur n’est pas assignéet qu’une erreur se produit,Execute déclenche une exception et RowsAffected est misájour。

TFDA适应数据集的管理。OnExecuteError是一个赋值,它接受了原始、过程和过程中的异常对象,并重新调用了行动的价值,独立的行动是有效的。A错误。错误[…]会给您带来更多错误。A错误。错误[i]。RowIndex是la-lagine ayantéchoué的索引。Notez que OnExecuteError n’est pas appeléen cas d'erreurs de syntaxe ou lorsque ATimes=1。

Par示例:

程序 T形1.FDQuery1执行错误(A投标人: TObject(目标); A时间
  A偏移: 整数; A错误: EFDDB发动机异常; 无功功率,无功功率 A操作: TFD错误操作);
开始
  如果 A错误.错误[0].种类 = 违反ekUK 然后
    A操作 := eaSkip公司
  其他的
    A操作 := eaFail(ea失败);
结束;

SGBD et de son模式阵列DML对应的精确分量:


模式阵列DML 描述
aeOnErrorUndoAll(错误全部取消) L'exécution是一个预处理错误。每年都会有成功的应用程序。FireDAC bascule套用了舞台新秀的表演模式。Ce模式与au模式类似aeUpToFirstError。Voir aeUpToFirstError密码。
aeUpToFirst错误 L'exécution是一个预处理错误。图斯·莱莱门茨(Tous leséléments de tableau appliques s avec succès sont enregistres s)。《性别暴力和性别歧视法》重新调整了《性别歧视法》的首要指标。行受影响=表格贴花的nombre d’éléments s avec succès。La collection d'erreurs dans AError系列。错误[…]会让你更容易犯错。A错误。错误[i]。RowIndex是al'index de la ligne ayantéchoué。
aeCollectAllErrors(收集所有错误) 《最具代表性的舞台》(Tous leséléments de tableau sont exécutés)。图斯·莱莱门茨(Tous leséléments de tableau appliques s avec succès sont enregistres s)。Le SGBD回归了《阿扬特周刊》的索引。行受影响=表格贴花的nombre d’éléments s avec succès。La collection d'erreurs dans AError系列。错误[…]contient une erreur pour chaque ligne ayantéchoué。A错误。错误[i]。RowIndex是la-lagine ayantéchoué的索引。
重新定价:Le fait de définir餐厅资源选项。阵列DML大小sur 1 définite隐式le mode d’execution de tableau sur aeUpToFirstError。浇注更先进的模式阵列DML du SGBD actiuellement connecté,利用:
如果 FD连接1.连接元数据Intf.阵列执行模式 = aeOnErrorUndoAll(错误全部取消) 然后
  。。。。


Dépannage餐厅

最重要的定义是纠正参数,包括参数大小。例如,dans le cas d’Oracle,FireDAC允许4000个八位字节pour chaque paramètre ftString/ftWideString lorsque la propriétéSize n’est pas explicitement spe cifie e。倒入10000个瓦卢尔,40个月后再倒入一个卫生棉条。正如我们所说的那样,“应用程序的淫秽利用者吹嘘的是一个不合理的系统”。

La plupart des SGBD limitent隐式La-taille de Array DML。Cela dépend de la taille du tampon de la bibliothèque client du SGBD ou de la quantitémaximale de paquets réseau autorisée e e。Lorsquu‘une limited est atteinte,utiliz l’option(使用选项)资源选项。阵列DML大小倒入diviser de manière transparent de grands tableaux数组DML分份和重复。


示例1

阵列DML avec IFDPhys命令:

无功功率,无功功率
  o命令: IFDPhysCommand(IFDPhysCommand);
……
  具有 o命令  开始
    命令文本 := '插入客户(ID,Name)值(:ID,:Name)';
    //设置参数类型
    参数[0].数据类型 := 英尺整数;
    参数[1].数据类型 := ftString(英尺字符串);
    参数[1].大小 := 40;
    //设置参数的数组大小
    参数.阵列大小 := 10000;
    //设置参数值
    对于  := 0  10000 - 1  开始
      参数[0].作为整数[] := ;
      参数[1].AsStrings(字符串)[] := “某人” + 国际贸易协定();
    结束;
    //执行批处理
    执行(10000 0);
  结束;


示例2

阵列DML avec TFDQuery et gestion des erreurs:

程序 T形1.FDQuery1执行错误(A投标人: TObject(目标); A时间
  A偏移: 整数; A异常: EFDDB发动机异常; 无功功率,无功功率 A操作: TFD错误操作);
开始
  案例 A异常.错误[0].种类 属于
  ekPK违规:
    开始
      //修复ID唯一
      FD查询1.参数[0].作为整数[A异常.错误[0].行索引] := A异常.错误[0].行索引;
      A操作 := ea重试;
    结束;
  ekFK违规:
    //如果找不到RegionID为的Region,则跳过行
    A操作 := eaSkip公司;
  其他的
    A操作 := eaFail(ea失败);
  结束;
结束;

程序 T形1.按钮1单击(A投标人: TObject(目标));
开始
  具有 FD查询1  开始
    SQL语言.文本 := '插入客户(ID,RegionID,Name,Note)值(:ID,:RegionID、:Name、:Note)';
    //设置参数类型
    参数[0].数据类型 := 英尺整数;
    参数[1].数据类型 := 英尺整数;
    参数[2].数据类型 := ftString(英尺字符串);
    参数[2].大小 := 40;
    参数[].数据类型 := 英尺备忘录;
    //设置参数的数组大小
    参数.阵列大小 := 10000;
    //设置参数值
    对于  := 0  10000 - 1  开始
      如果  模块 100 = 0 然后
        //强制PK冲突
        参数[0].作为整数[] :=  - 1
      其他的
        参数[0].作为整数[] := ;
      参数[1].作为整数[] := 为客户获取区域ID();
      参数[2].AsStrings(字符串)[] := “某人” + 国际贸易协定();
      参数[].清除();
    结束;
    //执行批处理
    执行(10000 0);
  结束;
结束;

沃伊尔·奥斯西

示例