FireBirdde onarma işlemi nasıl yapılır?

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
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

FireBirdde onarma işlemi nasıl yapılır?

Mesaj gönderen baloglurecep »

selamlar arkadaşlar...
FireBird veri tabanında filitrede client makinelerde geç cevap almaktatım. client makinelerde filitre makineyi müthiş kasmakta. klavyede tuşa basılıyor bir kaç sanyie sonra cevap veriyor. veri tabanını bir onarmayı deneyeceğim. bayağı araştırdım bilgiye ulaşamadım. delphi içinden veri tabanını onarma işlemi yapamıyoruz galiba. peki bunu iexpert ile nasıl yaparız. bu konuda bilgisi olan yardımcı olabilir mi ? Müşteri filitre iki tablodan bilgi alarak çalışıyor.

bilgi için herkese teşekkürler
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: FireBirdde onarma işlemi nasıl yapılır?

Mesaj gönderen aslangeri »

s.a.
eğer veritabanında bir problem olsa yavaş değil hiç tepki vermez veya hata alırsın. bi problem olduğu ortada ama sorunun ne olduğu konusunda verdiğiniz bilgilerle tahminden öteye gidemeyiz.
onarmak için validasyon yapabilirsiniz.(ama problem olmadığı için bu işinize yaramayacaktır).
Bir diğer önerim backup restore yapmanız. eğer çöp kayıtlarınız fazla ise bu yavaşlamaya neden olabilir.
indexlerinizi kontorl edin.
bir ihtimalde kodlarınızda birşeyler olabilir.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: FireBirdde onarma işlemi nasıl yapılır?

Mesaj gönderen emin_as »

Sunucu olarak kullandıgın makinada eger hız sorunu yoksa, problem firebirdden degil, iletişim veya programın tasarımından olabilir.

Hangi componenetlari kullandıgını ve tabloların büyüklüğünü bilemedigim için daha ayrıntılı yorum yapamıyorum.

Filtre işlemi için ibtable gibi bir component kullanıyorsan, ibtable in performansı çok kötüdür, tüm tabloyu yükler, o nedenle ibdataset in selectsql özelliğini kullanmanda fayda var, eger bilgi üzerinde degişiklik yapmıyorsan, ibquery daha da uygundur.

Çok büyük veritabanlarına client üzerinden ulaşmak istiyorsan, multitier gibi bir tasarıma yönelmelisin.
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: FireBirdde onarma işlemi nasıl yapılır?

Mesaj gönderen baloglurecep »

Selam arkadaşlar tekrar.... firebird için delphiden bağlantı seti için FIBPLUS adlı bi bişene seti seti kullanmakyız. tüm işlemleri dataset ile sağlamaktayız. arama filitreleme, kayıt tüm işlerler dataset ile sağlanmakta. filitrde bir procedure oluşturarak gerektiği yerde procedureyi çağırdık. procedure içeriği aşağıdaki gibidir.

iki tablodan bilgi almakta. bir tabloda müşteriler, diğerinde müşterilern bakiyeleri tutulmakta.
Bilgileriniz için şimdiden teşekkürler....

var order,sart :string;
begin

if not(visible) then exit; // bu kodu kullanmazsam delphiden derleme esnasında hata vermekte. ama exe de vermiyor. bu kod kullanılırsa delphide de vermiyor.

if ASC.Checked=true then sart:=' asc'; ///artan sıralama
if DESC.Checked=true then sart:=' desc'; /// azalan sıralama

if ALAN2.Checked=TRUE then order:= ' musteriler.adres'+sart;
if ALAN1.Checked=TRUE then order:= ' musteriler.adi_soyadi'+sart;
if ALAN4.Checked=TRUE then order:=' musteriler.barkod'+sart;
if ALAN3.Checked=TRUE then order:= ' musteriler.EPOSTA'+sart;
if ALAN5.Checked=TRUE then order:=' musteriler.telefon'+sart;
if ALAN6.Checked=TRUE then order:= 'musteriler.DEFTER_NO'+sart;
if ALAN8.Checked=TRUE then order:= ' musteriler.id'+sart;
if ALAN7.Checked=TRUE then order:= ' musteriler.adi_soyadi'+sart;


IF ORDER='' THEN ORDER:='musteriler.Adi_soyadi';

with dm.musteri_Query do
Begin
Close;
SelectSQL.Clear;
SelectSQL.Add('select musteriler.id, musteriler.adi_soyadi, musteriler.telefon, musteriler.telefon1, musteriler.eposta, musteriler.odeme_araligi, musteriler.resim, musteriler.defter_no, musteriler.sayfa_no, musteriler.gizle, musteriler.adres,');
SelectSQL.Add ('musteriler.limit, musteriler.son_odeme, musteriler.tc_kimlik, musteriler.barkod,bakiyeler.odemeler,bakiyeler.odemeler_taksit,bakiyeler.iadeler,bakiyeler.satis,bakiyeler.taksitlisatis,');
SelectSQL.Add('(bakiyeler.satis+bakiyeler.taksitlisatis) AS TOPLAM_SATIS ,');
SelectSQL.Add('(bakiyeler.odemeler + bakiyeler.odemeler_taksit) AS TOPLAM_ODEMELER,');
SelectSQL.Add('(bakiyeler.satis+bakiyeler.taksitlisatis - bakiyeler.odemeler - bakiyeler.odemeler_taksit) AS TOPLAM_BAKIYE');
SelectSQL.Add('from musteriler inner join bakiyeler on (musteriler.id = bakiyeler.musteri_id)');
SelectSQL.Add('where musteriler.gizle = 0');


if bsSkinCheckRadioBox1.Checked=true then /// burda bakiye sıfırdan büyük olanları göster kısmı çalışmakta
SelectSQL.Add(' AND (bakiyeler.satis+bakiyeler.taksitlisatis - bakiyeler.odemeler-bakiyeler.odemeler_taksit)>0');

if (trim(bsSkinEdit2.Text)<>'') AND ALAN2.Checked=TRUE then
begin
SelectSQL.Add('and musteriler.adres like '+QuotedStr('%'+bsSkinEdit2.Text+'%'));
SelectSQL.Add('ORDER BY '+ORDER);
end;

if (trim(bsSkinEdit2.Text)<>'') AND ALAN1.Checked=TRUE then
begin
SelectSQL.Add('and musteriler.adi_soyadi like '+QuotedStr('%'+bsSkinEdit2.Text+'%'));
SelectSQL.Add('ORDER BY '+ORDER);
end;

if (trim(bsSkinEdit2.Text)<>'') AND ALAN4.Checked=TRUE then
begin
SelectSQL.ADD('AND barkod ='+QuotedStr(bsSkinEdit2.Text+''));
SelectSQL.Add('ORDER BY '+ORDER);
end;

if (trim(bsSkinEdit2.Text)<>'') AND ALAN3.Checked=TRUE then
begin
SelectSQL.Add('and musteriler.EPOSTA like '+QuotedStr('%'+bsSkinEdit2.Text+'%'));
SelectSQL.Add('ORDER BY '+ORDER);
end;

if (trim(bsSkinEdit2.Text)<>'') AND ALAN5.Checked=TRUE then
begin
SelectSQL.Add('and ((musteriler.telefon1 like '+QuotedStr('%'+bsSkinEdit2.Text+'%')+') OR (musteriler.telefon like '+QuotedStr('%'+bsSkinEdit2.Text+'%')+'))');
SelectSQL.Add('ORDER BY telefon'+sart);
end;

if (trim(bsSkinEdit2.Text)<>'') AND ALAN7.Checked=TRUE then /// bu kısım bir çok alana göre arama yapmakta. genel arama için
begin
SelectSQL.Add('and ((musteriler.telefon1 like '+QuotedStr('%'+bsSkinEdit2.Text+'%')+') OR (musteriler.telefon like '+QuotedStr('%'+bsSkinEdit2.Text+'%')+')OR (musteriler.adi_soyadi like '+QuotedStr('%'+bsSkinEdit2.Text+'%')+') or (musteriler.adres like '+QuotedStr('%'+bsSkinEdit2.Text+'%')+') or (musteriler.EPOSTA like '+QuotedStr('%'+bsSkinEdit2.Text+'%')+')or(musteriler.defter_no like '+QuotedStr('%'+bsSkinEdit2.Text+'%')+')or (musteriler.barkod like '+QuotedStr('%'+bsSkinEdit2.Text+'%')+'))');
SelectSQL.Add('ORDER BY musteriler.adi_soyadi'+sart);
end;

if (trim(bsSkinEdit2.Text)<>'') AND ALAN6.Checked=TRUE then
begin
SelectSQL.Add('and musteriler.DEFTER_NO like '+QuotedStr('%'+bsSkinEdit2.Text+'%'));
SelectSQL.Add('ORDER BY '+ORDER);
end;

if (trim(bsSkinEdit2.Text)<>'') AND ALAN8.Checked=TRUE then
begin
SelectSQL.ADD('AND musteriler.id ='+QuotedStr(bsSkinEdit2.Text+''));
SelectSQL.Add('ORDER BY '+ORDER);
end;

open;
FetchAll;
end;
form_menu.bilgiler.Caption:='Kayıt sayısı :'+inttostr(dm.musteri_Query.RecordCount);
ALT_BILGILER;
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: FireBirdde onarma işlemi nasıl yapılır?

Mesaj gönderen aslangeri »

s.a.
kodları yaazarken bold değilde code tagını kullanırsan daha okunaklı olur.
en sondaki fetch all ı kaldır bak nasıl hızlanıyor.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: FireBirdde onarma işlemi nasıl yapılır?

Mesaj gönderen baloglurecep »

aslangeri hocam merhabalar... fetchall kısmını ben record caunt için kulammıştım. normal sorgu sonrası dönen kayıtlar fetchall kullanmadan garip şekilde farklı farklı dönüyor. doru sayıyı vermiyordu. bende fetchall kullanarak bu sorunu halletmişitm. ama fetchall kısmını kaldırmama rağmen sorguda ağda bir iyilişme hala olmadı. neden olablir yarum yapabilirmisiniz... saygılar
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: FireBirdde onarma işlemi nasıl yapılır?

Mesaj gönderen aslangeri »

Alt_Bilgiler prosedüründe yaptığın işlemlerden dolayı yavaşlama oluyor olabilir.
öncelikle tabloyu open etmeden önce oluşturduğun sql i bir memoya vs. at ve o sql ibexpert veya muadili başka bir programda test et. bakalım hızlımı gelecek yavaşmı gelecek.
ona göre alt_bilgiler prosedüründe bi işlem olabilir.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: FireBirdde onarma işlemi nasıl yapılır?

Mesaj gönderen emin_as »

Müşteri ve detay tablolarındaki kayıtlar çoksa, bu sorgu yavaş çalışır. Sanırım resim gibi blob alanlar da var.

İndex oluştur diyecegim, ama sorgunda like var, like index e bakmaz, bütün veritabanini tarar. Sorguda starting with olsa indexin faydasi olur.

Zebede yi de kullanabilirsin, bir miktar hızlandırır.

http://www.firebirdsql.org/download.php ... ee_eng.pdf
Cevapla