تحويل مجموعة بيانات الاستعلام ClientDataSet في دلفي

StackOverflow https://stackoverflow.com/questions/405065

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا الاستفادة من مكونات Mydac التي كتبها devart (corelab) للوصول إلى الخلية من دلفي (2006) في كثير من الأحيان ولست بحاجة للعمل مع البيانات في TClientDataSet ما هو أفضل وسيلة لتحويل بيانات من TMyQuery إلى TClientDataSet حاليا أنا أستخدم

var
    MyQuery : TMyQuery;
    Dsp     : TDataSetProvider;
    Cds     : TClientDataSet;
begin
    MyQuery := nil;
    Dsp     := nil;
    Cds     := nil;
    try
        MyQuery            := TMyQuery.Create(nil);
        Dsp                := TDataSetProvider.Create(nil);
        Cds                := TClientDataSet.Create(nil);
        MyQuery.Connection := TheConnection;
        MyQuery.SQL.Text   := CmdStr;
        Dsp.DataSet := MyQuery;
        Cds.SetProvider(Dsp);
        Cds.Open;
        ////////////////////////////////////////////////////////////////////////
        ///                  MAKE USES OF THE CDS                             //
        ////////////////////////////////////////////////////////////////////////
    finally
        FreeAndNil(Cds);
        FreeAndNil(Dsp);
        FreeAndNil(MyQuery);
    end;
end;

هل هناك طريقة أفضل للقيام بذلك؟

هل كانت مفيدة؟

المحلول

إذا كنت حقا بحاجة هذا في كثير من الأحيان، ثم جعلها وظيفة، كما يلي:

function CreateAndOpenClientDataset(AOwner: TComponent;
  AConnection: TConnection; ACommand: string): TClientDataSet;
var
  MyQuery: TMyQuery;
  Dsp: TDataSetProvider;
begin
  Result := TClientDataSet.Create(AOwner);
  try
    MyQuery := TMyQuery.Create(Result);
    MyQuery.Connection := AConnection;
    MyQuery.SQL.Text := ACommand;

    Dsp := TDataSetProvider.Create(Result);
    Dsp.DataSet := MyQuery;

    Result.SetProvider(Dsp);
    Result.Open;
  except
    Result.Free;
    raise;
  end;
end;

وهذه الوظيفة التي يمكن استخدامها في جميع الأماكن بدلا من TClientDataSet.Create ()، وما لم يتم رفع استثناء سوف تعطى لTClientDataSet المفتوحة التي تملك وبهذه الطريقة تحرر أيضا اثنين من الكائنات المساعد.

و(ملاحظة: أنا فقط استخدام مكونات DevArt لMS SQL Server بحيث لا أستطيع أن اختبار قد تحتوي على الرمز جيدا أخطاء، ولكن يعمل الفكرة العامة.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top