Burdaki çoğu arkadaşın kod yapısına aşina olduğu kolay ama birçok arkadaş için kullanışlı olacağını düşündüğüm birkaç tane procedure örneği vereceğim...Giriş biraz uzun oldu heral

Kodların öyle farklı bir yanı yok söylediğim gibi yazmaya üşenen veya aklına böyle bir yöntem gelmeyenler için faydalı olacağını sanıyorum....
1:işlem yapılacak Form daki bileşenleri hazırlanması veya temizlenmesi.
Kod: Tümünü seç
procedure TForm1.temizle(Control:TWinControl);
var
i:integer;
begin
for i := 0 to Control.ComponentCount-1 do
begin
if control.Components[i] is TEdit then
TEdit(control.Components[i]).Clear;
if control.Components[i] is TMemo then
TMemo(control.Components[i]).Clear;
if control.Components[i] is TListBox then
TListBox(control.Components[i]).Clear;
if control.Components[i] is TCheckBox then
TCheckBox(control.Components[i]).Checked:=False;
if control.Components[i] is TComboBox then
begin
if TComboBox(control.Components[i]).Style=csDropDown then
TComboBox(control.Components[i]).Text:=''
else
TComboBox(control.Components[i]).ItemIndex:=0;
end;
if control.Components[i] is TJvValidateEdit then
TJvValidateEdit(control.Components[i]).AsFloat:=0;
if control.Components[i] is TMaskEdit then
TMaskEdit(control.Components[i]).Clear;
if control.Components[i] is TListView then
TListView(control.Components[i]).Clear;
if control.Components[i] is TJvDateEdit then
TJvDateEdit(control.Components[i]).Clear;
end;
end;
Kod: Tümünü seç
temizle(Form2);
2:SQL script'in hazırlanması
Bu procedure de dikkat edilmesi gereken Formunuza koyduğunuz bileşenlerin "name" leri veritabanınızdaki tablo alan isimleriyle aynı olmasıdır.
SQL scripti sadece procedure da tanımlı bileşenler için oluşturulacağı için istediğiniz kadar bileşen koyabilirsiniz forma.Sadece tablonuzda ne kadar field varsa o kadar tanımlı bileşen koymalısınız yoksa hata verecektir.Daha azı olabilir ama çok olmaması lazımdır...
Kod: Tümünü seç
Procedure TForm1.WriteSQL(Tablo,mode,kosul:string;Parent: TWinControl);
var
i:integer;
SQL,Lalan,Lvalue:TStringlist;
begin
try
LAlan:=TStringlist.Create;
Lvalue:=TStringlist.Create;
SQL:=TStringlist.Create;
Lalan.Clear;
Lvalue.Clear;
SQL.Clear;
for i := 0 to Parent.ComponentCount- 1 do
begin
if Parent.Components[i] is TEdit then
begin
Lalan.Add(TEdit(Parent.Components[i]).Name);
Lvalue.Add(TEdit(Parent.Components[i]).Text);
end;
//if Parent.Components[i] is TMemo then
// value:=value+TMemo(Parent.Components[i]).Text+',';
if Parent.Components[i] is TCheckBox then
begin
Lalan.Add(TCheckBox(Parent.Components[i]).Name);
Lvalue.Add(inttostr(Abs(strtoint(BoolToStr(TCheckBox(Parent.Components[i]).Checked)))));
end;
if Parent.Components[i] is TComboBox then
begin
Lalan.Add(TComboBox(Parent.Components[i]).Name);
Lvalue.Add(TComboBox(Parent.Components[i]).Text);
end;
if Parent.Components[i] is TJvValidateEdit then
begin
Lalan.Add(TJvValidateEdit(Parent.Components[i]).Name);
Lvalue.Add(TJvValidateEdit(Parent.Components[i]).Text);
end;
if Parent.Components[i] is TMaskEdit then
begin
Lalan.Add(TMaskEdit(Parent.Components[i]).Name);
Lvalue.Add(TMaskEdit(Parent.Components[i]).Text);
end;
if Parent.Components[i] is TJvDateEdit then
begin
Lalan.Add(TJvDateEdit(Parent.Components[i]).Name);
Lvalue.Add(TarihSet(TJvDateEdit(Parent.Components[i]).Date));
end;
if Parent.Components[i] is TJvDatePickerEdit then
begin
Lalan.Add(TJvDatePickerEdit(Parent.Components[i]).Name);
Lvalue.Add(TarihSet(TJvDatePickerEdit(Parent.Components[i]).Date));
end;
end;
if mode='insert' then
begin
SQL.Add('insert into '+Tablo+' (');
for i:= 0 to Lalan.Count - 1 do
begin
if i<>Lalan.Count-1 then
SQL.Add(Lalan.Strings[i]+',')
else
SQL.Add(Lalan.Strings[i]+')');
end;
SQL.Add(' values (');
for i := 0 to Lalan.Count - 1 do
begin
if i<>Lalan.Count-1 then
SQL.Add(QuotedStr(trim(Lvalue.Strings[i]))+',')
else
SQL.Add(QuotedStr(trim(Lvalue.Strings[i]))+')');
end;
end;
if mode='update' then
begin
SQL.Add('update '+Tablo+' set');
for i := 0 to Lalan.Count - 1 do
begin
if i<>Lalan.Count-1 then
SQL.Add(Lalan.Strings[i]+'='+QuotedStr(trim(Lvalue.Strings[i]))+',')
else
SQL.Add(Lalan.Strings[i]+'='+QuotedStr(trim(Lvalue.Strings[i])));
end;
SQL.Add(kosul);
end;
SQLString.Clear;
SQLString.AddStrings(SQL);
finally
Lalan.Free;
Lvalue.Free;
SQL.Free;
end;
end;
"Kosul" parametresi "update" içindir insert işleminde '' şeklinde boş bırakınız.
Kullanımı:WriteSQL('TabloAdi','insert','',Form2);
Form2 deki tanımlı bileşenler ile SQL text inizi oluşacaktır...Daha sonra Query.SQL.Addstrings(SQLString) diyerek işlemi sorgu ile tamamlamış olucaksınız...
3:Gelelim Edit meselesine bu iş içinde pratik bir procedure mevcuttur buyrun..
Kod: Tümünü seç
procedure TForm1.SetEdit(Tablo:TZReadOnlyQuery; Parent: TWinControl);
var
j:integer;
name,d:string;
begin
for j:=0 to tablo.FieldCount-1 do
begin
d:=tablo.Fields[j].Text;
name:=tablo.Fields[j].FieldName;
if Parent.FindComponent(name) is TEdit then
Tedit(Parent.FindComponent(name)).Text:=d;
if Parent.FindComponent(name) is TCheckBox then
begin
if trim(d)='0' then
TCheckBox(Parent.FindComponent(name)).Checked:=False ;
if trim(d)='1' then
TCheckBox(Parent.FindComponent(name)).Checked:=True;
end;
if (parent.FindComponent(name)) is TComboBox then
begin
if TComboBox(Parent.FindComponent(name)).Style=csDropDown then
TComboBox(Parent.FindComponent(name)).Text:=d
else
TComboBox(Parent.FindComponent(name)).ItemIndex:=TComboBox(Parent.FindComponent(name)).Items.IndexOf(d);
end;
if (parent.FindComponent(name)) is TJvDateEdit then
TJvDateEdit(Parent.FindComponent(name)).Text:=d;
if (parent.FindComponent(name)) is TJvValidateEdit then
TJvValidateEdit(Parent.FindComponent(name)).Text:=d;
end;
EditMi:=True;// işlemin edit işlemi olduğunu kotrol eden Global değişken.
end;
Böylece Formumuzadaki bileşenlere ilgili alanlardaki değerleri göndermiş olduk...
--------------------------------
Böylece bileşenler için datasource bağlama ve forumda datasource,Query ve Table gibi bileşenlerden de kurtulmuş oluyorsunuz....
Kodlara ihtiyacınıza göre ekleme yapabilirsiniz...Ben MySQL ve Zeos ikilisi iyle sorunsuz kullanıyorum....Saygılar.