SQL prosedür

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

SQL prosedür

Mesaj gönderen Lord_Ares »

Merhaba, firebird veritabanı ile aşağıdaki gibi kullandığım bazı fonksiyon ve prosedürlerim var. Örneğin aşağıdaki kod parçasını arama işlemlerinde kullanıyorum. Aynı şekilde kayıt ekleme ve güncelleme için prosedür yapmayı düşündüm. Fakat her querinin alan sayısı ve isimleri farklı olduğu için nasıl yapacağımı bilemedim.

Kod: Tümünü seç

FUNCTION TFDATA_M.ARA_QUERYSIZ(Aranacak_Alan, Aranacak_Table, Aranan:String ): BOOLEAN;
VAR
  Durum:boolean;
  Aranacak_Query: TFDQuery;
begin
  Aranacak_Query:=TFDQuery.Create(Self);
  Durum:=true;
  Aranacak_Query.Connection:=FDConnection1;
  if Aranan<>'' then begin
  Aranacak_Query.SQL.Clear;
  Aranacak_Query.SQL.Add('Select '+Aranacak_Alan+' FROM '+Aranacak_Table+' WHERE '+Aranacak_Alan+' = '+QuotedStr(Aranan));
  Aranacak_Query.OPEN;
  Aranacak_Query.FieldDefs.Update;

  if Aranacak_Query.FieldByName(Aranacak_Alan).Value=Aranan then Durum:=True else Durum:=False;
  Aranacak_Query.CLOSE;
  Result:=Durum ;
  end else Result:=Durum;
  Aranacak_Query.Free;
end;

Örnek farklı alan tiplerine ve alan sayısına sahip iki querymiz olduğunu varsayalım ve buna yukarıdaki örnek gibi kayıt ekleme prosedürü yapmak isteyelim.

QUERY1 : ADI, SOYADI
QUERY2 : YAŞI, MESLEĞİ , MAAŞI, ADRESİ

Procedur KAYIT_EKLE ( EKLENECEK_ALAN_1, EKLENECEK_ALAN_2 , HANGI_TABLE ) ;

Bu prosedürü Query 1 için kullanabilirim fakat Query2 için kullanamam. Çünkü query 2 de 4 adet alan var ama prosedürümde değer alabilecek iki alan var. Buna çözüm olarak ilk aklıma gelen prosedürde 15 adet değişken tanımlayıp kullanmadıklarıma boş değer atamak.

PROCEDUR ( EKLENECEK_ALAN_1, EKLENECEK_ALAN_2 ,EKLENECEK_ALAN_3, EKLENECEK_ALAN_4, EKLENECEK_ALAN_5, EKLENECEK_ALAN_6 )

Fakat bunun doğru çözüm olduğunu düşünmüyorum. Farklı bir yolu var mı ? Nasıl yaparım. Stored prosedür kullan diyeceksiniz. Fakat projemde bunu kullanmak için çok geç kaldım. Projeye başlarken stored prosedürleri bilmediğim için şuan onlara dönmemde çok zor o yüzden bu yola seçtim.
En son Lord_Ares tarafından 02 Kas 2018 10:06 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SQL prosedür

Mesaj gönderen freeman35 »

Niye alan göndermeye çalışıyorsun ki? query i yada TDataSet olarak gönder.
Function Kayit_Ekle(Q_: TDataset): Boolean;
Begin
Result:= False;
Q_.FieldByName(
Q_.Fields[
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: SQL prosedür

Mesaj gönderen ikra »

kıdemsiz üye
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: SQL prosedür

Mesaj gönderen Lord_Ares »

freeman35 yazdı: 02 Kas 2018 05:09 Niye alan göndermeye çalışıyorsun ki? query i yada TDataSet olarak gönder.
Function Kayit_Ekle(Q_: TDataset): Boolean;
Begin
Result:= False;
Q_.FieldByName(
Q_.Fields[
O dataset veya query şunu vermeden nasıl olur ki ? Bir select ifadesinde ilgili alanları belirtmeden, kullanmadan oluyor mu ? Deneyeyim bakim.

"Query.SQL.Add('Select '+Aranacak_Alan+' FROM '+Aranacak_Table+'"
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: SQL prosedür

Mesaj gönderen ikra »

Ben stored procedure kullanacaksin diye hesap etmistim. O nedenle yukaridaki link‘in isini görecegini düsündüm.
kıdemsiz üye
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: SQL prosedür

Mesaj gönderen Lord_Ares »

ikra yazdı: 03 Kas 2018 12:36 Ben stored procedure kullanacaksin diye hesap etmistim. O nedenle yukaridaki link‘in isini görecegini düsündüm.
" Stored prosedür kullan diyeceksiniz. Fakat projemde bunu kullanmak için çok geç kaldım. Projeye başlarken stored prosedürleri bilmediğim için şuan onlara dönmemde çok zor o yüzden bu yola seçtim. "

Yok kullanamayacağım şuan :)
ismailkocacan
Üye
Mesajlar: 88
Kayıt: 25 Eyl 2011 06:11
Konum: İstanbul
İletişim:

Re: SQL prosedür

Mesaj gönderen ismailkocacan »

Lord_Ares yazdı: 02 Kas 2018 12:54 Fakat bunun doğru çözüm olduğunu düşünmüyorum. Farklı bir yolu var mı ? Nasıl yaparım. Stored prosedür kullan diyeceksiniz. Fakat projemde bunu kullanmak için çok geç kaldım. Projeye başlarken stored prosedürleri bilmediğim için şuan onlara dönmemde çok zor o yüzden bu yola seçtim.
Farklı bir yolu var elbette.
Bir veritabanı nesnesi olan tabloların, Delphi- Object Pascal dilinde karşılığı kodlanır.Sınıflardan faydalanılabilinir.
Adi, Soyadi kolonlarına sahip bir Kisi tablosu var ise, bu tabloya karşılık Delphi programlama dilinde bir TKisi sınıfı yazılır.
Sınıfa Adi, Soyadi alanları eklenir.Tipleri belirlenir.Bu alanlara "doğrudan" değer yazıp, okumak yazan ve okuyan kısımları bağımlı yapıp, değişiklikten etkileneceği için çok akıllıca bir yöntem değildir.O nedenle property'ler yardımıyla sarmalanabilir.

Kod: Tümünü seç

TKisi = class
private
 FAdi:string;
 FSoyadi:string;
public
 property Adi: string  read FAdi  write FAdi;
 property Soyadi: string  read FSoyadi  write FSoyadi;
end; 
TKisi sınıfı hafızada tahsis edildikten sonra, Adi ve Soyadi alanlarının değerleri doldurulur.Kisi tablosuna gönderilmek (insert veya update) üzere SQL kodu RTTI yardımıyla oluşturulur.Oluşturulan SQL kodu çalıştırmak için, ilgili Query nesnesinin SQL.Text özelliğine yerleştirilir. Query nesnesi çalıştırılır.

Query nesneleri her yere bulaştırılmayacağı içinde, yönetmek ve değiştirmek kolaylaşacaktır.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: SQL prosedür

Mesaj gönderen Lord_Ares »

Emeğinize sağlık güzel bir açıklama olmuş.
ismailkocacan
Üye
Mesajlar: 88
Kayıt: 25 Eyl 2011 06:11
Konum: İstanbul
İletişim:

Re: SQL prosedür

Mesaj gönderen ismailkocacan »

Lord_Ares yazdı: 05 Kas 2018 12:33 Emeğinize sağlık güzel bir açıklama olmuş.
Rica ederim.
Basitçe izah etmeye çalıştım.Ama herşey göründüğü gibi basit olmayabilir.Düşünülmesi gereken başka hususlar olabilir.
Örneğin birden fazla birbiri ile ilişkili tablolar olabilir.
Bu ilişkili tabloların ilişki yapısı, delphi sınıflarına uygulanması gerekebilir.Kisi tablosuna karşılık bir TKisi sınıfı yazıldıysa, Kisi tablosunun bir detay tablosu var ise, bu detay tablonun da karşılığı bir sınıf yazılır.Tıpkı TKisi sınıfında olduğu gibi.

İlgili detay sınıf bir alan ve property olarak, TKisi sınıfına bir array, list ya da muadili yapılar kullanılarak eklenir.

Bundan sonrası, yukarıda bahsettiğim gibi SQL kodunu oluşturmak veri bütünlüğünü sağlamak adına transaction ayarlamalarını yapmak kalıyor.

Bahsettiklerim sadece delphi programlama diline has şeyler olmayan, genel yazılım geliştirme yöntemleridir.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: SQL prosedür

Mesaj gönderen Lord_Ares »

Sayenizde projelerimde kullanabileceğim, yeni bir bakış açısı daha yakalamış oldum. Aslında sınıflar ve kullanım şekilleri tam anlamıyla öğrenmek ve geliştirmek ve hakim olmak istediğim konulardı. Bu anlatımınız sınıflara dahada merak uyandırdı. Çok teşekkür ediyorum.
mehmetantalya
Üye
Mesajlar: 189
Kayıt: 30 Eyl 2013 10:17

Re: SQL prosedür

Mesaj gönderen mehmetantalya »

ismailkocacan yazdı: 11 Kas 2018 10:25
Lord_Ares yazdı: 05 Kas 2018 12:33 Emeğinize sağlık güzel bir açıklama olmuş.
Rica ederim.
Basitçe izah etmeye çalıştım.Ama herşey göründüğü gibi basit olmayabilir.Düşünülmesi gereken başka hususlar olabilir.
Örneğin birden fazla birbiri ile ilişkili tablolar olabilir.
Bu ilişkili tabloların ilişki yapısı, delphi sınıflarına uygulanması gerekebilir.Kisi tablosuna karşılık bir TKisi sınıfı yazıldıysa, Kisi tablosunun bir detay tablosu var ise, bu detay tablonun da karşılığı bir sınıf yazılır.Tıpkı TKisi sınıfında olduğu gibi.

İlgili detay sınıf bir alan ve property olarak, TKisi sınıfına bir array, list ya da muadili yapılar kullanılarak eklenir.

Bundan sonrası, yukarıda bahsettiğim gibi SQL kodunu oluşturmak veri bütünlüğünü sağlamak adına transaction ayarlamalarını yapmak kalıyor.

Bahsettiklerim sadece delphi programlama diline has şeyler olmayan, genel yazılım geliştirme yöntemleridir.
Merhaba,
İsmail bey bu konu ile ilgili küçük bir örnek hazırlamanız mümkün müdür?
ismailkocacan
Üye
Mesajlar: 88
Kayıt: 25 Eyl 2011 06:11
Konum: İstanbul
İletişim:

Re: SQL prosedür

Mesaj gönderen ismailkocacan »

mehmetantalya yazdı: 14 Kas 2018 04:57
ismailkocacan yazdı: 11 Kas 2018 10:25
Lord_Ares yazdı: 05 Kas 2018 12:33 Emeğinize sağlık güzel bir açıklama olmuş.
Rica ederim.
Basitçe izah etmeye çalıştım.Ama herşey göründüğü gibi basit olmayabilir.Düşünülmesi gereken başka hususlar olabilir.
Örneğin birden fazla birbiri ile ilişkili tablolar olabilir.
Bu ilişkili tabloların ilişki yapısı, delphi sınıflarına uygulanması gerekebilir.Kisi tablosuna karşılık bir TKisi sınıfı yazıldıysa, Kisi tablosunun bir detay tablosu var ise, bu detay tablonun da karşılığı bir sınıf yazılır.Tıpkı TKisi sınıfında olduğu gibi.

İlgili detay sınıf bir alan ve property olarak, TKisi sınıfına bir array, list ya da muadili yapılar kullanılarak eklenir.

Bundan sonrası, yukarıda bahsettiğim gibi SQL kodunu oluşturmak veri bütünlüğünü sağlamak adına transaction ayarlamalarını yapmak kalıyor.

Bahsettiklerim sadece delphi programlama diline has şeyler olmayan, genel yazılım geliştirme yöntemleridir.
Merhaba,
İsmail bey bu konu ile ilgili küçük bir örnek hazırlamanız mümkün müdür?
Merhaba,
Bu aralar pek zamanım yok, uzunca bir sürede olamayacak sanırım.Örnek hazırlamam hem doğru olmaz, hem de yararlı olmayacağını düşünüyorum.
Ama paylaşacağım kaynakları inceleyerek istenilen her türlü örnek ve daha fazlası yazılabilir.
https://www.amazon.com/Delphi-Nutshell- ... B00CKYWZE8
http://docwiki.embarcadero.com/RADStudi ... _with_RTTI
http://docwiki.embarcadero.com/RADStudi ... s_on_Types
http://docwiki.embarcadero.com/CodeExam ... e_(Delphi)
http://www.blong.com/conferences/borcon ... /cb140.htm
https://www.youtube.com/watch?v=I8kb6D2dtVc
https://www.youtube.com/watch?v=-RvlKysIOnQ
http://docwiki.embarcadero.com/RADStudi ... s_(Delphi)
mehmetantalya
Üye
Mesajlar: 189
Kayıt: 30 Eyl 2013 10:17

Re: SQL prosedür

Mesaj gönderen mehmetantalya »

tesekkür ederim.
Cevapla