![]() |
|
التعامل مع قاعدة بيانات MongoDB باستخدام مكونات FireDAC في Delphi - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : دروس دلفي للمبتدئين (https://delphi4arab.net/forum/forumdisplay.php?fid=13) +--- الموضوع : التعامل مع قاعدة بيانات MongoDB باستخدام مكونات FireDAC في Delphi (/showthread.php?tid=12924) |
التعامل مع قاعدة بيانات MongoDB باستخدام مكونات FireDAC في Delphi - الفجر الابيض - 03-05-2025 للتعامل مع قاعدة بيانات MongoDB باستخدام مكونات FireDAC في Delphi، يمكنك تنفيذ عمليات CRUD (إنشاء، قراءة، تحديث، حذف) على البيانات المخزنة بتنسيق JSON داخل مستندات MongoDB. المتطلبات الأساسية
إعداد الاتصال بـ MongoDB في Delphi، يمكنك استخدام مكونات FireDAC للاتصال بـ MongoDB. إليك كيفية إعداد الاتصال:
كود : FDConnection1.Params.Clear;
FDConnection1.Params.Add('DriverID=Mongo');
FDConnection1.Params.Add('Server=localhost');
FDConnection1.Params.Add('Port=27017');
FDConnection1.Params.Add('Database=test');
FDConnection1.Connected := True;تأكد من استبدال كود : localhostكود : testتنفيذ عمليات CRUD1. إضافة مستند جديد (Create): كود : var
MongoDoc: TgoBsonDocument;
begin
MongoDoc := TgoBsonDocument.Create;
try
MongoDoc.Add('name', 'John Doe');
MongoDoc.Add('age', 30);
FDConnection1.CliObj['test']['users'].InsertOne(MongoDoc);
finally
MongoDoc.Free;
end;
end;2. قراءة المستندات (Read): كود : var
Cursor: IMongoCursor;
Doc: TgoBsonDocument;
begin
Cursor := FDConnection1.CliObj['test']['users'].Find;
while Cursor.Next do
begin
Doc := Cursor.Current;
ShowMessage(Doc.AsJSON);
end;
end;3. تحديث مستند (Update): كود : var
Filter, UpdateDoc: TgoBsonDocument;
begin
Filter := TgoBsonDocument.Create.Add('_id', 'some_id');
UpdateDoc := TgoBsonDocument.Create.Add('$set', TgoBsonDocument.Create.Add('age', 31));
FDConnection1.CliObj['test']['users'].UpdateOne(Filter, UpdateDoc);
end;4. حذف مستند (Delete): كود : var
Filter: TgoBsonDocument;
begin
Filter := TgoBsonDocument.Create.Add('_id', 'some_id');
FDConnection1.CliObj['test']['users'].DeleteOne(Filter);
end;التعامل مع الجداول المترابطة في MongoDB، تُخزن البيانات المترابطة عادةً داخل مستندات فرعية أو مصفوفات. على سبيل المثال، لتخزين معلومات العنوان داخل مستند المستخدم: كود : var
UserDoc, AddressDoc: TgoBsonDocument;
begin
AddressDoc := TgoBsonDocument.Create;
AddressDoc.Add('street', '123 Main St');
AddressDoc.Add('city', 'Anytown');
AddressDoc.Add('zip', '12345');
UserDoc := TgoBsonDocument.Create;
UserDoc.Add('name', 'Jane Doe');
UserDoc.Add('address', AddressDoc);
FDConnection1.CliObj['test']['users'].InsertOne(UserDoc);
end;للاستعلام عن بيانات مترابطة، يمكنك استخدام الاستعلامات المدمجة: كود : var
Cursor: IMongoCursor;
Doc: TgoBsonDocument;
begin
Cursor := FDConnection1.CliObj['test']['users'].Find;
while Cursor.Next do
begin
Doc := Cursor.Current;
ShowMessage(Doc.GetValue('name').AsString + ' - ' +
Doc.GetValue('address').AsDocument.GetValue('city').AsString);
end;
end;لعرض بيانات MongoDB في مكون DBGrid في Delphi باستخدام FireDAC، تحتاج إلى تحويل نتائج الاستعلام من MongoDB إلى مصدر بيانات يفهمه DBGrid مثل TFDMemTable. لأن MongoDB لا يُرجع نتائج على شكل جدول مباشرةً، يجب أن تقوم بهذه العملية يدويًا أو باستخدام TFDAdaptedDataSet. 1. إضافة المكونات إلى النموذج ضع هذه المكونات على النموذج (Form): TFDConnection (الاتصال بقاعدة MongoDB) TFDPhysMongoDriverLink (لربط FireDAC بمونغو) TFDMemTable (لتخزين البيانات مؤقتًا) TDataSource (لربط TFDMemTable بـ DBGrid) TDBGrid (لعرض البيانات) 2. ربط المكونات DataSource1.Dataset := FDQuery1 أو FDMemTable1 DBGrid1.DataSource := DataSource1 3. جلب البيانات من MongoDB إلى TFDMemTable كود : uses
FireDAC.Comp.Client, System.JSON, FireDAC.Stan.Param, FireDAC.Stan.StorageBin,
FireDAC.Comp.DataSet, FireDAC.Stan.StorageJSON, Data.DB, FireDAC.Stan.Intf;
procedure TForm1.LoadMongoDataToGrid;
var
Cursor: IMongoCursor;
Doc: TgoBsonDocument;
begin
FDMemTable1.DisableControls;
FDMemTable1.Close;
FDMemTable1.Fields.Clear;
FDMemTable1.FieldDefs.Clear;
Cursor := FDConnection1.CliObj['test']['users'].Find;
// تعريف الحقول يدويًا بناءً على البيانات
FDMemTable1.FieldDefs.Add('name', ftString, 100);
FDMemTable1.FieldDefs.Add('age', ftInteger);
FDMemTable1.CreateDataSet;
while Cursor.Next do
begin
Doc := Cursor.Current;
FDMemTable1.Append;
FDMemTable1.FieldByName('name').AsString := Doc.Values['name'].AsString;
FDMemTable1.FieldByName('age').AsInteger := Doc.Values['age'].AsInteger;
FDMemTable1.Post;
end;
FDMemTable1.EnableControls;
end;4. استدعاء الإجراء في FormCreate أو زر كود : procedure TForm1.FormCreate(Sender: TObject);
begin
FDConnection1.Connected := True;
LoadMongoDataToGrid;
end;ملاحظات: يمكنك تعديل الحقول بحسب البنية الحقيقية للـ Document في MongoDB. إذا كان لديك حقول داخلية (مثل address.city)، فستحتاج إلى الوصول إليها باستخدام AsDocument.GetValue(...). لتحديث البيانات في DBGrid بعد إضافة أو حذف، استدعِ LoadMongoDataToGrid مرة أخرى. |