Advertisement
TLama

Untitled

Nov 8th, 2013
351
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.82 KB | None | 0 0
  1. uses
  2.   TypInfo;
  3.  
  4. function GenerateInsertQuery(const Table: string; ADOQuery: TADOQuery;
  5.   UseParamByName: Boolean = True): string;
  6. var
  7.   I: Integer;
  8.   SQLValues: string;
  9.   SQLColumns: string;
  10.   CodeParams: string;
  11. const
  12.   Separator = ', ';
  13. begin
  14.   if ADOQuery.Fields.Count = 0 then
  15.     raise Exception.Create('ADOQuery has no field definitions!');
  16.  
  17.   SQLValues := '';
  18.   SQLColumns := '';
  19.   CodeParams := '';
  20.  
  21.   for I := 0 to ADOQuery.Fields.Count - 1 do
  22.   begin
  23.     SQLValues := SQLValues + ':' + ADOQuery.Fields[I].FieldName + Separator;
  24.     SQLColumns := SQLColumns + ADOQuery.Fields[I].FieldName + Separator;
  25.     if not UseParamByName then
  26.     begin
  27.       CodeParams := CodeParams + Format('  %s.Parameters[%d].Value := %s;', [ADOQuery.Name,
  28.         I, Copy(GetEnumName(TypeInfo(TFieldType), Integer(ADOQuery.Fields[I].DataType)), 3,
  29.         MaxInt) + 'ValueGoesHere']) + sLineBreak;
  30.     end
  31.     else
  32.     begin
  33.       CodeParams := CodeParams + Format('  %s.Parameters.ParamByName(''%s'').Value := %s;',
  34.         [ADOQuery.Name, ADOQuery.Fields[I].FieldName, Copy(GetEnumName(TypeInfo(TFieldType),
  35.         Integer(ADOQuery.Fields[I].DataType)), 3, MaxInt) + 'ValueGoesHere']) + sLineBreak;
  36.     end;
  37.   end;
  38.  
  39.   Delete(SQLValues, Length(SQLValues) - Length(Separator) + 1, Length(Separator));
  40.   Delete(SQLColumns, Length(SQLColumns) - Length(Separator) + 1, Length(Separator));
  41.   Delete(CodeParams, Length(CodeParams) - Length(sLineBreak) + 1, Length(sLineBreak));
  42.  
  43.   Result := 'var' + sLineBreak + '  ' + 'SQLQuery: string;' + sLineBreak + 'begin' + sLineBreak;
  44.   Result := Result + '  SQLQuery := ';
  45.   Result := Result + Format('''INSERT INTO %s (%s) VALUES (%s);'';', [Table, SQLColumns,
  46.     SQLValues]) + sLineBreak + sLineBreak;
  47.   Result := Result + CodeParams;
  48.   Result := Result + sLineBreak + 'end;';
  49. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement