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;
最新文章
- 《Qt Quick 4小时入门》学习笔记4
- 在CentOS上安装并运行SparkR
- centos 命令集合
- 网络爬虫3-使用LIB_http库
- 如何在命令行模式下查看Python帮助文档---dir、help、__doc__
- android 启动第三方程序的代码
- cf472D Design Tutorial: Inverse the Problem
- MySQL 复制
- Jquery CSS 与 Attr
- [USACO09MAR]地震损失2Earthquake Damage 2
- adb命令集合
- 前端-JavaScript1-4——JavaScript之变量
- English trip EM2-LP-1A Hi Teacher:Taylor
- BP神经网络的理论理论常识
- 人生苦短之我用Python篇(socket编程)
- virtual memory exhausted: Cannot allocate memory 解决方法
- 教你用 jVectorMap 制作属于自己的旅行足迹
- Java使用POI导出excel(下)——实例与小技巧
- Spartan-6 FPGA Configuration
- 使用ASP.NET 的缓存机制的示例