AdoQuery Performans

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

AdoQuery Performans

Mesaj gönderen husonet »

Arkadaşlar Günaydın;

Arkadaşlar çalışma göstermiş olduğum bir projem var burada nakit ödeme ve tahsilat işlemlerinin değiştirme işlemlerini gercekleştirdiğim bir formum var problemim ise Formumda kullanmış olduğum AdoQuery lerin tahminime göre programımı yavaşlatması biraz daha detaya inmek istiyorum.

formumda 2 adet adoquery kulandım AdoQuery1 1 kez kullanıyorum integer değişken sorgulattığım için bu sabit olarak kalıyor.

2.nci Adoquery2 im ise 4, 5 tablodan veri sorgulaması ve veri alışverişi yapıyor bunlardan bazıları numara kontrolleri, Bakiye karşılaştırmaları, yapılan işlemlerin hareketler tablosunda düzenlenmesi vs...

Kodum düzgün olarak çalışıyor ama yavaş çalışıyor. Problemimle ilgili ufak bir örnek veriyorum.

Kod: Tümünü seç

with AdoQuery2 do
begin
    close;
    Sql.Clear;
    Sql.Add('Select * from hareketler');
    Sql.Add('Where IslemNo = "'+IslemNo+'" and CariKod = '"+CariKart+'" and IslemTuru = "Tahsilat"');
    Sql.open;
end;
if AdoQuery2.RecordCount > 0 Then
begin
       AdoQuery2.Edit;
       //Yapılacak değişiklikler
       AdoQuery2.post;
end;
Arkadaşlar problemim kısaca bu tip kodların hızlı çalışması için yapmam gereken bir olay varmı varsa yazarsanız sevinirim.

İyi Çalışmalar
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

1. AdoCommand bileşeni ile direk SQL ile yapmayı dene güncellemelerini.

2. Stored Proc. yaz.

Aklıma ilk etapta gelen çözümler bunlar.

Kolay gelsin.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Merhaba

1. AdoCommand bileşenin kullanımı AdoDataSet ile aynımı.
2. Stored Proc. nasıl yazılır ufacık bir örnek verirmisiniz.

ayrıca ilginiz için teşekkür ederim.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

1. SQL'i ekle çalıştır o kadar. Ancak ADOCommand sadece DDL ifadelerini çalıştırır. Update, Delete vs. gibi.

2. Hangi veritabanını kullanıyorsun. Her veritabanı desteklemez bu olayı. Eğer SQL Server kullanıyorsan, gir yardıma stored procedure yaz. Her seviyeden bir sürü örnek var.

Kolay gelsin.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Hocam Access veritabanı kullanıyorum.

Hocam başka forma yazmak istemedim. Access veritabanında alanları delphi deki calculated yöntemi gibi otomatik hesaplattırma yapılabilirmi.

Bunu soruyorum çünkü calculated yönteminde adet * fiyat = Toplam alanlarında adet ve fiyat alanında değişiklik yapabiliyorum ama toplam alanında yapamıyorum hesaplattığım alanda değişiklik yapıp diğer alanlarında etkilenmesini istiyorum kısacası arkadaşlar kafama takılan nokta bu fikir ve görüşlerinizi iletirseniz sevinirim.

İyi çalışmalar.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Access'i bilmiyorum ama Delphi'de yapabilirsin.

Kolay gelsin.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Hocam Delphi de nasıl yapabilirim. Çok merak ettim kısa bir şekilde nasıl yapabileceğimi anlatırsanız sevinirim.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Delphi de Ttable'a cift klik yapip alanlarin listesi ustunde sag klik ile yeni bir alan eklemeyi secip alan adini belirtip tipini calcuated olarak sectikten sonra table'in oncalculated eventeinde de o alanin hangi alanlarin toplam veya carpimindan meydana gelecegini kod olarak yaziyorsunuz

Kod: Tümünü seç

Table1CALCULATED_ALAN.AsInteger:=Table1ALAN1.AsInteger*Table1ALAN2.AsInteger;
Bunu veritabani tarafinda yapma isine gelince bazi veritabanlarinda calculated alan tanimlama imkani var. Sybae Adaptive Server Anywhere'i iyi bildigim icin onda bu imkanin oldugunu soyleyebilirim. Access'de olacagini tahmin etmiyorum acikcasi. Fakat bu imkanin olmama durumunda da view tanimliyarak bu isi halledebilirsiniz. Ya da TQuery kullanirsiniz

Kod: Tümünü seç

select ALAN1,ALAN2,ALAN3,TOPLAM=ALAN1*ALAN2
from TABLO
seklinde bir SQL ile isi gorebilirsiniz.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Hocam vermiş olduğunuz bilgiler için teşekkür ederim yalnız calculadet alanlar üzerinde değiştirme işlemi yapamıyorum. Demek istediğim şu

Alan1 = Adet alanı
Alan2 = Fiyat alanı
Alan3 = Toplam alanı 'bu alan calculadet olarak tanımlanmış olsun

Alan1 ve alan2 de yapılan değişiklikler toplam alanına yansıyor.

Alan3 ancak Calculadet olarak tanımlanmış olan alanda değişkilik yapamıyoruz (klavyeden veri giremiyoruz) ben bunun çözümünü merak etmiştim.

Umarım bu daha açıklayıcı olmuştur.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

bunun çözümü yok. Calculated alanları değiştiremezsin.

Kolay gelsin.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

calculated alanlara sadece oncalculate yordamında veri girip degisiklik yapabilirsiniz...
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Evet Admin'in de dedig gibi calculated alanlari gerek delphi tarafinda gerekse veritabani tarafina degistiremezsiniz. zaten varolus mantiklari belirli bir mantık ile hesaplanmaları. Gridinizin icinde el ile veri giremezsiniz.

ama eger ben toplami gireyim adete bolup birim fiyati kendisi bulsun tarzinda bir amaciniz varsa : O zaman toplam alanını da tabloda tutup mesela before post'da toplam alanini bos ise gerekli degerleri carpip o alana deger atarsiniz. Yok eger toplam alani dolu ise adete bolup buldugunuz degeri birimfiyat alanina atarsiniz.

Kolay gelsin.....
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Arkadaşlar gercekten almış olduğum yanıtlar çok hoş hepinize teşekkür ederim.

Peki Hocam Toplam alanını tablomda alan ayırdığımı farzedelim before post alanına yazacağım kod aşağıdaki gibimi olcak !

Kod: Tümünü seç

if Table1TOPLAM.Asinteger = ' ' then
        Table1TOPLAM.AsInteger:=Table1ADET.AsInteger*Table1FIYAT.AsInteger
Else
    Table1FIYAT.AsInteger:=Table1TOPLAM.AsInteger / Table1ADET.AsInteger;

Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

bence olayı önce kendin yapmaya çalışmalısın. Problem değil burdaki insanlar sana cevap yazarlar ama kaybeden sen olursun. Yöntemi anladıysan bence kendin yapmaya çalış. Bu denemeler sana çok şey katacaktır emin ol. Yapmaya çalışırken, bir problem çıkarsa yardımcı olalım.

Kolay gelsin.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Özür dilerim amacım programı size yazdırmak değil şu an bir otomotiv firmasında muhasebeci olarak çalışıyorum ve ileride yazılımcı firmasında olmak istiyorum gercekten bu işi çok seviyorum çalıştığım firmadaki bilgisayarımda da Delphi yüklü değil o yüzden çalışmalarımı akşam uğraşmak zorundayım amacım doğru yolu tartışarak bulmaya çalışmaktı yanlış anlaşıldıysam kusura bakmayın.

İyi çalışmalar.
Cevapla