FDMemTable.Delta 转SQL语句脚本
{*******************************************************}
{ }
{ 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语句脚本的更多相关文章
- 项目总结04:SQL批量导入数据:将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库
将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库 写在前面:本文用的语言是java:数据库是MySql: 需求:在实际项目中,经常会被客户要求,做批量导入数据:一般的简单的单表数 ...
- MySQL workbench8.0 CE基本用法(创建数据库、创建表、创建用户、设置用户权限、创建SQL语句脚本)
原文地址:https://blog.csdn.net/zgcr654321/article/details/82156277 安装完成MySQL后,打开MySQL workbench8.0. 可以看到 ...
- Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)
Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...
- 中间件解析FDMEMTABLE.delta生成SQL的方法
遍历Delta.DataView.Rows,Delta.DataView.Rows是记录的行集,由行组成 TFDDatSRow,即是一行记录的对象 TFDDatSRow的方法: GetData(), ...
- tcpdump 抓取MySQL SQL语句脚本
#!/bin/bash#this script used montor mysql network traffic.echo sqltcpdump -i bond0 -s 0 -l -w - dst ...
- Shell脚本中执行sql语句操作mysql
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
- MSSQLServer基础02(SQL语句入门(脚本、命令))
SQL 全名是结构化查询语言(Structured Query Language),是关系数据库管理系统的标准语言 SQL语句是和DBMS“交谈”专用的语句,不同DBMS都认SQL语法. SQL语句中 ...
- 使用node.js编写脚本将JSON数据转换为SQL语句
安装依赖模块 当node.js脚本在运行的时候,需要很多支持模块,这些模块存储在node_modules文件夹中.该脚本在执行过程中需要使用到fs.string-format两个支持模块,作用分别是: ...
- Loadrunner测试数据库性能,测试SQL语句的脚本例子
Loadrunner与SQL Server的操作可以通过录制的方式来实现,但本文还是通过直接调用loadrunner本身的function来实现sql语句的操作, 主要用到的是lr_db_connec ...
随机推荐
- 初探 Yii2 的测试模式 index-test.php
有没有发现高级版每个应用的 web 目录下有两个入口文件,一个index.php 一个 index-test.php通过init.bat可以切换到调试模式和产品模式,这两个模式相信同学们都很熟悉了,那 ...
- C# ashx接收ContentType="text/xml"类型值
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain&qu ...
- UOJ #56. 【WC2014】非确定机
题意大意:给出一个输出文件,求输入. 1.满足所求的输入文件是一张图,n个点,m条边,所用算法是k(k在给出的输出文件中给出了) 2.算法是图论算法?!k基本上→两位数组成,若十位数相同,说明基本算法 ...
- Java I/O学习 文件读写工具
import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import jav ...
- C++:为什么unique_ptr的Deleter是模板类型参数,而shared_ptr的Deleter不是?
为什么unique_ptr的Deleter是模板类型参数,而shared_ptr的Deleter不是? template <class T, class D = default_delete&l ...
- 《Robot Framework自动化测试修炼宝典》道长
1. Python下载https://www.python.org/downloads 2. Setuptools下载https://pypi.python.org/pypi/setuptools用原 ...
- 转载:理解RESTful架构
http://www.ruanyifeng.com/blog/2011/09/restful.html 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件" ...
- MongoDB(课时3 MongoDB基本操作)
3.3 MongoDB的基本操作 在MongoDB数据库里面存在数据库的概念,但没有模式(所有的信息都是按照文档保存的),保存数据的结构是BSON结构,只不过在进行一些数据处理的时候才会使用到Mong ...
- 【转】cs231n学习笔记-CNN-目标检测、定位、分割
原文链接:http://blog.csdn.net/myarrow/article/details/51878004 1. 基本概念 1)CNN:Convolutional Neural Networ ...
- npm 用 淘宝代理
1.先强制清缓存 npm cache clean --force 2.运行的npm的指令走的淘宝代理 npm install -g cnpm --registry=https://registry. ...