Alt sorgular,

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Burhan_ast
Üye
Mesajlar: 143
Kayıt: 15 Haz 2003 08:33
Konum: Almaty, Kazakhstan

Alt sorgular,

Mesaj gönderen Burhan_ast »

Arkadaslar merhaba,

Yazdigim programda Ms-Sql Server 2000 kullaniyorum ama istiyorumki kullanici bu veritabanina mahkum kalmasin ve sistem Ms-Sql server, My-Sql, Interbase gibi sistemlerdede calissin Sadece kullanicinin istegine gore programin ilgili veritabanina yonelmesi lazim, oncelikle bunun icin tavsiyeleriniz nelerdir, nelere dikkat etmeliyim, ve ayrica Sql server'da kullandigim asagidaki sekilde bir sorgu var bu kollandigim sorgulamalar tum sql tabanli veritabanalarinda gecerlimidir yoksa calismama ihtimali varmidir,

Ornegin

Kod: Tümünü seç

        Tbl_Birim.Close;
        Tbl_Birim.sql.Clear;
        Tbl_Birim.Sql.Add('Select LOGICALREF,BARCODE, CONVFACT2, CONVFACT1, 
        Tbl_Birim.Sql.Add('       (Select NAME  From '+Frm_ana_form.Database_name+'.Dbo.Lg_'+Frm_ana_form.Sirket_no+'_UNITSETL Where (LOGICALREF=Stk_bir.UNITLINEREF)) AS NAME');
        Tbl_Birim.Sql.Add('From '+Frm_ana_form.Database_name+'.Dbo.Lg_'+Frm_ana_form.Sirket_no+'_ITMUNITA as Stk_bir');
        Tbl_Birim.Sql.Add('Where ITEMREF = '+Tbl_Stok.FieldByname('Kayit_no').text);
        Tbl_Birim.Sql.Add('Order by LINENR');
        Tbl_Birim.ExecSQL;
        Tbl_Birim.Open;

Ornektede goruldugu gibi alt sorgular var tum sistemler bu tip sorgulamalari desteklermi,

Burhan Cakmak
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

ÖMncelikle kodda gördüğüm bir hatalı kullanımı düzelteyim :)
ExecSQL ve ardından Open demişsin.

ExecSQL, eğer sonuçta herhangi bir result set dönmeyecekse kullanılan bir method, Open ise sonuçta bir result set döndürecekse kullanılan bir methoddur.

Ard arda kullanman, programı yavaşlatmaktan başka bir işe yaramaz. (Senin gönderdiğin örnekte)

Şimdi gelelim diğer meseleye,
Evet her SQL'in kendine özgü bir takım fonksiyon veya kullanım şekilleri vs. vardır. Örneğin MS-SQL Server'da IDendity field kavramı varken bunun yerine Interbase/Firebird'de ise Generator'ler var. Oracle'da başka Informix'te başka :) Bu sebeple yazdığın programlar eğer SQL92 gibi standard (pure SQL) ise , örneğin *= yerine OUTER JOIN, INNER JOIN gibi komutlarla yapıyorsan o zaman mümkün olabilir. Onun dışında her SQL servera ait kendi özgün özellikleri kullanıyorsan mümkün olmaz. Bir de bildiğim kadarı ile ilave edeyimn MySQL'de trigger yok ! (Yanlışsa bilen arkadfaşlar düzeltsin :) ama benim bildiğim bu)

Ayrıca Trigger veya Stored Procedure yazarken de bu standardlara bağlı kalman lazım. Örneğin Interbase'de triggerlar için Before veya After kullanabilirken, MS-SQL Server'da başka bir takım ayarlar yaparak trigger'ın tetiklenmesini değiştirebiliyorsun.

Gibi gibi gibi bir sürü dikkat edilmesi gereken nokta var. Eğer bunları göz önüne alır standard dışında başka bir şey kullanmadan yazacağım derseniz olma ihtimali var. Olma ihtimali dedim, çünkü bazen da table sınırı, stored procedureden başka bir procedure'u çağıramama gibi bir takım kısıtlara tosluyorsunuz ve bir SQL serverda çalışan kod, diğerinde çalışmayabiliyor :)

Eh bu da işi yapanı bayağı bir zora sokuyor.

Umarım yardımcı olabilmişimdir.

Kolay gelsin,
Herkese Hayırlı Bayramlar :)
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7588
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

birden çok veritabanında çalışma çok konuşulan bir konu. Genel kanaat ve benim de kanaatim standart SQL komutları ile işin büyük kısmını veritabanında yapmak. Burda dikkat edilmesi gereken her türlü veritabanının desteklediği standart SQL'i kullanmanız. Stored proc ve trigger kullanarak işlemleri yapmanız.

Böyle olsa bile yine program tarafında ufak tefek düzenlemeler gerekecektir.

Kuri_TLJ'nin de dediği gibi mySQL henüz stored proc ve trigger desteklemiyor. Ancak Oracle, SQL Server, Firebird, Interbase, Sybase, DB2 gibi birçok veritabanında bu yöntem işe yarayacaktır.

İyi günler.
Burhan_ast
Üye
Mesajlar: 143
Kayıt: 15 Haz 2003 08:33
Konum: Almaty, Kazakhstan

Tsk,

Mesaj gönderen Burhan_ast »

Arkadaslar ilginize tesekkur ederim, saygilar,

Burhan Cakmak
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

Bütün Arkadaşlarımın Mübarek Ramazan Bayramını kutlar, Sağlıklı Mutlu günler Dilerim.
MySql in 5.0 (Daha Test Aşamasında) ve üzeri versiyonlarında yalnış tercüme etmediysem , Stored Procedures ve Triggers fonksiyonlarının eklendiğini , Ayrıca SQL99 standardlarının getirildiği yazılmış. http://www.mysql.com/doc/en/ANSI_diff_Triggers.html
Selamlar...
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Evet arkadaslarin soylediklerine ilaveten standart SQL komutlarini kullansaniz bile bir cok veritabaninda trigger ve stored procecedure create komutlari bile farklidir. Bunun ornegini triggerve stored procedure kullanımı ile ilgili olan su makalede (Sybase ASA ve Interbase icin) gorup karsilastirma imkani var.

viewtopic.php?t=644

Bu sebepten dolayi kullanicinin secimi ile bir veritabanina yonlenebilmek icin ya sizin olasi veritabanı alternatifleri icin bos veritabanlarini kurulum cd'si ile birlikte vermeniz ya da bunlari runtime'da create etmeniz gerekmektedir. Fakat runtime'da create etmek biraz zor olabilir. Cunku her veritabani icin bunun yontemi farklidir ve arge yapmaniz gerekebilir. Oysa sizin elle bos veritabanini create etmeniz daha kolaydir. Yani kurulum setinizin icinde veritabninizin nterbase icin GDB uzantili Sybase icin DG uzantili vs... seklinde bos veritabanlarini vererek kullanıcının tercihine gore bunlardan uygun olanini kullanmak en uygun cozum olur bence.

Tabi sunu belirtmeliyim ki sizin onceden planlamadiginiz bir veritabaninin kullanılması su anki kanaatime gore imkansiz gibi duruyor. Ya da pratik olarak imkansiz demek daha dogru olur belki.

Alternatif bos veritabanklarini dagitabilmek icin de en kolay yontem guzel bir veritabani tasarim araci kullanmaktır. Erwin, Power Designer vs.. gibi... Bunlar sayesinde siz veritabanini lojik olarak bir defa tasarlayip sadece hedef veritabanini degistirerek o veritabanina gore tablolarininizin ve triggerlarinizin kolayca create edilmesini saglayabilirsiniz. Boyle bir tasarim araci ile veritabanınızı colk daha kolay yonetebilir cok daha hakim olabilirsiniz ve de istediginiz anda farkli bir veritabanı uzerine tasiyabilirsiniz.

MySQL'in client server bir veritabani olmayip aslen paradox mantıgında file based bir yapı oldugunu ben de biliyordum. Hatta sirkete aldigimiz MySQL kitabinda desteklenmeyenler basligi altinda trigger, stored procedure, transaction vs... bir cok sey yazmakta idi.... FakatBerdem'in de dedigi gibi galiba MySQL artik gercek bir veritabani oluyor. Fakat kullanıcı aynı adresteki kullanıcı yorumlarına bakınca bu versiyonunun
paralı oldugu belirtilmekte.

Kolay gelsin......
Cevapla