1

Konu: connections ta sınır varmı?

Arkadaşlar merhaba.

mysql veri tabanına aşağıdaki 2 yöntemle bağlanıyorum. Aynı ekran içinde 20 tabloya kadar bağlantım var.

1. yöntem:
=======
PUBLIC ex_lodo1
ex_lodo1 = CreateObject("CursorAdapter")
ex_lodo1.DataSourceType="ODBC"
ex_lodo1.ALIAS = 'grup' && acılistaki dosya adi oluyor
metin_sql = main_screen.Driver + ";SERVER=" + main_screen.lcServer + ";database=" + main_screen.lcDatabase + ";uid=" + main_screen.lcUserName + ";pwd=" + main_screen.lcPassword
ex_lodo1.DataSource=SQLStringConnect(metin_sql)
ex_lodo1.SelectCmd="select * from grup"
ex_lodo1.TABLES='grup'
ex_lodo1.CursorFill()
ex_lodo1.KEYFIELDLIST='id_record'
ex_lodo1.UpdatableFieldList = 'id_record,id,anahtar,ustanahtar,aciklama,uygulama,sezon,klup_key,hideshow'
fiels_list = 'id_record grup.id_record,id grup.id,anahtar grup.anahtar,ustanahtar grup.ustanahtar,' + ;
    'aciklama grup.aciklama,uygulama grup.uygulama,sezon grup.sezon,klup_key grup.klup_key,hideshow grup.hideshow'
ex_lodo1.UpdateNameList = fiels_list
ex_lodo1.AllowInsert = .T.
ex_lodo1.AllowUpdate = .T.
ex_lodo1.AllowDelete= .T.

sele grup
GO bottom
GO top

2. yöntem:
=======
*-- grup tablosuna baglan
sql_tut = "SELECT * FROM " + main_screen.lcdatabase + ".grup "
tablo = SQLExec(tnHandle_main,sql_tut,'grup')
If tablo < 0
    =MESSAGEBOX("Bağlantı Kurulamadı...",16,"Attention")
    Return
Endif
SELECT grup
GO bottom
GO top

2. yöntem ile istediğim kadar tabloya bağlanabiliyorum ve ekranı defalarca açıp kapattığımda hiç sorun çıkmıyor. ancak düzeltme ve yeni kayıtları her defasında mysql tarafınada SQLExec komutuyla göndermek zorunda kalıyorum. Bu külfetli biraz.

1. yöntemle bağlanırsam tabloları replace insert vs kendi tablolarım gibi kullanıyorum ve veriler mysql tarafınada otomatik yansıyor. Benim için daha kullanışlı. ANCAK ekranı 3-4 kez kapatıp açtığımda connection sağlayamıyor. aslında hatada vermiyor ancak sele grup satırına geldiğinde böle bir tablo yok diyor.

Burada ne önerirsiniz. Zahmetli olan 1. yöntemle mi devam edeyim. Diğerinde bir kaç kez ekranı kapatıp açtığımda tablolara erişememenin bi çözümü varmı?

Şimdiden teşekkürler.
Bilal

2

Re: connections ta sınır varmı?

SQLStringConnect ile bir handle donuyor (integer). Her seferinde yeni bir tane acabilirsin ya da olani kullanirsin. Oyle ya da boyle, ihtiyacin biteni de kapat. Cok sayida connection daha cok server kaynagi yemek demek. Kapatmadiklarin hemen birakilmiyor. Connection pooling diye birsey var. Pooling nedeniyle, eger ayni connectionstring'i kullaniyorsan daha once kullandigin sana hizla geri doner, ilk acilistaki gibi yavas olmaz.

Benim tercihim artik CursorAdapter kullanmaktan yana. Acikcasi bir dizi SQL* fonksiyonum var, CursorAdapter ve SQLExec'leri karma kullaniyorum.

3

Re: connections ta sınır varmı?

Çetin hocam teşekkürler.
Deneyiminize biraz daha ihtiyacım var. Çok üyelikli bir uygulama olacak. Server kaynağını en iyi şekilde kullanmak temel amacım.

2. yöntemin başına ;
*--database olarak baglan
lcStringConn= Thisform.Driver +;
    ";Server=" + Thisform.lcServer +;
    ";Database=" + Thisform.lcDatabase +;
    ";Uid=" + Thisform.lcUserName +;
    ";Pwd=" + Thisform.lcPassword

*--connect
SQLSetprop(0,"DispLogin",3)
PUBLIC tnHandle_main
tnHandle_main = Sqlstringconnect(lcStringConn)
nasıl bağlandığımız yazmayı unutmuşum. Bu şekilde aldığım handle i SQLExec ile defalarca kullanarak çok verimli bir şekilde kullanabiliyorum. Ancak 1. yöntemde tablo üzerinde update append vs daha kolay.
Eğer performans için bu yöntem en iyisi ise update append vs ler için üşenmeden kod yazacağım.
Birde 1. yöntemde ;
ex_lodo1.DataSource=SQLStringConnect(metin_sql)
satırından sonra farklı tabloları bu connection ı kullanarak nasıl açabilirim ve işim bitince bu ex_lodo1 bağlantısını nasıl kapatacağım?
release lodo1
yeterli olurmu?

Teşekkürler
Bilal

4

Re: connections ta sınır varmı?

Soru zor:) Biraz düşünüp öyle cevap vereyim.