1 / 1 / 0
Регистрация: 01.10.2015
Сообщений: 127
1

ADOQuery - пока не конец файла

27.09.2016, 14:33. Показов 2156. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток !
Столкнулся со следующей проблемой !
Из запроса в ADOQuery хочу взять определенные данные. Использую для этого ADOQuery.Locate(),все прекрасно работает, но по совпадающим критерия, которые я ввел, должна складываться сумма из двух чисел. То есть, при Locate, в переменную SUMM он мне заносит последнюю совпадающую строку , и там значение допустим 14. Но перед ним, есть еще одно значение, и там число 3. В итоге, должно получится 17. Но он останавливается на последней, зная, что Locate, только для одной записи.
Для этого я сделал While not EOF и FeildByName, но он игнорит мое условие.
Для понятия скидываю код !)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
procedure TForm2.Image131Click(Sender: TObject);
var
i,sum,g:integer;
num1:string;
begin
    num:=(sender as TImage).Tag;
    if   (FormKarta.ADOQuery1.Locate('Станция; Дата', VarArrayOf  ([num, edit2.Text]),[])) and (FormKarta.ADOTable10.Locate('id', num,[])) then
        begin
            Form5.Edit1.Text:= FormKarta.DBMemo20.Text;
            num1:=  FormKarta.ADOQuery1.FieldByName('Вестибюль').AsString;
            showmessage(num1);
            if (FormKarta.ADOTable13.Locate('idВестибюль', num1,[]))then
            begin
                 Form5.Edit2.Text:=FormKarta.ADOTable13.FieldByName('Вестибюль').AsString;
            end;
            sum:= FormKarta.ADOQuery1.FieldByName('Выявлено_опасных_предметов').AsInteger;
                FormKarta.ADOQuery1.Next;
             showmessage(inttostr(sum));
             while not FormKarta.ADOQuery1.EOF  do
             begin
                    for g:=0 to FormKarta.ADOQuery1.Fields.Count-1 do
                    begin
                            if (FormKarta.ADOQuery1.FieldByName('Станция').Asstring=edit3.Text)and((FormKarta.ADOQuery1.FieldByName              ('Дата').Asstring=edit2.Text)) then
                                          begin
                                showmessage(inttostr(sum));
                                sum:= sum+ FormKarta.ADOQuery1.FieldByName('Выявлено_опасных_предметов').AsInteger;
                                showmessage(inttostr(sum));
                                edit3.Text:=inttostr(sum);
                        end;
                            FormKarta.ADOQuery1.Next;
                    end;
               end;
 
        end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2016, 14:33
Ответы с готовыми решениями:

Пока не конец текстового файла
Как вывести все строки текстового файла в windows forms, через цикл while (какое у while должно...

Из входного потока прочитать литеру за литерой, пока не встретится не цифра или конец файла
char * find-const ( ) , 1)помещает в буфер строки digit литеру буфера buf_lit, 2)из входного...

Цикл пока не конец строки
Как сделать такой цикл, чтобы парс продолжился? Т.е спарсилось не только asd, но и 123 ...

Ввод, пока не достигнут конец ввода
Доброго времени суток. Нужно заполнить массив, пока не окончен ввод(кол-во элементов массива...

9
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,745
Записей в блоге: 3
27.09.2016, 14:50 2
Если Вам требуется найти сумму элементов в каком-то столбце при выполнении какого-то условия, то не проще ли выполнить запрос
SQL
1
SELECT SUM(Имя_Столбца) AS VVV WHERE (Ваше_условие)
И потом обращаться к найденному значению:
Delphi
1
2
3
var i : integer;
...
i := ADOQuery.FieldByName('VVV').AsInteger;
0
1 / 1 / 0
Регистрация: 01.10.2015
Сообщений: 127
27.09.2016, 14:57  [ТС] 3
Смысл в том, что я выполняю условие по дате и станции.
Пример:
26.09.2016
Станция - вестибюль - число
-----------------------------------
Каширская - КаширскаяС - 14
Каширская - КаширскаяЮ- 3
-------------------------------------

Он будет находить только последнее выражение (3)
А мне нужно еще и 14, чтобы в итоге 14 и забрать его в переменную !
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
27.09.2016, 15:11 4
Предложенный D1973 способ найдет все что нужно.
0
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,745
Записей в блоге: 3
27.09.2016, 15:15 5
Нет, ну а я тебе о чем пишу?
SQL
1
SELECT SUM([Число]) AS VVV FROM [Твоя_Таблица] WHERE [Станция] = 'Каширская'
В поле VVV этого запроса будет именно сумма всех чисел поля [Число] для всех записей, для которых выполняется условие [Станция] = 'Каширская'
Вот только совет на будущее: не давай ни таблицам, ни полям таблиц названия на кириллице - избежишь многих неприятностей!
0
60 / 60 / 26
Регистрация: 30.05.2016
Сообщений: 293
27.09.2016, 15:24 6
Точно не понял, нужно сложить найденную строку и строку перед ней?
А вообще лучше воспользоватся запросом, как написано выше.
0
-15 / 0 / 0
Регистрация: 26.05.2015
Сообщений: 45
27.09.2016, 15:33 7
Только нужно чтобы вместо станции была переменная, и.к. станция могут быть разными. Делал по методу даты , и поставил между ними and. Не получается.
0
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
28.09.2016, 10:38 8
Напишите структуру таблиц.
0
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,745
Записей в блоге: 3
28.09.2016, 12:13 9
Цитата Сообщение от AleksandRus18 Посмотреть сообщение
вместо станции была переменная
Ну и кто мешает это сделать?
Delphi
1
2
3
ADOQuery1.Close;
ADOQuery1.Text := Format('SELECT SUM([Число]) AS VVV FROM [Твоя_Таблица] WHERE [Станция] = %s', [QuotedStr(Edit1.Text)]);
ADOQuery1.Open;
В Едит1 ты вводишь название своей станции
0
18 / 18 / 4
Регистрация: 10.03.2014
Сообщений: 91
28.09.2016, 21:15 10
del
0
28.09.2016, 21:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2016, 21:15
Помогаю со студенческими работами здесь

Считывать данные пока не встретится символ '|' обозначающий конец ввода
Нужно считать данные пока не встретится символ '|' обозначающий конец ввода. double val;...

Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла
3)Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла.

Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла
Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла.

Даны два текстовых файла. Добавить в конец каждой строки первого файла соответствующую строку второго файла
Нужна помощь с самим модулем,с загрузкой и сохранением файлов все в принципе понятно.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru