Advertisement
Guest User

Untitled

a guest
Aug 12th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.59 KB | None | 0 0
  1. function TAqSqlCommandUpsertEngine.GenerateScritps: IAqSqlCommandUpsertEngine;
  2. var
  3.   lField: TField;
  4.   lIndex: Integer;
  5. begin
  6.   Result := Self;
  7.  
  8.   fCommands.Clear;
  9.  
  10.   fDataset.DataSet.First;
  11.   while fDataset.NotEof do
  12.   begin
  13.     fCommands.AppendFormat('UPDATE OR INSERT INTO %s (%s) VALUES (', [fTable, fCacheFields]);
  14.     for lIndex := 0 to Pred(fCacheFieldsList.Count) do
  15.     begin
  16.       lField := fDataset.DataSet.FindField(fCacheFieldsList[lIndex]);
  17.       case lField.DataType of
  18.         ftSmallint, ftSingle, ftInteger, ftWord, ftShortint:
  19.           fCommands.Append(TAqUtils.IIF<Int32>(lField.AsString, lField.AsInteger, 0));
  20.         ftLargeint:
  21.           fCommands.Append(TAqUtils.IIF<Int64>(lField.AsString, lField.AsLargeInt, 0));
  22.         ftFMTBcd, ftExtended, ftFloat, ftCurrency, ftBCD:
  23.           fCommands.Append(lField.AsFloat);
  24.         ftDate:
  25.           fCommands.Append(QuotedStr(FormatDateTime('yyyy-mm-dd', lField.AsDateTime)));
  26.         ftTime:
  27.           fCommands.Append(QuotedStr(FormatDateTime('hh:nn:ss', lField.AsDateTime)));
  28.         ftDateTime, ftTimeStamp:
  29.           fCommands.Append(QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', lField.AsDateTime)));
  30.         ftString, ftWideString, ftMemo:
  31.           fCommands.Append(QuotedStr(lField.AsString));
  32.       else
  33.         fCommands.Append('NULL');
  34.       end;
  35.  
  36.       if lIndex < Pred(fCacheFieldsList.Count) then
  37.         fCommands.Append(', ');
  38.     end;
  39.     fCommands.Append(')');
  40.  
  41.     if not fMatching.IsEmpty then
  42.       fCommands.AppendFormat(' MATCHING (%s)', [fMatching]);
  43.  
  44.     fCommands.Append(';');
  45.   end;
  46. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement