table alanlarını toplatıp diğer table içine yazma

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

table alanlarını toplatıp diğer table içine yazma

Mesaj gönderen rapsodim »

string olan bir tabledakı verılerı ıstedıfım alana gore toplamını aldırıp diger table nasıl yazırabılrım tşr ederim.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

String alanları nasıl toplatmayı düşünüyorsun?
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

hepsi sayıdan ibaret ifade ve degerler

Mesaj gönderen rapsodim »

alan tanımlaması strıng
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

Alan tanımı string ise SQL komutları ile toplam alamazsın. Ancak delphi ile
veritabanını döngüye sokarsın (While) string alanları integera veya float a dönüştürerek toplamlarını alabilirsin. Ancak String alanlarda bir tane daha char. mevcut olursa program kırılacaktır. Ancak bu şekilde toplam alabilirsin ama bu da riskli işte...
Sevgiler...
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Bir döngü kullanarak yapabilirsin döngü içindeki atamalarıda String veriyi Integer tipine veya Real sayı tipine çevirerek yapabilirsin.

Kod: Tümünü seç


Query1.First;
While not Query1.Eof Then
Begin
        Toplam := StrToInt(Query1Tutar.AsString);
        Query1.Next;
        //Vesaire......
End;

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

hocam verilen kodlarla belki işlemi yapabilirsin ama toplanması gereken bir alanı string yapman yanlış. Bu alanı Currency veya float tipinde tanımla ve default değerine 0 (sıfır) ver.

String alman gerektiğinde AsString ile string olarak alabilirsin.

Kolay gelsin.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

sorum anlaşılmadı

Mesaj gönderen rapsodim »

adı soyadı ucret
ismail hakkı 10
huseyin kaygı 15
ismail hakkı 25
ismail hakkı 30
huseyin kaygı 50
zehra ugur 20 şeklinde bir table mevcut.bu table da bulunan kayıtlardakı adı ve soyadı aynı olanların ucretlerını toplatıp baska bır table ıcıne yazmak ıstıyorum.yenı tablo
ad soyad ucret
ismail hakkı 65
husetin kaygı 65
zehra ugur 20 şeklinde.

while not Table1.EOF do
begin
mik:=table1.FieldByName('ucret').value;
toplamBorc := toplamBorc + mik;
Table1.Next;

end; şeklinde sadece ucret alanlarının toplamını alabılıyorum.yukarıdakı netıceye ulaşamadım şimdiden tşkr ederim
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Döngünün içinde if kontrolü yap eğer adı soyadı aynıysa topla ve gereken işlemleri şart koşullunun içinde gerçekleştir.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

yaptıgınız bır örnek var mı

Mesaj gönderen rapsodim »

bu döngunun içesine nasıl konulur bu if ifadesi ornek kodu varsa yollarmısınız
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Table olayı değil de sql kullanarak yaparasan sana şunu öneririm:

Kod: Tümünü seç

INSERT INTO TABLO2 (ADI,SOYADI,TOPLAM_UCRET)
SELECT ADI,SOYADI,SUM(UCRET) FROM UCRETLER GROUP BY ADI,SOYADI
Bu sql cümlesi sana ad ve soyada göre gruplama yaparak bulduğun toplamı TABLO2 isimli 2. tablona insert yapmanı sağlar.

TABLO2 nin alanları ADI,SOYADI,TOPLAM_UCRET şeklinde varsaydım.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Sana tafsiyem ilk önce algoritma kur.

Kod: Tümünü seç


Ad := Edit1.Text; //Kayıt koşulu sağlamak için Stringi al

Table1.First;
while not Table1.EOF do  // Database i tara
begin 
        if Ad = table1SoyAd.AsString Then // Karşılaştırma yap
         Begin
              mik:=table1.FieldByName('ucret').value;  //Koşul gercekleşiyorsa topla
          //Vesaire
        toplamBorc := toplamBorc + mik; //Atama Yap
         End;
     Table1.Next; 
End;

Kodları testedemiyorum makinamda delphi yok ama bu şekilde if kullanabilirsin.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

acıklarmısınız

Mesaj gönderen rapsodim »

program ıcerısınde nasıl yapabılırım.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

SQL ile çok daha kolay yapılabilir.

SELECT AD_SOYAD, SUM(UCRET)
GROUP BY AD_SOYAD

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

Mesaj gönderen husonet »

Anlayamadım Neyi?
program ıcerısınde nasıl yapabılırım.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

sql şöyle

Mesaj gönderen rapsodim »

Query4.Close;
Query4.SQL.Clear;
Query4.SQL.Add('INSERT INTO bakim1.db (ref,mik,op)');
query4.sql.add('SELECT ref,op,SUM(mik) FROM bakim.db GROUP BY ref,op');
query4.open;

ama tip uyumsuzlugu verıyor. bakım içindeki verileri bakım1 içine toplamlarını aldıgım kayıtları kaydetmek ıstedıgımde oluyor
Cevapla