Вопрос № 67888: Немогу написать код для посчета и вывода результатов.
Есть поле 'IND' и поле 'JA' и поле 'YCH'. Допустим,
11111 1 1
11111 1 1
11111 3 1
..... . . Отображается в DBGrid1.
На форме Edit1(IND) и Edit2(YCH). Делаю запрос
...
Вопрос № 67.888
Немогу написать код для посчета и вывода результатов.
Есть поле 'IND' и поле 'JA' и поле 'YCH'. Допустим,
11111 1 1
11111 1 1
11111 3 1
..... . . Отображается в DBGrid1.
На форме Edit1(IND) и Edit2(YCH). Делаю запрос
пишу 11111 1, и нажимаю, бутон1. Отображается DBGrid2 c результатом
11111 1 1
11111 1 1
11111 3 1
Нужно по нажатию на бутон1, подсчитать количество по полю 'JA' и результат вывести на форму, т.е сейчас код бутона:
procedure TCart8.Button2Click(Sender: TObject);
var
st : string;
sv : string;
begin
DBGrid1.Visible:=False;
DBGrid3.Visible:=True;
st:= Edit1.Text;
sv:= Edit3.Text;
Query2.SQL.Clear;
Query2.SQL.Add('SELECT IND, Naz, JA, F, MR, A, MY, IU, IL, AU, S, O, N, D, ADR, FAM, YCH');
Query2.SQL.Add('FROM adr.db');
Query2.SQL.Add('WHERE IND = '''+st+''' AND YCH = '''+sv+'''');
Query2.SQL.Add('ORDER BY IND, Naz, JA, F, MR, A, MY, IU, IL, AU, S, O, N, D, ADR, FAM, YCH');
Query2.Open;
if Query2.RecordCount <> 0 then
DataSource3.DataSet := Query2
else begin
ShowMessage(' ');
end;
end.
Помогите, что нужно добавить в код.
Отправлен: 20.12.2006, 20:10
Вопрос задал: Gsvprog (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Крылов Александр Владимирович
Здравствуйте, Gsvprog!
Подсчёт по количеству в одном из полей.
DataSource.DataSet.First //устанавливаем курсор на первую запись
kolvo:=0;
repeat
kolvo:=kolvo+DataSource.DataSet.Fields[2].AsString;
DataSource.DataSet.Next;
until DataSource.DataSet.EOF; // пока не достигнем последней записи
Почему же именно Fileds[2]? Потому что в Вашем запросе поле "JA" идёт третьим по счёту, а индексация полей в DataSource начинается с 0
Крылов Александр Владимирович немного неверно ответил:
дело в том, что переменная kolvo у него идет либо интегеровская и в нее он пытаеться присвоить стринговое значение,
либо переменная стринговая и в нее он присваивает числа.
Одним словом здесь ошибка приведения типов.
и второе: данным кодом он считает сумму всех элементов поля 'JA'.
Через SQL
Select count(*) as cnt from adr.db where ja is not null
выполнить скажем в Query3, а затем
Form1.Edit1.Text:=Query3.FielByName('cnt').AsString;
либо через циклы while, for
var
Kol_vo: integer;
...
// цикл while
query2.first;
while not Query2.eof do
begin
if trim(query2.fieldbyname('ja').asstring)<>'' then inc(Kol_vo);
query2.next;
end;
// цикл for
for i:=1 to query2.recordcount do
begin
query2.recno:=i;
if trim(query2.fieldbyname('ja').asstring)<>'' then inc(Kol_vo);
end;
// вывод на форму
Edit1.Text:=inttostr(kol_vo);
Form1.canvas.textout(5,10,inttostr(kol_vo)); //выводит кол-во прямо на форме в координате х=5, у=10.
УДАЧИ
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 10-ый класс)
Ответ отправлен: 21.12.2006, 06:57