CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Suma kolumny danych

Suma kolumny danych

Problemy związane z tworzeniem i zarządzaniem programami bazo-danowymi.
Regulamin działu


Zadając pytania dotyczące baz danych należy podawać szczegółowe informacje o bazie danych nad którą się pracuje, czyli:

  • Rodzaj serwera bazodanowego: MySql, MSSQL, Oracle itp.
  • Wersja bazy danych
  • Technologia bazodanowa używana w programie: ADO, DbExpress, InterBase
  • Komponenty użyte do zestawienia połączenia: ADOConnection, SqlConnection
  • Sposób zestawienia komponentów bazodanowych np. DataSet - DataSource - DbGrid lub DataSet - DataSetProvider - ClientDataSet - DataSource - DbGrid
  • Jeżeli używane były biblioteki innych firm niż Borland, CodeGeer i Embarcadero proszę podać ich nazwy, numer wersji i adres źródła.

Suma kolumny danych

Nowy postprzez JotEmKa » czwartek, 9 września 2010, 00:53

Witam,
Oto kolejny nierozwiązany przeze mnie problem:)
1) Z selecta wychodzi mi tabela zawierająca jedną kolumnę bliżej nie znanej wielkości, pełna cyfr. Moim problemem jest je zsumować i wyświetlić sumę;
2) Do labela chciałabym wpisać wartość, która byłaby liczbą wierszy w kolumnie wynikającej z selecta z warunkiem where.
Ma ktoś jakieś pomysły?
Pozdrawiam
"Wszyscy wiedzą, że coś nie da się zrobić. I wtedy pojawia się ten jeden, który nie wie, że się nie da, i on właśnie to coś robi."
Albert Einstein
Avatar użytkownika
JotEmKa
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): poniedziałek, 30 sierpnia 2010, 16:09
Podziękował : 10
Otrzymał podziękowań: 0
System operacyjny: Windows XP SP3
Kompilator: Borland C++ Builder 6
Gadu Gadu: 0
    Windows XPFirefox

Re: Suma kolumny danych

Nowy postprzez Corvis » czwartek, 9 września 2010, 09:14

1.

a) Zsumować drugim zapytaniem Sql i zwrócić wynik.
b) Kodem programu: (nie wiem jakiego DataSeta używasz)

KOD cpp:     UKRYJ  
 if(DataSet->Active)
 {
  double suma = 0;
  while(!DataSet->Eof)
  {
    suma += DatSet->FieldByName("pole")->AsFloat;  
    DataSet->Next();
  }
}
 
2.

a) Jeżeli używasz TClientDataSeta robisz:

KOD cpp:     UKRYJ  
ClientDataSet1->RecordCount;


b) Możesz to sama policzyć robiąc to kodem jaki podałem w 1 punkcie.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaSafari

Re: Suma kolumny danych

Nowy postprzez banita » czwartek, 9 września 2010, 16:08

no chyba zartujesz?:)

do sumowania kolumny robisz

KOD cpp:     UKRYJ  
select sum(pole) as suma from tabela

double suma = q->FieldByName("suma")->AsDouble; // moga byc te zliczby calkowite


jesli chodzi o ilosc rekordow to roznie to bywa.
jesli dataset nie pobiera odrazu calosci rekordow to recordcount zwroci tylko te ktore pobral albo zero.
dziala to tak ze dataset pobiera np 1000 rekordow i po przejsciu na 1001 dociaga kolejne 1000.

w przypadku duzej liczby rekordow nie mozna pobrac wszystkich odrazu, zreszta nigdy nie powinno byc potrzeby pobierania tak duzej liczby rekordow.

jesli pobierasz wszystkei rekordy to ok recordcount zalatwi sprawe, jesli nie to najlepiej select count(pole) as rec_count from tabela;

Za ten post autor banita otrzymał podziękowanie od:
JotEmKa
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    Windows 7Opera

Re: Suma kolumny danych

Nowy postprzez Corvis » czwartek, 9 września 2010, 18:12

jesli dataset nie pobiera odrazu calosci rekordow to recordcount zwroci tylko te ktore pobral albo zero.


Jeżeli spróbujesz zrobić to na TSqlDataSet - wywali ci błąd. Nie pamiętam jaki ale wywali. Sprawdze rano bo będe miał dostęp do serwera. Chyba Nieokreślony zbiór danych.

dziala to tak ze dataset pobiera np 1000 rekordow i po przejsciu na 1001 dociaga kolejne 1000.


Jeżeli tak jest ustawiony to tak jest. Jeżeli nie to odrazu pobiera wszystko. Przynajmniej ClientDataSet tak działa.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House

Za ten post autor Corvis otrzymał podziękowanie od:
JotEmKa
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaOpera

Re: Suma kolumny danych

Nowy postprzez JotEmKa » czwartek, 9 września 2010, 18:54

Dziękuję za pomoc, wszystko pięknie działa.
Użyłam sum oraz count.
Pozdrawiam
"Wszyscy wiedzą, że coś nie da się zrobić. I wtedy pojawia się ten jeden, który nie wie, że się nie da, i on właśnie to coś robi."
Albert Einstein
Avatar użytkownika
JotEmKa
Bladawiec
Bladawiec
 
Posty: 32
Dołączył(a): poniedziałek, 30 sierpnia 2010, 16:09
Podziękował : 10
Otrzymał podziękowań: 0
System operacyjny: Windows XP SP3
Kompilator: Borland C++ Builder 6
Gadu Gadu: 0
    Windows XPFirefox

Re: Suma kolumny danych

Nowy postprzez Corvis » czwartek, 9 września 2010, 22:35

Używając count do zliczenia trzeba pamiętać o poprawnym zapytaniu SQL :)

Bo zapytanie które podał banita:

KOD cpp:     UKRYJ  
select count(pole) as rec_count from tabela;


zwróci wszystkie wiersze z tabeli bez względu na to co tam jest.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaOpera

Re: Suma kolumny danych

Nowy postprzez banita » piątek, 10 września 2010, 06:16

a sprawdziles jego dzialanie?
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    Windows 7Opera

Re: Suma kolumny danych

Nowy postprzez Corvis » piątek, 10 września 2010, 08:58

Ale o czym mówisz ??
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaSafari

Re: Suma kolumny danych

Nowy postprzez banita » piątek, 10 września 2010, 17:08

juz nic:)
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    Windows 7Opera


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Bazy danych

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości

cron