zoukankan      html  css  js  c++  java
  • clientDataSet转换sql

    ReadMe

    新版本delphi,可以用string类型,旧版本需要用widestring

    ===========================================

    function TFRMSOEDIT.vartosql(value: Variant): wideString;
    var
    tmp: widestring;
    begin
    if (varisnull(value)) or (varisempty(value)) then
    Result := 'NULL'
    else
    case Vartype(value) of
    varDate:
    begin
    tmp := formatDatetime('yyyy-mm-dd hh:mm:ss', VartoDatetime(value));
    Result := Quotedstr(tmp);
    end;
    varString, varOlestr:
    Result := Quotedstr(Trim(Vartostr(value)));
    varboolean:
    begin
    if value then
    Result := '1'
    else
    Result := '0';
    end;
    varSmallint, varInteger, varDouble, varShortInt, varInt64, varLongWord, varCurrency:
    begin
    Result := trim(Vartostr(value));
    end;
    else
    Result := Quotedstr(Trim(Vartostr(value)));
    end;
    end;

    function TFRMSOEDIT.GetCdsDetailSsql(cdsDelta: THxDataSet; TableName, KeyField, vWhere: WideString): WideString;
    var
    i: integer;
    s1, s2: string;
    CmdStr: string;
    lcds: THxDataSet;
    begin
    Result := '';
    if (not cdsDelta.Active) and (cdsDelta.ChangeCount <= 0) then
    Exit;
    CmdStr := 'select * from ' + TableName + ' where 1=2';
    lcds := THxDataSet.Create(nil);
    lcds.Data := cdsDelta.Delta;
    for i := 1 to lcds.FieldCount do
    if cdsDelta.FindField(lcds.Fields[i - 1].FieldName) <> nil then
    cdsDelta.FindField(lcds.Fields[i - 1].FieldName).Tag := 1;
    lcds.Close;
    if cdsDelta.RecordCount > 0 then
    begin
    cdsDelta.First;
    s1 := '';
    s2 := '';
    while not cdsDelta.Eof do
    begin
    CmdStr := '';
    case cdsDelta.UpdateStatus of
    usUnmodified:
    begin
    s2 := VarToSql(cdsDelta[KeyField]);
    end;
    usModified:
    begin
    s1 := '';
    s2 := ' where ' + KeyField + '=' + VarToSql(cdsDelta[KeyField]);
    for i := 1 to cdsDelta.FieldCount do
    // if (not cdsDelta.Fields[i - 1].IsNull) and (cdsDelta.Fields[i - 1].Tag = 1) then
    if (not cdsDelta.Fields[i - 1].IsBlob) and (not VarIsArray(cdsDelta.Fields[i - 1].value)) then
    begin
    if (cdsDelta.Fields[i - 1].NewValue <> Variants.Unassigned) and (cdsDelta.Fields[i - 1].Tag = 1) and (cdsDelta.Fields[i - 1].OldValue <> cdsDelta.Fields[i - 1].NewValue) then
    begin
    s1 := s1 + #13#10 + ' update ' + TableName + ' set ' + Trim(cdsDelta.Fields[i - 1].FieldName) + ' = ' + VarToSql(cdsDelta.Fields[i - 1].NewValue) + s2;


    end;
    end;
    CmdStr := s1;
    end;
    usInserted:
    begin
    s1 := '';
    s2 := '';
    for i := 1 to cdsDelta.FieldCount do
    if not cdsDelta.Fields[i - 1].IsBlob then
    if (not cdsDelta.Fields[i - 1].IsNull) and (cdsDelta.Fields[i - 1].Tag = 1) then
    begin
    if s1 = '' then
    begin
    s1 := Trim(cdsDelta.Fields[i - 1].FieldName);
    s2 := VarToSql(cdsDelta.Fields[i - 1].value);
    end
    else
    begin
    s1 := s1 + ',' + Trim(cdsDelta.Fields[i - 1].FieldName);
    s2 := s2 + ',' + VarToSql(cdsDelta.Fields[i - 1].value);
    end;
    end;
    if s1 <> '' then
    begin
    CmdStr := 'insert into ' + TableName + '(' + s1 + ') Values (' + s2 + ')';
    end;
    end;
    usDeleted:
    begin
    s2 := VarToSql(cdsDelta[KeyField]);
    CmdStr := 'delete from ' + TableName + ' Where ' + KeyField + ' = ' + s2;
    end;
    end;
    Result := Result + CmdStr + #13#10;
    cdsDelta.Next;
    end;
    end;
    FreeAndNil(lcds);
    end;

  • 相关阅读:
    使用sublimehighlight 将文本 转化html
    iOS- 制作U盘安装Mac OS X 系统
    垃圾回收的常见算法
    jvm的三种参数类型
    HashMap遍历取值
    不要在 foreach 循环里进行元素的 remove/add 操作
    Arrays.asList()使用指南
    正确使用 equals 方法
    elasticsearch安装与配置(在Linux环境下配置)
    本地访问Linux里端口连接失败
  • 原文地址:https://www.cnblogs.com/zyb2016/p/11592393.html
Copyright © 2011-2022 走看看