Her iş uygulaması, her tablo için yeniden yazılan aynı sayfayı içerir: bir arama kutusu ve bir sayfalama olan bir liste, oluşturmak ve düzenlemek için bir form, silmek için bir onay, ve yazan kod. Kendi admin demomuzda yalnızca müşteriler için dört istek işleyicisi ve yaklaşık dört yüz satır sayfa oluşturucu vardı, ardından tedarikçiler için aynısı, ve faturalar için yine aynısı tekrarlanıyordu.
sgcWebSockets 2026.10, o sayfaya sahip olan TsgcHTMLComponent_CRUD'u ekliyor. Demo artık müşteriler alanını altı metotluk bir adaptörle oluşturuyor, ve ikisini de okuyabilmeniz için elle yazılmış sürümü yanında tutuyor.
Sayfa
uses
sgcHTML_Component_CRUD;
FCRUD := TsgcHTMLComponent_CRUD.Create(Self);
FCRUD.CRUDID := 'customers';
FCRUD.RoutePrefix := '/customers';
FCRUD.Title := 'Customers';
FCRUD.KeyField := 'ID';
FCRUD.PageSize := 15;
FCRUD.Actions := [caCreate, caEdit, caDelete, caView, caExport];
FCRUD.DataSet := FDQueryCustomers;
Bir veri kümesine bağlandığında kendi sütunlarını okur, ve sayfanın tamamı budur: liste, arama, sayfalama, oluşturma ve düzenleme formu, silme onayı ve listenin gösterdiği her şeyin CSV olarak dışa aktarılması.
Ya da Kendi SQL'iniz
Bir veri kümesi, kayıtları saklamanın bir yoludur, tek yolu değil. Bir kaydı değiştiren her şey bir adaptörden geçer, bu yüzden bileşen hiçbir zaman SQL'i, bir kaydı veya bir veritabanı sürücüsünü görmez:
type
TCustomersAdapter = class(TsgcHTMLCRUDAdapter)
public
function Locate(const aKey: string): Boolean; override;
function Read(const aKey: string; aValues: TStrings): Boolean; override;
function List(const aSearch: string; aPage, aPageSize: Integer;
aRows: TStrings): Integer; override;
function Insert(aValues: TStrings; var aKey: string;
aErrors: TStrings): Boolean; override;
function Update(const aKey: string; aValues, aErrors: TStrings)
: Boolean; override;
function Delete(const aKey: string; aErrors: TStrings): Boolean; override;
end;
FCRUD.SetAdapter(TCustomersAdapter.Create(FCRUD));
Zaten sahip olduğunuz her şey üzerinde altı metot. Demoda her biri, uygulamanın veritabanı havuzu üzerinde tek bir çağrıdır.
Sırada Yazacağınız Parçalar
İyimser kilitleme. Bir sürüm sütunu belirtin, ve bir kayıt işlemi tarayıcının gönderdiğini saklanmış olanla karşılaştırır, böylece Kaydet'e ikinci basan kişiye, kaydın sessizce üzerine yazılması yerine kaydın değiştiği söylenir:
FCRUD.VersionField := 'UPDATED_AT';
Ana ve alt kayıt. Bir kaydın alt listeleri, kayıt düzenlenirken formun altında görüntülenen diğer CRUD bileşenleridir:
with FCRUD.Details.Add do
begin
CRUD := FCRUDOrderLines;
MasterField := 'ORDER_ID';
Caption := 'Lines';
end;
Formlarla değil, verilerinizle ilgili doğrulama. Zorunlu sütunlar bileşenin işidir; müşterilerle ilgili kurallar ise OnValidate içinde yaşar. Her sorun için bir satır ekleyin, yazma reddedilir ve form bu satırlarla birlikte geri döner.
Başlamanın İki Yolu
IDE'de artık bir sihirbaz var: Tools › New sgcHTML CRUD page. Tabloyu, anahtarı ve sütunları adlandırın; bileşen, tasarlanmakta olan form üzerinde oluşturulur ve onu bağlayan iki satır panoya kopyalanmış olarak gelir.
IDE dışında, sayfanın kaynağını Object Pascal veya C# dilinde yazan bir komut satırı aracı olan sgcHTMLGen vardır:
sgcHTMLGen crud --table Customers --prefix /customers ^
--fields "ID:key CODE:req:32 NAME:req:120 CITY:80 NOTES:noform"
Sayfa Nasıl Yanıt Veriyor
Sayfanın her kontrolü aynı şekilde gönderim yapar: arama kutusu, Yeni düğmesi, bir satırın Düzenle ve Sil'i ve formun kendisi üç gizli alan taşır: action, crud ve, anlamlı olduğu yerde, key. Sunucu bunları okur ve yerine geçecek işaretlemeyi yanıtlayan ProcessAction'ı çağırır.
Soket üzerinden gönderilen bir mesaj hiçbir yol taşımaz, bu yüzden hiçbir zaman yönlendiriciye ulaşmaz ve yönlendiricinin kendi kontrolünden hiçbir zaman geçmez. Bunu yetkilendirmek uygulamanın işidir, ve motor artık bunun için gerekeni size veriyor:
oSession := FHTMXEngine.MessageSession(aConnection, FAuth);
try
if not Assigned(oSession) then
Exit; // a write with nobody behind it is not a write
oPage.ProcessAction(vAction, oParams.Values['key'], oParams, aResponse);
finally
oSession.Free;
end;
Tarayıcıdan gelen anahtar, herhangi bir yazma işlemi çalıştırılmadan önce bulunur, bu yüzden kimseye ait olmayan bir anahtar hiçbir şey yazmaz.
Her İki Sürümü de Görün
Demos\60.HTML\01.RunTime\02.AdminCRUD içinde, /customers bileşendir ve /customers-classic yerini aldığı sayfadır. Aynı veritabanı, aynı veri, aynı görünüm. İkisinden biri dört yüz satır daha kısadır.
Yükseltme
Bileşen sgcHTML'in bir parçasıdır ve ekleme niteliğindedir: siz bir formun üzerine birini bırakana kadar mevcut bir sayfada hiçbir şey değişmez.
Sırada Ne Var
- Delphi Grid'inize Sade İngilizce ile Soru Sorun
- Delphi'den Kapalı Bir Tarayıcıya Ulaşın
- sgcWebSockets 2026.10, bu sürümdeki diğer her şey
İzleyin
Bununla ilgili kısa bir video, eSeGeCe kanalında yer alıyor.
Sorularınız, geri bildiriminiz veya taşıma konusunda yardıma mı ihtiyacınız var? İletişime geçin — kodu yazan kişilerden yanıt alacaksınız.
