FilemakerTurk, AYS Bilişim ve Beyaz Net tarafından desteklenmektedir.
Filemaker Danışmanınız
AYS Bilişim
Mehmet KAYA
 0532 231 07 27
 0216 318 55 80
 mkaya@aysbilisim.net
						

Execute SQL içinde değişken kullanabilir miyiz ?

+1 oy
608 kez görüntülendi
Örneğin bir tablodaki istenilen iki tarih arasındaki veriyi getirmek için şöyle bir komut kullanırız :
   Let     ([ day1 = Day ( Rapor::Başlangıç Tarihi ) ;    day2 = Day ( Rapor::Bitiş Tarihi ) ;
               month = Rapor::Ay Metin ;     year =  Rapor::Yıl ;
               decimal = Left ( Evaluate ( 1/2 ) ; 1 ) ;
               SQL =  ExecuteSQL    ( "
                   SELECT  a.\"Toplam Üretim\" , a.\"Gün\" FROM \"Takvim\" a "  &
                    "WHERE a.\"Yıl\" = ? AND a.\"Aylar\" = ?  AND a.\"Gün\" BETWEEN 17 and 23 "
                    ; "" ; ""  ;
                    year; month; day1; day2
                    ) ] ;  If ( SQL ; Substitute ( SQL; "." ; decimal ) ; 0 ) )

Ama burada sadece o ayın 17 ve 23'ü arasındaki Toplam Üretimi görürüz. Ama başlangıç bitiş tarihi seçildiğinde günler de değişir. Ve komut aşağıdaki gibi olmalıdır dedim;

"WHERE a.\"Yıl\" = ? AND a.\"Aylar\" = ?  AND a.\"Gün\" BETWEEN day1 and day2 "

Ama çalışmadı. Yardımcı olursanız sevinirim. Nerede hata yapıyorum ? Yoksa sql query içinde değişken kullanamıyor muyuz ?
5, Ocak, 2017 SQL kategorisinde atesm59 (15,270 puan) tarafından soruldu

1 cevap

0 oy
 
En İyi Cevap

Değişkenleri tırnak içinde yazınca text olarak kabul eder. Aşağıdakine benzer bir şekilde uyarlamayı deneyin.

Let ([

query = "SELECT a.\"Toplam Üretim\" , a.\"Gün\" FROM \"Takvim\" AS a WHERE a.\"Yıl\" = ? AND a.\"Aylar\" = ?  AND a.\"Gün\" BETWEEN ? AND ?";

result = ExecuteSQL ( query ; "" ; "" ; year; month ; day1 ; day2 )

];

result

)

5, Ocak, 2017 Recep Güney (69,500 puan) tarafından cevaplandı
5, Ocak, 2017 Şemsi Saracoğlu tarafından seçilmiş
bir diğer alternatifiniz de,

"SELECT a.\"Toplam Üretim\" , a.\"Gün\" FROM \"Takvim\" AS a WHERE a.\"Yıl\" = ? AND a.\"Aylar\" = ?  AND a.\"Gün\" BETWEEN" & day1 & " AND " & day2 ;

....
bunun da çalışması lazım...

"SELECT a.\"Toplam Üretim\" , a.\"Gün\" FROM \"Takvim\" AS a WHERE a.\"Yıl\" = ? AND a.\"Aylar\" = ?  AND a.\"Gün\" >=  ? AND a.\"Gün\" <=  ?" ;
Recep Güney çok teşekkürler çalıştı.
direk tanımlama yerine text kısmını önce elle bir global alan içine alıp sonra ordan set veriab le ile atama yaparsan "\" gibi karakterler sorun olmaz.
Substitute (ExecuteSQL ( "Select Sum(BORC) From Cari_Hareketler Where IslemKodu='Fatura' and Sirket_ID=degisken0 and Firma_ID=degisken1 ";"";"" ); "." ;"," )

Recep bey ben yukarıdaki sorguyu çalıştıramadım sebebide değişken kullanmayı bilmiyorum SQL mantıgını basit kavramlarda çözdüm ancak örneklerinize göre ne kadar denesem başaramadım. yardımcı olabilirseniz ben geliştirebilirim.

Değişkenlerim  "degisken0" ve "degisken1"  ; Global olabilir mi ? veya başka tablodan olabilir mi ?
Global alan ve Değişken kullanabilirsiniz. Bunların haricinde başka bir tablodan değer alamazsınız.

ExecuteSQL ( "Select Sum(BORC) From Cari_Hareketler Where IslemKodu= ? and Sirket_ID =? and Firma_ID= ?" ; "" ; "" ; Fatura ; $degisken01 ; degisken02)
...