Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Sql Management'da çalışan komut Delphi'de çalışmıyor.
#1
Photo 
Sql management çalışan komut delhi de çalışmıyor


Sql komutu : 
select S_IMALAT_NO,S_SIPARIS_NO,S_KAPI_MODEL,S_KAPI_YON,CASE When S_AKTARIM=0 THEN 'H' ELSE 'E'  END ,S_NOT1,S_NOT2 from SiparisDbf where S_GITTI <> 1

sonuç :
İ S  Açıklama                                    Yön A 
1 1 KLASİK ÇİFT KANAT ÇELİK KAPI SAG E
2 2 KLASİK ÇİFT KANAT ÇELİK KAPI SAG H
3 3 KLASİK ÇİFT KANAT ÇELİK KAPI SAG H
4 4 KLASİK ÇİFT KANAT ÇELİK KAPI SAG E
5 5 KLASİK ÇİFT KANAT ÇELİK KAPI SAG H
6 6 KLASİK ÇİFT KANAT ÇELİK KAPI SAG H
7 7 KLASİK ÇİFT KANAT ÇELİK KAPI SAG H
8 8 KLASİK ÇİFT KANAT ÇELİK KAPI SAG H  

Delphi Komutu (TADOQuery kullanıyorum.)
data_form.siparis_verial('select S_IMALAT_NO,S_SIPARIS_NO,S_KAPI_MODEL,S_KAPI_YON,CASE When S_AKTARIM=0'+ ' THEN '+QuotedStr('H')+' ELSE '+QuotedStr('E')+'  END '+' ,S_NOT1,S_NOT2 from SiparisDbf where S_GITTI <> 1 AND S_BAYI_ADI= ' + QuotedStr(cmb_bayi.Text));

sonuç :
İ S  Açıklama                                    Yön A 
1 1 KLASİK ÇİFT KANAT ÇELİK KAPI SAG 
2 2 KLASİK ÇİFT KANAT ÇELİK KAPI SAG 
3 3 KLASİK ÇİFT KANAT ÇELİK KAPI SAG 
4 4 KLASİK ÇİFT KANAT ÇELİK KAPI SAG 
5 5 KLASİK ÇİFT KANAT ÇELİK KAPI SAG 
6 6 KLASİK ÇİFT KANAT ÇELİK KAPI SAG 
7 7 KLASİK ÇİFT KANAT ÇELİK KAPI SAG 
8 8 KLASİK ÇİFT KANAT ÇELİK KAPI SAG  

Case de bulunan A alanı  sql de sorunsuz çalışıyor ve E veya H olarak raporluyor.
Delphi tarafından işlenince Boş geliyor hata vermiyor.
nedeni ne olabilir
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#2
Merhaba,

sql management'teki SQL kodu ile  ile delphi'deki SQL kodu aynı değil. WHERE kısmına dikkat et. Ayrıca CASE kısmına bir alias tanımlamamışsın

Kodunu sadeleştirmek adına bunu şu şekilde yazabilirsin, böyle daha okunabilir olacaktır;


data_form.siparis_verial(format('select S_IMALAT_NO,S_SIPARIS_NO,S_KAPI_MODEL,S_KAPI_YON,CASE When S_AKTARIM=0 THEN %s ELSE %s  END as [A] ,S_NOT1,S_NOT2 from SiparisDbf where S_GITTI <> 1', 
[QuotedStr('E'), QuotedStr('H')])   );



kolay gelsin.
Cevapla
#3
(06-04-2017, Saat: 16:36)cengaver Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,
sql management'teki SQL kodu ile  ile delphi'deki SQL kodu aynı değil. WHERE kısmına dikkat et. Ayrıca CASE kısmına bir alias tanımlamamışsın
Kodunu sadeleştirmek adına bunu şu şekilde yazabilirsin, böyle daha okunabilir olacaktır;

data_form.siparis_verial(   format('select S_IMALAT_NO,S_SIPARIS_NO,S_KAPI_MODEL,S_KAPI_YON,CASE When S_AKTARIM=0 THEN %s ELSE %s  END as [A] ,S_NOT1,S_NOT2 from SiparisDbf where S_GITTI <> 1', 
[QuotedStr('E'), QuotedStr('H')])   );

Cevabınız için teşekkür ederim
sql management'teki SQL kodu ile  ile delphi'deki SQL kodu aynı değil. WHERE kısmına dikkat et.   

Program tarafında bayi ismine göre listeleme ihtiyacından dolayı  kod farklı  
Alias  tanımlamaya ihtiyacım yok bana A alanının içeri lazım.
Sorgunun DataSource Dbgrid e bağlıyorum.

data_form.siparis_verial(   format('select S_IMALAT_NO,S_SIPARIS_NO,S_KAPI_MODEL,S_KAPI_YON,CASE When S_AKTARIM=0 THEN %s ELSE %s  END as [A] ,S_NOT1,S_NOT2 from SiparisDbf where S_GITTI <> 1', [QuotedStr('E'), QuotedStr('H')])   );

Bu şekilde de sonuç değişmedi. Sorgudan veri geliyor.   A alanı boş


data_form.siparis_verial('select S_IMALAT_NO,S_SIPARIS_NO,S_KAPI_MODEL,S_KAPI_YON,S_AKTARIM,S_NOT1,S_NOT2 from SiparisDbf where S_GITTI <> 1 AND S_BAYI_ADI= ' + QuotedStr(cmb_bayi.Text));
Kodu case bölümü olmadan  yukarıdaki gibi kullandığımda A alanı True veya False olarak geliyor.
Sql Database 2016 kullanıyorum tablo da A alanı Byte
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#4
Kodu aşağıdaki şekilde düzenleyince düzgün şekilde çalışıyor. S_AKTARIM alanının NULL olması durumunda bile A sütunu dolu geliyor.
SELECT 
 S_IMALAT_NO,
 S_SIPARIS_NO,
 S_KAPI_MODEL,
 S_KAPI_YON,
 CASE WHEN
   S_AKTARIM = 0 THEN 'H' 
 ELSE 'E'  
 END AS [A],
 S_NOT1,
 S_NOT2 
FROM
 SiparisDbf 
WHERE 
 S_GITTI <> 1 AND 
 S_BAYI_ADI = 'BayiAdi'

Bu arada komutları tek satırda yazmak yerine satırlara bölmek anlaşılmayı kolaylaştıracak ve hataları kolay bulmanızı sağlayacaktır.
WWW
Cevapla
#5
Sayın Csunguray
ilginize teşekkür ederim.
Kod yazma düzeni için daha dikkatli olmaya çalışacağım ama inanın alışkanlıkları değiştirmek çok zor oluyor.

Yanlışım varsa düzeltin lütfen hatam varsa özür dilerim 
sizin gönderdiğiniz kod.
sql için düzenlenmiş sql management New query seçim kodu yapıştırın 
Tam sizin söylediğiniz gibi çalışıyor.  Smile
İlk mesaj da belirtiğim gibi

Case de bulunan A alanı  sql de sorunsuz çalışıyor ve E veya H olarak raporluyor.
Delphi tarafından işlenince Boş geliyor hata vermiyor. Huh
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#6
delphi tarafında dataseti open etmeden önce datasetin sql ini showmessage ile gösterip karşılaştırmayı denedinizmi.

“Do. Or do not. There is no try.”
Cevapla
#7
(07-04-2017, Saat: 10:05)masteryoda Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Oldelphi tarafında dataseti open etmeden önce datasetin sql ini showmessage ile gösterip karşılaştırmayı denedinizmi.

evet denedim ekteki dosyada resmi var. 
Ben şu an sorunu Sql tarafında yaptım.
Tablonun ekle ve düzeltme işlemleri için tetikleyici kullandım.
Not : CASE When S_AKTARIM=1 S_AKTARIM='True' Sql tarafında aynı anlamda olumlu olarak değerlendiriliyor.
Sonuç olarak aşağıdaki showmessage de yazan komutu Management te çalıştırın A alanı E veya H olarak geliyor
Delphi de boş geliyor.


Ek Dosyalar Resimler
   
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#8
Delphi de boş gelmesi doğaldır çünkü, gridde muhtemelen A alanını field olarak A seçtiniz, fakat kodunuzda "case...when" END den sonra bu kısma AS A dememişsiniz, doğal olarak source, dataset te A adında bir field bulamadığı için boş geçiyor.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#9
(07-04-2017, Saat: 15:46)esistem Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlDelphi de boş gelmesi doğaldır çünkü, gridde muhtemelen A alanını field olarak A seçtiniz, fakat kodunuzda "case...when" END den sonra bu kısma AS A dememişsiniz, doğal olarak source, dataset te A adında bir field bulamadığı için boş geçiyor.

Sayın esistem cevabınız için teşekkür ederim.
Kodun ilk hali aşağıdaki gibi  sonradan üzerinde testler yaparken o kadar çok değişiklik yaptım ki
kafam karıştı sql tarafı ile sorunu halletmiştim.
Pazartesi sizin mesajınız doğrultusunda tekrar bakacağım.
Siz yukarıdaki resim ve kod örneğine bakarak yorumladınız.

Ustam derdi ki bir iş gayret gösterdiğin halde  olmuyorsa olduğu yerde bırak sevdiğin farklı bir iş yap 
sevdiğin biri ile görüş çay iç sonra gel yeni yapıyormuş gibi yap.
Her zaman işe yaradı inşallah bu işte de yarayacaktır.  Smile
Emeği bilgisi geçen herkese teşekkür ederim.

procedure TFrm_Sevk_Yeni.cmb_bayiChange(Sender: TObject);
begin
data_form.siparis_verial('select S_IMALAT_NO,S_SIPARIS_NO,S_KAPI_MODEL,S_KAPI_YON,(CASE S_AKTARIM When 1 THEN '+QuotedStr('E')+' ELSE '+QuotedStr('H')+'  END) as [A] '+',S_NOT1,S_NOT2 from SiparisDbf where S_GITTI <> 1 AND S_BAYI_ADI= ' + QuotedStr(cmb_bayi.Text));
DbGrd_Siparis.Columns[0].Field := data_form.siparis_dataset.FieldByName('S_IMALAT_NO');
DbGrd_Siparis.Columns[1].Field := data_form.siparis_dataset.FieldByName('S_SIPARIS_NO');
DbGrd_Siparis.Columns[2].Field := data_form.siparis_dataset.FieldByName('S_KAPI_MODEL');
DbGrd_Siparis.Columns[3].Field := data_form.siparis_dataset.FieldByName('S_KAPI_YON');
DbGrd_Siparis.Columns[4].Field := data_form.siparis_dataset.FieldByName('A');
DbGrd_Siparis.Columns[5].Field := data_form.siparis_dataset.FieldByName('S_NOT1');
DbGrd_Siparis.Columns[6].Field := data_form.siparis_dataset.FieldByName('S_NOT2');
DbGrd_Siparis.DataSource := data_form.siparis_kaynak;
end;
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#10
Yalnız hocam @csunguray 'ın dediği gibi, kodu daha okunaklı şekilde yazarsan hataları çok daha çabuk görüp çözebilirsin.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  MSSQL Veri Tabanı Yedekleme Sıkıştırma ve FTP ye Gönderim - Delphi Konsol Uygulaması mad85 0 193 09-11-2017, Saat: 13:32
Son Yorum: mad85
  SQL Server Management Studio Nasıl Onarılır ? DelphiCanR 0 437 03-05-2017, Saat: 10:46
Son Yorum: DelphiCanR
  Komut Satırından Yedekleme/Geri Yükleme DelphiCanR 2 426 08-03-2017, Saat: 13:03
Son Yorum: DelphiCanR
  Ms sql ile çalışan masaustu program baglantı kesilmesi hk. meteyus 7 779 14-01-2017, Saat: 01:17
Son Yorum: barutali



Konuyu Okuyanlar: 1 Ziyaretçi