SQL ile Pratik Database Uygulamaları

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

SQL ile Pratik Database Uygulamaları

Mesaj gönderen Battosai »

MySQL ile internet üzerinden veya networkdan çalışacak şekilde tasarladığım yeni programımda DBedit gibi bileşenler yerine database ilişkisi olmayan standart edit,combo ve DateEdit gibi bileşenler kullanmayı tercih ettim.Sebebi de; Bu insert,post,edit ve table veya Query lerin active olma özelliklerinin zaman zaman beni sinir etmesi ve internet ortamı için tasarladığım için işlem sırasında oluşturduğum nesneler ile işlem yapmayı tercih edip böyle daha iyi bir performans alacağıma kanaat getirdiğim içindir...
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 :twisted: ....

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;
Kullanımı:

Kod: Tümünü seç

temizle(Form2); 
Gördüğünüz gibi gayet bilinen kodlar. Kendi bileşenlerinize göre düzenleme yapabilirsiniz...

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;

"SQLString" diye tanımladığım global olarak tanımlanmış stringlist dir...
"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;

Kullanım:SetEdit(Query1,Form2)

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.
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

özellikle sql in dinamik yazdırılma olayı incelemeye değer ve üzerinde çalışılması gereken bir konu.

Tebrikler
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Cevapla