delphi FDMemTable.Delta 转SQL语句脚本  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 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 := 0 to Count-1 do  begin


      //判断数据的操作状态 :插入

      if ItemsI[i].RowState=TFDDatSRowState.rsInserted then begin


        //循环对应的数据字段

        for j := 0 to DB.Fields.Count-1 do begin

          //获取字段名称

          sName:=DB.Fields[J].FieldName;


          //排除不需要插入的字段信息

          if ItemNoField.IndexOf(sName)>-1 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:='1'

              else

                sTmp:='0';

            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,1,Length(sField)-1)+')'+#13#10

          +' Values('+Copy(sValue,1,Length(sValue)-1)+')'+#13#10 ) ;


      end

      //判断数据的操作状态 :修改

      else if ItemsI[i].RowState in [TFDDatSRowState.rsModified,

        TFDDatSRowState.rsEditing] then begin


        for j := 0 to DB.Fields.Count-1 do begin

          sName:=DB.Fields[J].FieldName;


          //排除不需要插入的字段信息

          if ItemNoField.IndexOf(sName)>-1 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:='1'

              else

                sTmp:='0';

            end;

            else

             sTmp:=VarToStr(ItemsI[i].GetValues(sName)).QuotedString;

          end;

          //累积更新字段值

          sField:=sField+sName+'='+sTmp+',';


          //修改数据关键字段,条件值

          if ItemKey.IndexOf(sName)>-1 then

            sSQL:=sSQL+' And '+ sName+' = '+VarToStr(ItemsI[i].GetData(sName,rvOriginal));


        end;

        //拼接成SQL并插入到数组中

        JA.Add('Update '+sTable+' Set '+Copy(sField,1,Length(sField)-1)+' Where '+Copy(sSQL,5,Length(sSQL)) );

      end

      else if ItemsI[i].RowState in [TFDDatSRowState.rsDeleted] then begin

        sSQL:='';

        //删除数据关键字段,条件值

        for J := 0 to ItemKey.Count-1 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,5,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                 }

{         苹果账号代申请、苹果开发环境搭建              }

{*******************************************************}

-----------------------------------


https://blog.51cto.com/kinglandsoft/3225019



推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.039834976196289 seconds