تحويل مجموعة بيانات الاستعلام ClientDataSet في دلفي
سؤال
وأنا الاستفادة من مكونات 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 بحيث لا أستطيع أن اختبار قد تحتوي على الرمز جيدا أخطاء، ولكن يعمل الفكرة العامة.)
لا تنتمي إلى StackOverflow