NEBIOGLU.COM

Ana Sayfa Spor Delphi Malatya Bağlantılar İletişim

Delphi'de Bileşenlerin(Component) ADO ile MSSQL veritabanına yazılması ve okunması

  Delphi, bir nesnenin published özelliklerinin stream'e yazılmasına imkan sağlar. Bu özellik sayesinde stream'deki bilgiyi veritabaına yazabiliriz. Örneğin bir formu üzerindeki tüm bileşenlerle birlikte kaydedebiliriz. Aşağıdaki kod parçası, bir bilieşenin veritabanına yazılmasını sağlamaktadır. Bu bir form, panel veya herhangi başka bir bileşen olabilir. Bunun için öncelikle MSSQL veritabanında text tipinde bir alan oluşturmamız gerekiyor. Aşağıdaki örnekte "OBJRES" alanı text tipinde verinin yazılacağı alandır.

procedure TMyCustomPanel.Save;
var
  qry: TADOQuery;
  mem: TMemoryStream;
  FieldStr: string;
  PFieldStr: PChar;
begin
  qry := TADOQuery.Create(self);
  try
    qry.Connection := myConnection;
    qry.SQL.Add('SELECT OBJRES FROM MYOBJECT');
    qry.Open;
    mem := TMemoryStream.Create;
    try
      mem.WriteComponentRes(self.ClassName, self);
      mem.Seek(0, 0);
      SetLength(FieldStr, mem.Size);
      PFieldStr := PChar(FieldStr);
      mem.Read(PFieldStr^, mem.Size);
      qry.Edit;
      qry.FieldByName('OBJRES').Value := FieldStr;
      qry.Post;
    finally
      mem.Free;
    end;
  finally
    qry.Free;
  end;
end;


Şimdi de veritabanına yazdığımız panel nesnesini okuyalım.

procedure TForm1.LoadFromDB;
var
  qry: TADOQuery;
  mem: TMemoryStream;
  ResultStr: string;
  PResultStr: PChar;
  MyPanel: TMyCustomPanel;
begin
  qry := TADOQuery.Create(self);
  try
    qry.Connection := myConnection;
    qry.SQL.Add('SELECT OBJRES FROM MYOBJECT');
    qry.Open;
    MyPanel := TMyCustomPanel.Create(self);
    MyPanel.Parent := self
    mem := TMemoryStream.Create;
    try
      ResultStr := qry.FieldByName('OBJRES').Value;
      PResultStr := PChar(ResultStr);
      mem.Write(PResultStr^, Length(ResultStr));
      mem.Seek(0,0);
      mem.ReadComponentRes(MyPanel);
    finally
      mem.Free;
    end;
  finally
    qry.Free;
  end;
end;

Eğer panel veya form üzerinde register olmamış bir tip var ise bileşeni yüklemeden önce "RegisterClass" fonksiyonunu kullanmalısınız.

RegisterClass(TMyButton);

Bu şekilde delphide oluşturduğunuz formları veritabanına kaydedip tekrar açabilirsiniz.
Not: Örnek kodlar Delphi 6 ile yazılmıştır.

Mehmet Nebioğlu

 

ARK HE Yazılım