Mega Code Archive

 
Categories / Delphi / Ide Indy
 

Pointerın üzerinde bulunduğu recordun bir kopyasını çıkarır ve post onayını bekler

{ Pointer'ın üzerinde bulunduğu Record'un bir kopyasını çıkarır ve Post onayını bekler Kullanımı : KayitCogalt(Table1); fatihbs@hotmail.com } procedure TForm1.KayitCogalt(DataSeti : TDataSet); var StrBuffer: TStringList; FieldStream: TMemoryStream; I: integer; begin StrBuffer := TStringList.Create; try with DataSeti do begin for I := 0 to FieldCount - 1 do with Fields[I] do if DataType in [ftString..ftDateTime] then StrBuffer.Add(AsString) else if DataType in [ftBytes..ftGraphic] then begin FieldStream := TMemoryStream.Create; if (Fields[I] is TMemoField) then TMemoField(Fields[I]).SaveToStream(FieldStream) else if (Fields[I] is TGraphicField) then TGraphicField(Fields[I]).SaveToStream(FieldStream) else if (Fields[I] is TBlobField) then TBlobField(Fields[I]).SaveToStream(FieldStream) else if (Fields[I] is TBytesField) then begin FieldStream.SetSize(Fields[I].DataSize); TBytesField(Fields[I]).GetData(FieldStream.Memory); end else if (Fields[I] is TVarBytesField) then begin FieldStream.SetSize(Fields[I].DataSize); TVarBytesField(Fields[I]).GetData(FieldStream.Memory); end; StrBuffer.AddObject(IntToStr(FieldStream.Size), FieldStream); end; Append; for I := 0 to FieldCount - 1 do if Fields[I].DataType in [ftString..ftDateTime] then Fields[I].AsString := StrBuffer.Strings[I] else if Fields[I].DataType in [ftBytes..ftGraphic] then begin FieldStream := TMemoryStream(StrBuffer.Objects[I]); FieldStream.Seek(0,0); if (Fields[I] is TMemoField) then TMemoField(Fields[I]).LoadFromStream(FieldStream) else if (Fields[I] is TGraphicField) then TGraphicField(Fields[I]).LoadFromStream(FieldStream) else if (Fields[I] is TBlobField) then TBlobField(Fields[I]).LoadFromStream(FieldStream) else if (Fields[I] is TBytesField) then begin TBytesField(Fields[I]).SetData(FieldStream.Memory); end else if (Fields[I] is TVarBytesField) then TVarBytesField(Fields[I]).SetData(FieldStream.Memory); StrBuffer.Objects[I] := nil; FieldStream.Free; end; end; finally if StrBuffer <> nil then for I := 0 to StrBuffer.Count - 1 do if StrBuffer.Objects[I] <> nil then begin FieldStream := TMemoryStream(StrBuffer.Objects[I]); FieldStream.Free; StrBuffer.Objects[I] := nil; end; StrBuffer.Free; end; end;