Zeos ve MyDac

Yapmak istediğiniz işle ilgili doğru bileşeni bulmak için burayı kullanabilirsiniz. Sadece bulmak için, diğer sorular Programlama forumuna lütfen.
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Cevapla
Kullanıcı avatarı
ovural
Üye
Mesajlar: 167
Kayıt: 22 Eki 2003 10:20
İletişim:

Zeos ve MyDac

Mesaj gönderen ovural »

Merhaba ,

Uzun süredir (10 yıl kadar) projelerimizde MySQL veritabanı kullanıyoruz .. Zeos komponentleri işimizin çok büyük kısmını rahatlıkla görüyor ..

2 sıkıntı yaşıyoruz .. çözüm arayışı içindeyim .. kendi forumuna da yazdım ..

1. MySQL SP lerde oluşan hataların detaylarını alamıyorum "Cannot retrieve Resultset Data" hata mesajını alıyorum ..
2. Backup ve yedekleme işlemlerinde sıkıntı yaşayabiliyorum .. MySQL GUI olarak HeidiSQL kullanıyorum .. buradan aldığım yedekleri TZQLProcedure işlerken delimiterlarda takla atmamız gerekebiliyor ..


MyDAC'ı biraz test ettim bu sıkıntılarımızı aşmış gözüküyor .. ancak projelerin tamamında MyDAC kullanmadan önce yaşabileceğim sıkıntılar yada püf noktaları bilenler paylaşabilir mi ?

Örnek Zeos un 7.1.4 versiyonunda karşılaştığım püf noktalar
1. UseMetaData Parametresini false yaptığımızda ZQuery lerin Edit ve Post işlemlerinda hata alıyoruz işlem gerçekleşmiyor.
2. SqlHourGlass (İmlecin simgesinin sorgularda değiştirilmesi ) True yapılırsa MySQL sorgularında yavaşlık oluyor ..


gibi MyDAC ında dikkat etmemiz gereken birşey varmıdır ? mesela testlerimde şununla karşılaştım ..

Server Adresi yanlış yada eksik olursa Delphi yi durduruyor ..


Tecrübesi olanlardan yorumlarını bekliyorum
Kim ilim öğrenir sonra da onu gizlerse âhirette onun ağzına ateşten bir gem vurulur. (Hadis-i Şerif)
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Zeos ve MyDac

Mesaj gönderen vkamadan »

Merhabalar,
2011 yılından bu yana MyDAC bileşenlerini kullanıyorum ,
Genel olarak son derece memnunum ,
sizin belirttiğiniz noktalar üzerinden gidecek olursak ,
Yedekleme ve yedekten geri dönme bileşeni (TMyDump) gayet sorunsuz ayrıca iş süreçlerini görsel olarak göstermek için de olaylar sunuyor (OnBackupProgress , OnRestoreProgress gibi..) ayrıca yedekleyeceğiniz yada geri yükleyeceğiniz veritabanının boyutunun hiç bir önemi yok yazrken de okurkende diskten parça parça işlem yapıyor bellek sorunları yaşamıyorsunuz.
SP leri normal TMyQuery ile EXECUTE diyerek çalıştırabileceğiniz gibi sırf bu işler için TMyStoredProc bileşeni sunuyor,
MySQL komut satırından yada editörlerden uygulanabilen tüm komutları çalıştırabilmesniz için amacına uygun bileşenler sunuyor mesela , MAster-Slave bir MySQL konfigürasyonunda show slave status vb gibi komutları TMyQuery yada TMyScript ile çalıştıramıyorken TmyCommand isimli bileşenle çalıştırabiliyorsunuz. geçersiz bir sunucu adresi yazdığınızda Delphinin kilitlenmesi konusunu hiç yaşamadım belki sürümlerle ilgili olabilir.
Eğer SSH arkasında bir MySQL e erişmeniz gerekirse DevArt ın SecureBridge setini kullanmak şartıyla MyDAC doğrudan SSH ve SSL desteği sağlıyor.
Son derece hızlı.
Bahsetmeden geçemeyeceğim müthiş bir özellik , TMyConnection üzerinde "Data Type Mapping" özelliği mevcut bu özellik sayesinde Delphi nin veritabanı alanlarını nesneleştirirken (uygun TField tipine dönüştürürken) varsayılan da tercih ettiği haritayı değiştirebiliyorsunuz, bunu bir örnekle açıklamaya çalışayım bir MySQL sorugunuzda SQL içinde hesaplanan bir sahanız var ve bu saha bazı durumlarda delphide TIntegerField sınırlarında olurken bazı durumlarda TLageIntField sınırlarına çıkabiliyor ve sizinde bir mecburiyetten dolayı mutlaka dataset içinde bu alanı nesne olarak ekleyerek kullanma durumunuz var diyelim, kaçınılmaz olarak bazı durumlarda "Type Mismatch excepting integer actuel LargeInt" gibi bir hata alacaksınız, bu editör sayesinde ise TLargeIntField gereksede sen bunları TIntegerField olarak yorumla yada daha detaylı boyut sınırları da vererek haritaya müdehale edebiliyorsunuz. ücretini hakeden bir çözüm olduğunu söyleyebilirim.

İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
ovural
Üye
Mesajlar: 167
Kayıt: 22 Eki 2003 10:20
İletişim:

Re: Zeos ve MyDac

Mesaj gönderen ovural »

öncelikle mesajınız için teşekkür ederim ..

Peki MyConnection komponentinde Compress özelliği mevcut ama ayrıntılı test etmedim .. kullanıyormusunuz ?

bunun ile ilgili özellikle uzak bağlantılarda ve büyük listelerde zeos daki süre 200 saniyeye kadar çıkabiliyor ..
Kim ilim öğrenir sonra da onu gizlerse âhirette onun ağzına ateşten bir gem vurulur. (Hadis-i Şerif)
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Zeos ve MyDac

Mesaj gönderen mkysoft »

Bildiğim kadarıyla compression desteğini veren bileşen değil, bağlanmak için kullandığımız dll dosyası. Bu nedenle performansa etkisi olmayacaktır diye düşünüyorum.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Zeos ve MyDac

Mesaj gönderen vkamadan »

Merhabalar ,
Compress özelliğini kullanmadım.
@mkysoft https://www.devart.com/mydac/ burada mysql client library olmaksızın doğrudan bağlanır diyor bu sebeple belki compression konusunda farklı bir deneyim yaşatabilir düşüncesindeyim.

iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
ovural
Üye
Mesajlar: 167
Kayıt: 22 Eki 2003 10:20
İletişim:

Re: Zeos ve MyDac

Mesaj gönderen ovural »

küçük bir test yaptım ..

internetteki bir bilgisayarda

1814 kayıt için ..

compress özelliği aktif değilken 15 saniye civarı zeos ve mydac ..

mydac in compress true olduğunda 8 saniye ..

zeos da Zconnection Properties özelliğine compress=1 eklenirse zeos da sıkıştırma yapıyor ..


sıkıştırma işlemlerinde veri kaydetme vs.de sorun olmaz sanırım ??
Kim ilim öğrenir sonra da onu gizlerse âhirette onun ağzına ateşten bir gem vurulur. (Hadis-i Şerif)
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Zeos ve MyDac

Mesaj gönderen vkamadan »

Merhaba hızlıca bir test ettim Compress := True iken bir limitasyon yok normal çalışıyorsunuz bir sıkıntı gözlemlemedim.
iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
ovural
Üye
Mesajlar: 167
Kayıt: 22 Eki 2003 10:20
İletişim:

Re: Zeos ve MyDac

Mesaj gönderen ovural »

2. sorunumu çözdüm .. zeos un restore işlemlerinde 6.6 versiyonlarında delimiterType özelliğinde dtdelimiter özelliği yoktu ..

sonrasında eklenmiş sanırım 7.1.4 versiyonunda var dolayısıyla delimiter sorunum ortadan kalktı ..

dump işlemi için şimdilik mysqldump ı kullanıyoruz ..


1. sorunum için araştırma yapıyorum çözüm bulursam dönerim ..

procedurelerde işlemler sonucunda id dönüyor .. bu yüzden

Kod: Tümünü seç

ZQuery.SQL.Text:='select procedure_ismi()';
ZQuery.Open;

ZQuery.Fields[0].AsInteger ......

 
şeklinde çalışıyoruz .. tabi procedure de bir hata olunca Zeos da "Cannot Retrieve Resultset Data" hatası alıyorum ..detail hatayı alamadım ..

MyDac direk hatayı veriyor ..

projede MyDac a geçmeye cesaret edemedim henüz ..
Kim ilim öğrenir sonra da onu gizlerse âhirette onun ağzına ateşten bir gem vurulur. (Hadis-i Şerif)
Kullanıcı avatarı
ovural
Üye
Mesajlar: 167
Kayıt: 22 Eki 2003 10:20
İletişim:

Re: Zeos ve MyDac

Mesaj gönderen ovural »

"Cannot retrieve Resultset Data" Data hatası ile ilgili Sorunuda çözdüm ..

sorun hakkında kısa bilgi vereyim .. yazdığımız functionlarda belli işlemler yapıldıktan sonra geriye sonuç döndürüyoruz ..

Kod: Tümünü seç

ZQuery.SQL.Text:='select procedure_ismi()';
ZQuery.Open;
Hata Oluştuğunda result set geri gelmediği için direk "Cannot retrieve Resultset Data" hatası veriyordu .. detay hatayı alma ile ilgili
aşağıdaki düzenleme ile sorunu çözmüş olduk ..

ZDbcMySqlResultSet.pas dosyasında

Uses kısmına

Kod: Tümünü seç

ZDbcLogging; 
ekliyoruz


procedure TZMySQLResultSet.Open;

aşağıdaki şekilde değiştirdim ..

Kod: Tümünü seç

procedure TZMySQLResultSet.Open;
var
  I: Integer;
  FieldHandle: PZMySQLField;
  LogSQL: String;
begin
  if ResultSetConcurrency = rcUpdatable then
    raise EZSQLException.Create(SLiveResultSetsAreNotSupported);

  if FUseResult and (not FIgnoreUseResult) then
  begin
    FQueryHandle := FPlainDriver.UseResult(FHandle);
    LastRowNo := 0;
  end
  else
  begin
    FQueryHandle := FPlainDriver.StoreResult(FHandle);
    if Assigned(FQueryHandle) then
      LastRowNo := FPlainDriver.GetRowCount(FQueryHandle)
    else
      LastRowNo := 0;
  end;

  if not Assigned(FQueryHandle) then
  begin
    CheckMySQLError(FPlainDriver, FHandle, lcExecute, LogSQL);
    raise EZSQLException.Create(SCanNotRetrieveResultSetData);
  end;

  { Fills the column info. }
  ColumnsInfo.Clear;
  for I := 0 to FPlainDriver.GetFieldCount(FQueryHandle) - 1 do
  begin
    FPlainDriver.SeekField(FQueryHandle, I);
    FieldHandle := FPlainDriver.FetchField(FQueryHandle);
    if FieldHandle = nil then
      Break;

    ColumnsInfo.Add(GetMySQLColumnInfoFromFieldHandle(FPlainDriver,
     FieldHandle, ConSettings, FUseResult));
  end;

  inherited Open;
end;
Kim ilim öğrenir sonra da onu gizlerse âhirette onun ağzına ateşten bir gem vurulur. (Hadis-i Şerif)
Cevapla