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 ...
随机推荐
- session的理解和使用
Session的使用与Session的生命周期 1.HttpSession的方法 Object getAttribute(String); Enumeration<String> getA ...
- Unity3d 常用的方法
1.创建物体 2.加载物体 3.寻找物体 4.添加脚本 1.创建物体 GameObject go; // Use this for initialization void Start () { go ...
- 【Python】【元编程】【从协议到抽象基类】
"""class Vector2d: typecode = 'd' def __init__(self,x,y): self.__x = float(x) self.__ ...
- ng-model 数据不更新 及 ng-repeat【ngRepeat:dupes】错误
一.ng-include 引入的文件中 ,ng-model 数据不更新 例如, $scope.username = “Jones” .此时,在 ng-include 引入的文件中,直接使用 ng-m ...
- python 压缩tar 包
import tarfile import os def make_targz(output_filename, source_dir): print("doing!") with ...
- python 分数的数学四则运算
import fractions f1 = fractions.Fraction(, ) f2 = fractions.Fraction(, ) print('{} + {} = {}'.format ...
- 如何学好Java大数据并快速提升
Java作为一种最流行的,最热门的编程语言,可以说它无处不在,目前全球有着数十亿的设备正在运行着Java,很多服务器程序都是用Java编写,用以处理每天超过数以千万的数据.无论是手机软件.手机Java ...
- 【Golang】格式化JSON字符串,方便查看
分别介绍golang及Python格式化接口返回JSON数据的方法,及Python json.dumps方法出现NameError: name 'true' is not defined原因解析及解决 ...
- Codeforces 798A - Mike and palindrome
A. Mike and palindrome time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- C#中使用Log4记录日志
具体步骤如下: 从网上下载log4net对应.net版本的dll 在C#项目中引用该dll 创建log4net对应的配置文件 在程序中使用 log4net的配置文件如下: <?xml versi ...