Delphiden Params'a nasıl NULL ataması yaparım
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- Yusuf AYDIN
- Üye
- Mesajlar: 69
- Kayıt: 02 Oca 2004 05:45
- Konum: Antalya
Delphiden Params'a nasıl NULL ataması yaparım
Selamünaleyküm...
Delphi 7 kullanıyorum
Interbase içinde tarih ararlıklarındaki hareketlere göre toplamlar veren bir procedure yazdım. Procedure içinde iki tarihide params olarak aldım. IB Expert içinden ve SQL içinden çalıştırdım.
Procedure içinde tarihler Null ise kontrolünü yaptım. Ama delphi içinden Params alanına Null değerini atamıyorum.
Mutlaka ki params la geçmeliyim Sql.Add ile çalıştıramam....
Bilgilisi olanlardan cevap vermelerini rica ediyorum...
Delphi 7 kullanıyorum
Interbase içinde tarih ararlıklarındaki hareketlere göre toplamlar veren bir procedure yazdım. Procedure içinde iki tarihide params olarak aldım. IB Expert içinden ve SQL içinden çalıştırdım.
Procedure içinde tarihler Null ise kontrolünü yaptım. Ama delphi içinden Params alanına Null değerini atamıyorum.
Mutlaka ki params la geçmeliyim Sql.Add ile çalıştıramam....
Bilgilisi olanlardan cevap vermelerini rica ediyorum...
Eğer bir parametre seti tanımlanıyorsa bunları nill bırakmak pek sevimli bir yol değil. Kullanıldığı yerler var ama özel bir anlamı olmalı. Genel olarak bir /değişken parametre yaratılınca başlangiç değerleri set etmek çok kullanışlı oluyor.
İki tarih arasında sorgulama yapacak bir procedure yazmış olduğunuzu, fakat zaman zaman, bu parametreleri nil gönderek tüm tabloyu hesaplamak istediğinizi algıladım. Nill göndermek yerine çok eski bir tarihi ya da çok ileri bir tarihi gönderebilirsiniz. Ya da parametreleri bos string olarak gönderip, procedur icersinde ayrı bir sorgu satırı çalıştırbilirsiniz.
Kolay Gelsin,
İki tarih arasında sorgulama yapacak bir procedure yazmış olduğunuzu, fakat zaman zaman, bu parametreleri nil gönderek tüm tabloyu hesaplamak istediğinizi algıladım. Nill göndermek yerine çok eski bir tarihi ya da çok ileri bir tarihi gönderebilirsiniz. Ya da parametreleri bos string olarak gönderip, procedur icersinde ayrı bir sorgu satırı çalıştırbilirsiniz.
Kolay Gelsin,
- Yusuf AYDIN
- Üye
- Mesajlar: 69
- Kayıt: 02 Oca 2004 05:45
- Konum: Antalya
Params.Clear işlemi normal çalışmıyor...
Clera işlemi değeri null yapmıyor... sadece Delphinin de tanımlanmamış pozisyonuna bürünüyor.
Uyguladığım Çözüm:
Şafak beyin önerisi ve Fahrettin beyin onayıyla, ilk tarihi çok küçük (30.12.1899) son tarihi ise (31.12.2999) olara parametre atamasını yaparak çözdüm...
Cevap veren arakadaşlara teşekkürler....
Bu procedure işlemini çalıştırmanın yolu olarak uyguladım. Ama hala Date tipi Params'a Null Nasıl atama yapılabileceğini bilmiyorum.
Clera işlemi değeri null yapmıyor... sadece Delphinin de tanımlanmamış pozisyonuna bürünüyor.
Uyguladığım Çözüm:
Şafak beyin önerisi ve Fahrettin beyin onayıyla, ilk tarihi çok küçük (30.12.1899) son tarihi ise (31.12.2999) olara parametre atamasını yaparak çözdüm...
Cevap veren arakadaşlara teşekkürler....
Bu procedure işlemini çalıştırmanın yolu olarak uyguladım. Ama hala Date tipi Params'a Null Nasıl atama yapılabileceğini bilmiyorum.
bende aynı problemle karşılaşmıştım ama ben sql yazabiliyordum. SQL i runtime oluşururken eğer parametre nin null gitmesi gereken yerde SQL i IS NULL olarak yazdırmıştım. Procedure içindende if lerle yapmıştm bunu.
Anlamadığımsa SQL yamadan neden yapman gerek? kodu sen yazıyorsan ki öle olmalı Table yerine query kullanıp yazabilirsin. sadece database'i değiştirebiliyorsan view yada procedure yazabilirsin diye düşünüyorum
Kolay gele
Anlamadığımsa SQL yamadan neden yapman gerek? kodu sen yazıyorsan ki öle olmalı Table yerine query kullanıp yazabilirsin. sadece database'i değiştirebiliyorsan view yada procedure yazabilirsin diye düşünüyorum
Kolay gele
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 !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
- Yusuf AYDIN
- Üye
- Mesajlar: 69
- Kayıt: 02 Oca 2004 05:45
- Konum: Antalya
freeman35ve daha önceden de neden SQL yazamadığımı soran arkadaşlara cevap:
Midas kullanılıyor. Yapı bir başkası tarafından oluşturulmuş. ben üzerine modüller yazıyorum.
Kısaca sistemi özetliyeyim. Nedeninide anlatmış olcağıma inanıyorum.
Server ve Client üzerinde dbExpress bileşenleri kullanılmıştır.
Server üzerinde SQLQueryPlus ile SQLConnectionPlus üzerinden GDB bağlantısı gerçekleştirilirken ilgili querye bağlanan DataSetProvider ile Clientlara yayım yapılmaktadır.
Client üzerinden ClientDataSetProvider ile SocketConnection üzerinden Server üzerindeki DataSetProvider a bağlantı kurulmaktadır.
ClientDataSetProvider ise DataSourse ile diğer bileşenlerle haberleşmesi sağlanmaktadır.
Şimdi Server üzerindeki SQLQuery'nin SQLni nasıl değiştireceğimi bilmiyorum. Bunu araştırmak yerine acilen yapmak gereken hedeflerim vardı. Bu nedenlede Procedure yazmak ve params aktarmak aklıma gelen ilk çözğmdü. Params her zaman (özellikle toplu sonuçlarda) hızlılık açısından doğru bir çözümdür.
SQLe yazmakta önemli çok öenmli yazmayı henüz araştırmadığım içinde şuan birkaçtane Query fazladan koymak zorunda kaldım.
Şimdi. bu konuda daha ayrıntılı bir cevap verdiğime inanıyorum. Esas sıkıntımın serverdaki SQLe Query yazmak olduğunu biliyorum.
Bunu bir başlık altında sorsam belki daha doğru olurdu diyede düşünüyorum...
Bukonuda bilginiz varsa ve paylaşırsanız çok sevinirim.
Cevap verende de vermeyenden de Allah razı olsun.
Kolay Gelsin.
Midas kullanılıyor. Yapı bir başkası tarafından oluşturulmuş. ben üzerine modüller yazıyorum.
Kısaca sistemi özetliyeyim. Nedeninide anlatmış olcağıma inanıyorum.
Server ve Client üzerinde dbExpress bileşenleri kullanılmıştır.
Server üzerinde SQLQueryPlus ile SQLConnectionPlus üzerinden GDB bağlantısı gerçekleştirilirken ilgili querye bağlanan DataSetProvider ile Clientlara yayım yapılmaktadır.
Client üzerinden ClientDataSetProvider ile SocketConnection üzerinden Server üzerindeki DataSetProvider a bağlantı kurulmaktadır.
ClientDataSetProvider ise DataSourse ile diğer bileşenlerle haberleşmesi sağlanmaktadır.
Şimdi Server üzerindeki SQLQuery'nin SQLni nasıl değiştireceğimi bilmiyorum. Bunu araştırmak yerine acilen yapmak gereken hedeflerim vardı. Bu nedenlede Procedure yazmak ve params aktarmak aklıma gelen ilk çözğmdü. Params her zaman (özellikle toplu sonuçlarda) hızlılık açısından doğru bir çözümdür.
SQLe yazmakta önemli çok öenmli yazmayı henüz araştırmadığım içinde şuan birkaçtane Query fazladan koymak zorunda kaldım.
Şimdi. bu konuda daha ayrıntılı bir cevap verdiğime inanıyorum. Esas sıkıntımın serverdaki SQLe Query yazmak olduğunu biliyorum.
Bunu bir başlık altında sorsam belki daha doğru olurdu diyede düşünüyorum...
Bukonuda bilginiz varsa ve paylaşırsanız çok sevinirim.
Cevap verende de vermeyenden de Allah razı olsun.
Kolay Gelsin.
Yusuf AYDIN yazdı: Şimdi Server üzerindeki SQLQuery'nin SQLni nasıl değiştireceğimi bilmiyorum.
.....
SQLe yazmakta önemli çok öenmli yazmayı henüz araştırmadığım içinde şuan birkaçtane Query fazladan koymak zorunda kaldım.
Burada ne demek istediginizi tam anlayamadim. Server uzerinde degistiremediginiz SQLQuery nedir bir stored procedure mu yoksa bir view mi? her ikisi icin de alter komutu kullanilabilir....
Kolay gelsin.....
- Yusuf AYDIN
- Üye
- Mesajlar: 69
- Kayıt: 02 Oca 2004 05:45
- Konum: Antalya
Fahrettin beyin sorusuna cevap:
Server üzerine koyduğum. SqlQueryPlus ın Sql'ni runtime anında
Query1.SQL.Clear;
Query1.SQL.ADD('Select * from Procedure1(:Deg1,:Deg2)');
Yukarıdaki işlemi Clientdan Server üzerinde nasıl yaparım. Sorumda eksik bırktığım kısım bu sanırım. (SQL cümleciğini nasıl değiştiririm.)
Deg1, Deg2 nin Date olduğunu düşünürsek. Null ataması yapmak yerine;
Query1.SQL.Clear;
Query1.SQL.ADD('Select * from Procedure1('+QuotedStr('NULL')+','+QuotedStr('NULL')+')';
işlemiyle null göndermesini yapabilirim diye düşünmüştüm.
Ama sadece bu değil.
Başka Queryler üzerinde de bu tür Sql ni yazmam gereken yerler var.
Server üzerine koyduğum. SqlQueryPlus ın Sql'ni runtime anında
Query1.SQL.Clear;
Query1.SQL.ADD('Select * from Procedure1(:Deg1,:Deg2)');
Yukarıdaki işlemi Clientdan Server üzerinde nasıl yaparım. Sorumda eksik bırktığım kısım bu sanırım. (SQL cümleciğini nasıl değiştiririm.)
Deg1, Deg2 nin Date olduğunu düşünürsek. Null ataması yapmak yerine;
Query1.SQL.Clear;
Query1.SQL.ADD('Select * from Procedure1('+QuotedStr('NULL')+','+QuotedStr('NULL')+')';
işlemiyle null göndermesini yapabilirim diye düşünmüştüm.
Ama sadece bu değil.
Başka Queryler üzerinde de bu tür Sql ni yazmam gereken yerler var.
Belki biraz ayip olacak ama ben yine pek bir sey anlamadım. Sorun benden de kaynaklanıyor olabilir. Dun gece yorucu bir yolculuk yapmıstım.. Nesye....
SQLQueryPlus sizin kullandıgınız bir delphi componenti midir? Yoksa SQL server uzerindeki bir obje midir?
Ayrica
Kolay gelsin....
SQLQueryPlus sizin kullandıgınız bir delphi componenti midir? Yoksa SQL server uzerindeki bir obje midir?
Ayrica
demissiniz ama zaten o kod client tarafından yazilan bir kod ornegi... Elimden geldigince yardımcı olabilmek icin biraz desiyorum sorunu. Zira herkesin uzerinde calistigi sistem ve konfigurtasyonları farkli oldugu icin sizdeki durumu algilamak mumkun olamıyor.Server üzerine koyduğum. SqlQueryPlus ın Sql'ni runtime anında
Query1.SQL.Clear;
Query1.SQL.ADD('Select * from Procedure1(:Deg1,:Deg2)');
Yukarıdaki işlemi Clientdan Server üzerinde nasıl yaparım.
Kolay gelsin....
walla bende anlamadım.
GDB dediğine göre sanırım bu ya IB yada FB. e ozaman bir procedure yazabilirsin yada view ekleyebilirsin. ozaman database üzerinde istediğini çekersin,
Recep piladerim her zamanki gibi engin tecrübesini konuşturmuş, yazdığı kod da işini görür.
Bağlantı şekline gelincede client tararafında da olsa biyerlere select * ..... diye birşey yazman gerekir en azından. yani ben öyle biliyorum.
dbexpress hiç bakmadım bile o yüzdende aha şurası diyemiyorum, yöntem anlatmaya alışıyorum
Kolay gele
GDB dediğine göre sanırım bu ya IB yada FB. e ozaman bir procedure yazabilirsin yada view ekleyebilirsin. ozaman database üzerinde istediğini çekersin,
Recep piladerim her zamanki gibi engin tecrübesini konuşturmuş, yazdığı kod da işini görür.
Bağlantı şekline gelincede client tararafında da olsa biyerlere select * ..... diye birşey yazman gerekir en azından. yani ben öyle biliyorum.
dbexpress hiç bakmadım bile o yüzdende aha şurası diyemiyorum, yöntem anlatmaya alışıyorum
Kolay gele
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 !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
1. Yapacağınız iş için database üzerinde bir STORED PROCEDURE yazın.
2. STORED PROCEDURE testini Database ortamında yapın. Parametreleri de burada deneyin.
Database içerinde SQL Script olarak parametre atayarak proceduru çalıştırın. ( Eğer ResultSet döndürmüyorsa
EXECUTE PROCEDURE pocedurename 'delphi','forum','20040121' gibi olmalı. ResultSet döndürüyorsa
SELECT x,y,z FROM procedurename WHERE x='delphi', .. gibi olmalı.)
3. Bu bildirimi Delphi ortamından gönderin. Eğer bir result set yoksa direct olarak bu cümleyi gönderebilirsiniz(ExecSql oalabilir) . Bir Result set varsa, ctQuery,ctSotredPorc tarzında bir bileşenle sorguyu gönderebilirsiniz.
İlk denemelerinizde delphi içinden parametre atamayın. Parametreyi içeren stringi hazırlayıp gönderin. ( 2. adımda veri tabanı içerinde sorulamada kullandığınız gibi) Sonra parametreleri istediğniz metodla atarsınız. (zaten string olarak sorgunun içinde hazıramışsanız buna da gerek kalmaz)
Çözüm kaçamaz.
Kolay Gelsin,
2. STORED PROCEDURE testini Database ortamında yapın. Parametreleri de burada deneyin.
Database içerinde SQL Script olarak parametre atayarak proceduru çalıştırın. ( Eğer ResultSet döndürmüyorsa
EXECUTE PROCEDURE pocedurename 'delphi','forum','20040121' gibi olmalı. ResultSet döndürüyorsa
SELECT x,y,z FROM procedurename WHERE x='delphi', .. gibi olmalı.)
3. Bu bildirimi Delphi ortamından gönderin. Eğer bir result set yoksa direct olarak bu cümleyi gönderebilirsiniz(ExecSql oalabilir) . Bir Result set varsa, ctQuery,ctSotredPorc tarzında bir bileşenle sorguyu gönderebilirsiniz.
İlk denemelerinizde delphi içinden parametre atamayın. Parametreyi içeren stringi hazırlayıp gönderin. ( 2. adımda veri tabanı içerinde sorulamada kullandığınız gibi) Sonra parametreleri istediğniz metodla atarsınız. (zaten string olarak sorgunun içinde hazıramışsanız buna da gerek kalmaz)
Çözüm kaçamaz.
Kolay Gelsin,
- Yusuf AYDIN
- Üye
- Mesajlar: 69
- Kayıt: 02 Oca 2004 05:45
- Konum: Antalya