{*******************************************************}
{ }
{ XE7、XE8、XE10 安卓 IOS 框架 }
{ }
{ 版权所有 (C) 2015 打工的程序员 }
{ 日期: 2015.01.15 }
{ 技术服务QQ:2403182533 } { 承接业务:Delphi 相关二次开发,代码维护 }
{ 承接业务:Delphi ERP 维护 }
{ 承接业务:Delphi 安卓、IOS移动开发 } { } { 苹果IOS 技术开发QQ:3156449795 }
{ 苹果账号代申请、苹果开发环境搭建 }
{*******************************************************} {
引用 System.JSON; 函数名称:DBToJSON(TFDMemTable 数据转成SQL脚本更新) 参数:
DB:TFDMemTable数据集
sTable:更新表名
sKey:关键字段,写法:ID,Name 以逗号区分
sNoField:不需要修改或增加的字段: 写法:ID,Sex 以逗号区分
}
function DBToJSON(DB:TFDMemTable;sTable:string;sKey:String;sNoField:String):String;
Var
ItemKey,ItemNoField:TStringlist;
JA:TJSONArray;
sField,sValue,sSQL,sTmp,sName:string;
i,j:Integer;
begin
JA:=TJSONArray.Create;
ItemKey:=TStringlist.Create;
ItemNoField:=TStringlist.Create; ItemKey.Delimiter:=',';
ItemKey.DelimitedText:=sKey; ItemNoField.Delimiter:=',';
ItemNoField.DelimitedText:=sNoField; sField:='';
sValue:='';
sSQL:='';
with DB.Delta.DataView.Rows do begin
for I := to Count- do begin //判断数据的操作状态 :插入
if ItemsI[i].RowState=TFDDatSRowState.rsInserted then begin //循环对应的数据字段
for j := to DB.Fields.Count- do begin
//获取字段名称
sName:=DB.Fields[J].FieldName; //排除不需要插入的字段信息
if ItemNoField.IndexOf(sName)>- then
Continue; //判断字段的数据类型
case DB.Fields[J].DataType of
ftString,ftWideString,ftMemo: sTmp:=VarToStr(ItemsI[i].GetValues(sName)).QuotedString;
ftSmallint, ftInteger,ftFloat, ftCurrency, ftBCD: sTmp:=VarToStr(ItemsI[i].GetValues(sName));
ftDateTime: begin
sTmp:=VarToStr(ItemsI[i].GetValues(sName));
//日期如何没有填写默认为Null
if sTmp='' then
sTmp:='Null'
else
sTmp:=FormatDateTime('yyyy-mm-dd hh:ss:mm',StrToDateTime(sTmp)).QuotedString;
end;
ftBoolean: begin
if ItemsI[i].GetValues(sName)=True then
sTmp:=''
else
sTmp:='';
end;
else
sTmp:=VarToStr(ItemsI[i].GetValues(sName)).QuotedString;
end; //累积字段和插入值
sField:=sField+sName+',';
sValue:=sValue+sTmp+',';
end;
//拼接成SQL并插入到数组中
JA.Add('Insert Into '+sTable+' ('+Copy(sField,,Length(sField)-)+')'+##
+' Values('+Copy(sValue,,Length(sValue)-)+')'+## ) ; end
//判断数据的操作状态 :修改
else if ItemsI[i].RowState in [TFDDatSRowState.rsModified,
TFDDatSRowState.rsEditing] then begin for j := to DB.Fields.Count- do begin
sName:=DB.Fields[J].FieldName; //排除不需要插入的字段信息
if ItemNoField.IndexOf(sName)>- then
Continue; //判断字段的数据类型
case DB.Fields[J].DataType of
ftString,ftWideString,ftMemo: sTmp:=VarToStr(ItemsI[i].GetValues(sName)).QuotedString;
ftSmallint, ftInteger,ftFloat, ftCurrency, ftBCD: sTmp:=VarToStr(ItemsI[i].GetValues(sName));
ftDateTime: begin
sTmp:=VarToStr(ItemsI[i].GetValues(sName));
if sTmp='' then
sTmp:='Null'
else
sTmp:=FormatDateTime('yyyy-mm-dd hh:ss:mm',StrToDateTime(sTmp)).QuotedString;
end;
ftBoolean: begin
if ItemsI[i].GetValues(sName)=True then
sTmp:=''
else
sTmp:='';
end;
else
sTmp:=VarToStr(ItemsI[i].GetValues(sName)).QuotedString;
end;
//累积更新字段值
sField:=sField+sName+'='+sTmp+','; //修改数据关键字段,条件值
if ItemKey.IndexOf(sName)>- then
sSQL:=sSQL+' And '+ sName+' = '+VarToStr(ItemsI[i].GetData(sName,rvOriginal)); end;
//拼接成SQL并插入到数组中
JA.Add('Update '+sTable+' Set '+Copy(sField,,Length(sField)-)+' Where '+Copy(sSQL,,Length(sSQL)) );
end
else if ItemsI[i].RowState in [TFDDatSRowState.rsDeleted] then begin
sSQL:='';
//删除数据关键字段,条件值
for J := to ItemKey.Count- do begin
sValue:=ItemsI[i].GetValues(ItemKey.Strings[j]);
if sValue.Trim<>'' then
sSQL:=sSQL+' And '+ ItemKey.Strings[j]+' = '+QuotedStr(sValue.Trim);
end; //拼接成SQL并插入到数组中
if sSQL<>'' then
JA.Add('Delete '+sTable+' Where '+Copy(sSQL,,Length(sSQL)) );
end;
end;
end;
Result:=JA.ToString;
FreeAndNil(JA);
FreeAndNil(ItemKey);
FreeAndNil(ItemNoField); end; {*******************************************************}
{ }
{ XE7、XE8、XE10 安卓,IOS 框架 }
{ }
{ 版权所有 (C) 2015 打工的程序员 }
{ 日期: 2015.01.15 }
{ 技术服务QQ:2403182533 } { 承接业务:Delphi 相关二次开发,代码维护 }
{ 承接业务:Delphi ERP 维护 }
{ 承接业务:Delphi 安卓、IOS移动开发 } { } { 苹果IOS 技术开发QQ:3156449795 }
{ 苹果账号代申请、苹果开发环境搭建 }
{*******************************************************}

转朋友的,全部用Delphi自带的实现,值得一用。

FDMemTable.Delta 转SQL语句脚本的更多相关文章

  1. 项目总结04:SQL批量导入数据:将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库

    将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库 写在前面:本文用的语言是java:数据库是MySql: 需求:在实际项目中,经常会被客户要求,做批量导入数据:一般的简单的单表数 ...

  2. MySQL workbench8.0 CE基本用法(创建数据库、创建表、创建用户、设置用户权限、创建SQL语句脚本)

    原文地址:https://blog.csdn.net/zgcr654321/article/details/82156277 安装完成MySQL后,打开MySQL workbench8.0. 可以看到 ...

  3. Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)

    Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...

  4. 中间件解析FDMEMTABLE.delta生成SQL的方法

    遍历Delta.DataView.Rows,Delta.DataView.Rows是记录的行集,由行组成 TFDDatSRow,即是一行记录的对象 TFDDatSRow的方法:  GetData(), ...

  5. tcpdump 抓取MySQL SQL语句脚本

    #!/bin/bash#this script used montor mysql network traffic.echo sqltcpdump -i bond0 -s 0 -l -w - dst ...

  6. Shell脚本中执行sql语句操作mysql

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

  7. MSSQLServer基础02(SQL语句入门(脚本、命令))

    SQL 全名是结构化查询语言(Structured Query Language),是关系数据库管理系统的标准语言 SQL语句是和DBMS“交谈”专用的语句,不同DBMS都认SQL语法. SQL语句中 ...

  8. 使用node.js编写脚本将JSON数据转换为SQL语句

    安装依赖模块 当node.js脚本在运行的时候,需要很多支持模块,这些模块存储在node_modules文件夹中.该脚本在执行过程中需要使用到fs.string-format两个支持模块,作用分别是: ...

  9. Loadrunner测试数据库性能,测试SQL语句的脚本例子

    Loadrunner与SQL Server的操作可以通过录制的方式来实现,但本文还是通过直接调用loadrunner本身的function来实现sql语句的操作, 主要用到的是lr_db_connec ...

随机推荐

  1. jQuery object and DOM Element

    They're both objects but DOMElements are special objects. jQuery just wraps DOMElements in a Javascr ...

  2. 【TCP/IP详解 卷一:协议】第二章:链路层

    2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...

  3. 【Coursera】Third Week(1)

    The Early World-Wide-Web 关于CERN 欧洲核子研究组织,除了它为世界物理学所作出的卓越贡献,它还是世界上第一个网站,第一个网络服务器,第一个浏览器的诞生地. Robert C ...

  4. codeforces 251 div2 D. Devu and his Brother 三分

    D. Devu and his Brother time limit per test 1 second memory limit per test 256 megabytes input stand ...

  5. Linux常用命令 查找文件

    Linux搜索命令:find / -name 'nginx'  搜索根目录下文件名为‘nginx’的文件夹 .find / -name 'nginx.conf' 搜索根目录下文件名为‘nginx.co ...

  6. SQLSERVER 对于非dbo的表增加注释

    平时我们创建表的时候总是dbo.imsi_collect_state,但是有时候为了方便管理我们可能会创建架构wifi,那么表名就是wifi.imsi_collect_state 原来增加注释的方式是 ...

  7. 个人学期总结及Python+Flask+MysqL的web建设技术过程

    一个学期即将过去,我们也迎来了2018年.这个学期,首次接触了web网站开发建设,不仅是这门课程,还有另外一门用idea的gradle框架来制作网页. 很显然,用python语言的flask框架更加简 ...

  8. HTML提交方式post和get区别(实验)

    HTML提交方式post和get区别(实验) 一.post和get区别 get提交,提交的信息都显示在地址栏中. post提交,提交的信息不显示地址栏中,显示在消息体中. 二.客户端代码 <!D ...

  9. springboot集成mybatis及mybatis generator工具使用

    原文链接 前言mybatis是一个半自动化的orm框架,所谓半自动化就是mybaitis只支持数据库查出的数据映射到pojo类上,而实体到数据库的映射需要自己编写sql语句实现,相较于hibernat ...

  10. 删除php数组中的元素

    删除一个元素,且保持原有索引不变 使用 unset 函数,示例如下: <?php $array = array(0 => "a", 1 => "b&qu ...