Merhabalar,
Bu yazıda , Delphi Projenize Google Firebase Database Entegrasyonunu nasıl yapacağınızdan bahsedeceğim.
Firebase Google Amcanın bize sunduğu çok güzel kısmi ücretsiz, harika özellikler barındıran bir proje, biz bu yazımızda Realtime Database özelliğini kullanacağız.
Realtime Database aylık 10GB veriye kadar ücretsizdir , bu sebebten basit projelerinizde ücretsiz olarak bu canlı veritabanından neden yararlanmayalım.
İşimize Google Firebase Database oluşturmakla başlayacağız , öncelikle aşağıdaki linkten yeni bir proje oluşturalım.
https://console.firebase.google.com
Resimler ile nasıl yapabileceğinizi adım adım gösterelim..

İlk adım yeni proje oluşturma




Projemiz oluşturuldu ve kullanma hazır.
Şimdi veritabanı oluşturuyoruz.
Resimler ile devam…


İlk olarak public şekilde ayarlayabiliriz , sonradan kilitli moda alabiliriz.
Public şekilde olsa da Database Key olmadan kimse verilerini okuyamaz değiştiremez. Test modunda olması verilerinizi herkesin görebileceği anlamına gelmiyor yani bu konuya daha sonra detaylı değinirim.

Bildiğiniz üzere Google amcanın bir çok ülkede Server’leri var , burada sizden bir bölge seçmenizi istiyor, size en yakın bölgeyi seçmeniz hız bakımından avantaj sağlayacaktır.
Sizin bu seçeneği değiştirmenize gerek yok google amca size en uygun bölgeyi kendisi otomatik seçiyor zaten.

Yukarıda Bitti dedikten sonra, size database ekranını açacak.

Bizim şimdi database’in secret keyine ve databaseurl’sine ihtiyacımız var.
Google her proje için bir domain verir bizlere, buna databaseurl denir.
Yukarıdaki gibi Ayarlar simgesine, daha sonra Kullanıcı ve İzinler butonuna tıklıyoruz.

Açılan pencerede, Hizmet Hesapları sekmesine gelerek , Veritabanı Gizli Anahtarı Sekmesine tıklayın, Aşağıdaki gizli anahtarı alarak bir kenara kaydedin.

Sırada ihtiyacımız olan, Database Url’i almak için yukarıdaki gibi Uygulama ekliyoruz ,

Uygulamanıza isim verin ve devam edin.

Google SDK’mızı ayarlayıp bize Database Url’imizi verdi , şimdi bunu da bir kenara kaydediyoruz.

Şimdi yeni bir Koleksiyon başlatmamız gerekiyor, bir tablo adı gibi düşünebilirsiniz.


Buraya Doğrudan Otomatik Kimlik butotuna tıklayarak kaydedin.
Database’imiz hazır diyebiliriz, buradan sonra tablo fieldleri ayarlamanıza gerek yok , buraya nasıl bir json post ederseniz otomatik o şekilce bir tablo oluşacaktır.
Database’imizde şu işlemleri yapabiliriz.
- Post (Insert Data – Veri Kaydetme)
- Put (Update Data – Veri Güncelleme)
- Delete (Delete Data – Veri Silme)
- Get (Get Data – Veri Listeleme / Gösterme)
Sırasıyla bu işlemleri yapacağız.
Örneğin delphi versiyonlarını saklayacağımız bir veritabanı olsun bu.


Minik bir Delphi uygulaması ile gösterelim , bu uygulamanın kodlarını ve Kaynak Dosyasını yazının en sonunda sizlerle paylaşacağım.
Request Body’de gördüğünüz json verisini, Yukarıda açtığımız DelphiDb.json database’mizie post ettiğimizde canlı olarak verimizin kaydolduğunu Realtime database menüsünden gözlemleyebiliyoruz.

Ve Realtime Database sekmesinden izlediğimizde post eder etmez , verimizi benzersiz uniqe bir ıd ile kaydolduğunu gözlüyoruz ve response olarak bize bu benzersiz id’yi dönüyor veritabanımız.

Sırasıyla 4 versiyonu database’imize bu şekilde kaydettik.
Buradan sonrasını video ile göstermem daha iyi olur sanırım.
aşağıdaki video’dan yukarıdaki 4 işlemi canlı olarak nasıl gerçekleştirdiğimi görebilirsiniz.
Proje Dosyası Kodları
FirebaseDatabase.pas
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
unit FirebaseDatabase; interface uses System.Classes, clHttp, clHttpRequest, System.SysUtils; type TFirebase = class(TObject) public SecretKey: String; ProjectUrl: String; procedure Delete(Database: string); procedure Put(Database, Data: string); function Post(Database, Data: string): String; function Get(Database: string): String; end; implementation { TFirebase } procedure TFirebase.Delete(Database: string); var FireBase: TclHttp; begin FireBase := TclHttp.Create(nil); try // Post Url : https://delphifirebase-demo.firebaseio.com/DelphiDb/-Lmnhs0f6jE22p2H_Jz4.json?auth=guPhITQseHczlGqZgG6CnNTV2nqY1n7gfccX2NlO FireBase.Delete(ProjectUrl + Database + '?auth=' + SecretKey); finally if Assigned(FireBase) then FreeAndNil(FireBase); end; end; function TFirebase.Get(Database: string): String; var Response: TMemoryStream; FireBase: TclHttp; Ts: TStringList; begin Response := TMemoryStream.Create; FireBase := TclHttp.Create(nil); Ts := TStringList.Create; try // Post Url : https://delphifirebase-demo.firebaseio.com/DelphiDb.json?auth=guPhITQseHczlGqZgG6CnNTV2nqY1n7gfccX2NlO FireBase.Get(ProjectUrl + Database + '?auth=' + SecretKey, Response); Response.Position := 0; Ts.LoadFromStream(Response, TEncoding.UTF8); Result := Ts.Text; finally if Assigned(Ts) then FreeAndNil(Ts); if Assigned(Response) then FreeAndNil(Response); if Assigned(FireBase) then FreeAndNil(FireBase); end; end; function TFirebase.Post(Database, Data: string): String; var Response: TMemoryStream; FireBase: TclHttp; Ts: TStringList; Request: TclHttpRequest; SStream: TStringStream; begin Response := TMemoryStream.Create; FireBase := TclHttp.Create(nil); Ts := TStringList.Create; Request := TclHttpRequest.Create(nil); SStream := TStringStream.Create(Data); try Request.RequestStream := SStream; Request.Header.ContentType := 'application/json'; Request.Header.ContentLength := IntToStr(SStream.Size); // Post Url : https://delphifirebase-demo.firebaseio.com/DelphiDb.json?auth=guPhITQseHczlGqZgG6CnNTV2nqY1n7gfccX2NlO // Post Data : {"Product": "Delphi 10.3 Rio","ProductVersion": 26,"PackageVersion": 260,"CompilerVersion": 33} FireBase.Post(ProjectUrl + Database + '?auth=' + SecretKey, Request, Response); Response.Position := 0; Ts.LoadFromStream(Response, TEncoding.UTF8); Result := Ts.Text; finally if Assigned(Ts) then FreeAndNil(Ts); if Assigned(Response) then FreeAndNil(Response); if Assigned(FireBase) then FreeAndNil(FireBase); if Assigned(Request) then FreeAndNil(Request); if Assigned(SStream) then FreeAndNil(SStream); end; end; procedure TFirebase.Put(Database, Data: string); var Response: TMemoryStream; FireBase: TclHttp; Request: TclHttpRequest; SStream: TStringStream; begin Response := TMemoryStream.Create; FireBase := TclHttp.Create(nil); Request := TclHttpRequest.Create(nil); SStream := TStringStream.Create(Data); try Request.RequestStream := SStream; Request.Header.ContentType := 'application/json'; Request.Header.ContentLength := IntToStr(SStream.Size); // Post Url : https://delphifirebase-demo.firebaseio.com/DelphiDb/-Lmnhs0f6jE22p2H_Jz4.json?auth=guPhITQseHczlGqZgG6CnNTV2nqY1n7gfccX2NlO // Post Data : {"Product": "Delphi 10.3 Rio","ProductVersion": 26,"PackageVersion": 260,"CompilerVersion": 33} FireBase.Put(ProjectUrl + Database + '?auth=' + SecretKey, 'application/json', Request.RequestStream); finally if Assigned(Response) then FreeAndNil(Response); if Assigned(FireBase) then FreeAndNil(FireBase); if Assigned(Request) then FreeAndNil(Request); if Assigned(SStream) then FreeAndNil(SStream); end; end; end. |
Main.pas
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
unit Main; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls, FirebaseDatabase, Vcl.ExtCtrls, Data.DB, Vcl.Grids, System.JSON, Vcl.DBGrids, dxmdaset, Vcl.DBCtrls; type TMainForm = class(TForm) GroupBox1: TGroupBox; PageControl1: TPageControl; Post: TTabSheet; Put: TTabSheet; Delete: TTabSheet; Get: TTabSheet; GroupBox2: TGroupBox; SecretKey: TLabeledEdit; ProjectUrl: TLabeledEdit; Post_Button: TButton; GroupBox3: TGroupBox; GroupBox4: TGroupBox; RequestBody: TMemo; ResponseBody: TMemo; Panel1: TPanel; CollectionName: TLabeledEdit; Get_Button: TButton; CollectionName2: TLabeledEdit; GroupBox5: TGroupBox; ResponseBody2: TMemo; DBGrid1: TDBGrid; DataSource1: TDataSource; dxMemData1: TdxMemData; Button1: TButton; dxMemData1Product: TStringField; dxMemData1ProductVersion: TIntegerField; dxMemData1PackageVersion: TIntegerField; dxMemData1CompilerVersion: TIntegerField; dxMemData1DatabaseId: TStringField; Delete_Btn: TButton; Update_Btn: TButton; GroupBox6: TGroupBox; RequestBody3: TMemo; CollectionName3: TLabeledEdit; Put_btn: TButton; DataKey: TLabeledEdit; CollectionName4: TLabeledEdit; dataKey2: TLabeledEdit; Delete_Button: TButton; procedure FormCreate(Sender: TObject); procedure Post_ButtonClick(Sender: TObject); procedure Get_ButtonClick(Sender: TObject); procedure Button1Click(Sender: TObject); procedure dxMemData1BeforeDelete(DataSet: TDataSet); procedure Update_BtnClick(Sender: TObject); procedure Put_btnClick(Sender: TObject); procedure Delete_ButtonClick(Sender: TObject); procedure Delete_BtnClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var MainForm: TMainForm; Firebase: TFirebase; implementation {$R *.dfm} procedure TMainForm.Get_ButtonClick(Sender: TObject); begin Firebase.SecretKey := SecretKey.Text; Firebase.ProjectUrl := ProjectUrl.Text; ResponseBody2.Text := Firebase.Get(CollectionName.Text); end; procedure TMainForm.Post_ButtonClick(Sender: TObject); begin Firebase.SecretKey := SecretKey.Text; Firebase.ProjectUrl := ProjectUrl.Text; ResponseBody.Text := Firebase.Post(CollectionName.Text, RequestBody.Text); end; procedure TMainForm.Put_btnClick(Sender: TObject); begin Firebase.SecretKey := SecretKey.Text; Firebase.ProjectUrl := ProjectUrl.Text; Firebase.Put(CollectionName3.Text + '/' + DataKey.Text, RequestBody3.Text); end; procedure TMainForm.Update_BtnClick(Sender: TObject); var JSON: String; begin JSON := Format('{"Product": "%s","ProductVersion":%s,"PackageVersion": %s,"CompilerVersion": %s}', [dxMemData1Product.AsString, dxMemData1ProductVersion.AsString, dxMemData1PackageVersion.AsString, dxMemData1CompilerVersion.AsString]); RequestBody3.Text := JSON; DataKey.Text := dxMemData1DatabaseId.AsString + '.json'; PageControl1.ActivePageIndex := 2; end; procedure TMainForm.Button1Click(Sender: TObject); var ListObject: TJSONObject; item: TJSONObject; JsonValue, DatabaseId: String; i: integer; begin dxMemData1.DisableControls; ListObject := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(ResponseBody2.Text), 0) as TJSONObject; try for I := 0 to ListObject.Count - 1 do begin JsonValue := ListObject.Pairs[i].JsonValue.ToString; DatabaseId := ListObject.Pairs[i].JsonString.Value; item := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(JsonValue), 0) as TJSONObject; try if not dxMemData1.Active then dxMemData1.Open; dxMemData1.Edit; dxMemData1.Append; dxMemData1.FieldByName('DatabaseId').Value := DatabaseId; dxMemData1.FieldByName('Product').Value := item.GetValue('Product').Value; dxMemData1.FieldByName('ProductVersion').Value := item.GetValue('ProductVersion').Value; dxMemData1.FieldByName('PackageVersion').Value := item.GetValue('PackageVersion').Value; dxMemData1.FieldByName('CompilerVersion').Value := item.GetValue('CompilerVersion').Value; dxMemData1.Post; finally FreeAndNil(item); end; end; finally if Assigned(ListObject) then FreeAndNil(ListObject); end; dxMemData1.EnableControls; end; procedure TMainForm.Delete_BtnClick(Sender: TObject); begin CollectionName4.Text := 'DelphiDb'; dataKey2.Text := dxMemData1DatabaseId.AsString + '.json'; PageControl1.ActivePageIndex := 3; end; procedure TMainForm.Delete_ButtonClick(Sender: TObject); begin Firebase.SecretKey := SecretKey.Text; Firebase.ProjectUrl := ProjectUrl.Text; Firebase.Delete(CollectionName4.Text + '/' + dataKey2.Text); end; procedure TMainForm.dxMemData1BeforeDelete(DataSet: TDataSet); begin ShowMessage(DataSet.FieldByName('DatabaseId').AsString); end; procedure TMainForm.FormCreate(Sender: TObject); begin Firebase := TFirebase.Create; end; end. |
Brauche ich da eine spezielle Komponente?
dxmemdata
Hast Du auch ein Beispiel ohne diese Komponenten?
Oder was kann ich statt dxmemdata benutzen?
Vielen Dank
Hallo, ich habe noch nie eine andere Komponente verwendet, da tdxmemdata vorhanden ist. Lassen Sie mich jedoch morgen überprüfen, was wir stattdessen verwenden können.
Ich kann kein deutsch ich übersetze es mit google