Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» DELPHI. Счетчик ячеек со значенями, значений ячеек

Автор: filja
Дата сообщения: 29.11.2004 13:15
2. Необходимо из DBGrid выбрать и посчитать количество ячеек, у которых значение "1" и вывести это значение в ячейку StringGrid.


3. Необходимо из DBGrid выбрать и сложить значения ячеек; полученное значение вывести в ячейку StringGrid.


4. Из DateTimePicker5 выполняется выборка за год.

DataModule3.ADOTable1.filter:='Dates>='+YearOf(DateTimePicker5.Date);
DataModule3.ADOTable1.filtered:=true;

Ошибка: "незадекларировання переменная YearOf".


5. Выборка из ComboBox.
Items:
0 - зима
1 - весна
2 - лето
3 - осень

if ComboBox2.ItemIndex=0 then
DataModule3.ADOTable1.filter:='Dates>='+{...}+'and Dates<='+{...};
DataModule3.ADOTable1.filtered:=true;

Как указать диапазон дат с декабря по февраль, например?
Автор: A_V
Дата сообщения: 29.11.2004 17:36
2&3. Зачем что-то 'выбирать из DBGrid'? он ведь отображает данные из набора.
так что просто напиши нужный select в кверюге(TQuery)
(в одном случае 'select _поля_ from _таблица_ where _поле_ = 1',
в другом 'select sum(_поле_) from _таблица_'
подом делай кверюге Open, считай результат из Fields[] и выводи куда хошь...
надеюсь понятно. если нет - RTFM

4. Для использования YearOf подключи dateutils (в разделе uses)
также наверно придется сделать between с '01.01'+YearOf() и '31.12'+YearOf()

5. тут напрашиваются два варианта
1 - завести в базе поле с номером сезона
2 - переконвертить дату в строку, взять из строки кусок в котором хранится месяц
(т.е например для стандарта dd.mm.yyyy надо взять 2 символа начиная с 4й позиции),
переконвертить результат в число и делать выборку уже по нему
реализация есесно зависит от СУБД.
например в MSSQL выборка для зимы будет выглядеть так(или что-то вроде )
CAST(SUBSTRING(CAST(Dates AS varchar),4,2) AS NUMERIC) =12 OR
CAST(SUBSTRING(CAST(Dates AS varchar),4,2) AS NUMERIC) =1 OR
CAST(SUBSTRING(CAST(Dates AS varchar),4,2) AS NUMERIC) =2
Автор: filja
Дата сообщения: 30.11.2004 11:50
2, 3. БД у меня в Аксес. Связь с ней - с пом. ADOConnection и ADOTable. Куда всунуть эту TQuery?

4. "Несовместимость типов":
procedure TForm1.DateTimePicker5Change(Sender: TObject);
begin
DataModule3.ADOTable1.filter:='Dates>='+ '01.01'+IntToStr(YearOf(DateTimePicker5.Date))+
' and Dates<='+ '31.12'+IntToStr(YearOf(DateTimePicker5.Date));
DataModule3.ADOTable1.filtered:=true;
end;

5. БД в Аксесс. Связь с ней - с пом. ADOConnection и ADOTable.
Завела поле. Теперь надо, чтоб в период дат с 1.12 до 29.02 в новое поле автоматически подставлялось "зима", "весна" и т.д.
Как это записать грамотно?
if DataModule3.ADOTable1.Fields[1].AsDateTime >= 01.12.1900 and <= 29.02.1900 then
DataModule3.ADOTable1Sezon.Value:='Зима';
Автор: A_V
Дата сообщения: 30.11.2004 23:17
2&3. суй ее туда же, куда и TADOTable, т.е просто клади на форму/дата модуль и укажи ее Connection
вот пример работы с ADOQuery, медитируй:

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
SQLStr:='select field1,field2,field3 from table1 where field1 = 1 order by field1,field2';
ADOQuery1.SQL.Add(SQLStr);
ADOQuery1.Open;

CntFields:=2; i:=0;

while(not (ADOQuery1.Eof{вернет true если нет больше записей})) do
begin
for j:=0 to CntFields do Arr[i,j]:=ADOQuery1.Fields[j].AsString; {запоминаем в строковый двумерный массив значения из Query.}
inc(i);
ADOQuery1.Next{встать на следующую запись};
end;

4. не '01.01', а '01.01.' и не '31.12', а '31.12.'

5. TmpStr1:=DataModule3.ADOTable1.Fields[1].Value;
if (strtoint(copy(TmpStr1,4,2))=12) or
(strtoint(copy(TmpStr1,4,2))=1) or
(strtoint(copy(TmpStr1,4,2))=2)
then TmpStr2:='зима' else if ...итд...
потом
DataModule3.ADOTable1Sezon.Value:=TmpStr2
Автор: filja
Дата сообщения: 14.12.2004 13:38
2&3.
Не получается у меня с Квэри! Ее можно параллельно с АДОТэйбл подключать или что-то одно? Указываю для Квэри:
Connection: ADOConnection1
DataSourse: DataSourse1
Делаю Квери активной, а оно мне отвечает: Missing SQL property.
Что делать???

4. Получилось! Спасибо!

5. Если я правильно поняла, TmpStr1 и TmpStr2 - две переменные стрингового типа.
DataModule3.ADOTable1.Fields[1].Value - значение поля с датой.
Т.е. я считываю значение даты (к-рая сразу в строковом виде), перевожу ее в целый (strtoint), выбираю 2 цифры, начиная с 4й (TmpStr1,4,2) и ставлю условие: если эти цифры 12, 1 или 2
if (strtoint(copy(TmpStr1,4,2))=12) or
(strtoint(copy(TmpStr1,4,2))=1) or
(strtoint(copy(TmpStr1,4,2))=2)
то записать в поле Sezon значение 'зима':
(DataModule3.ADOTable1Sezon.Value:=TmpStr2 ).

Ничего не происходит.
Автор: A_V
Дата сообщения: 15.12.2004 20:37
2&3. в данном случае не надо ей сразу делать active:=true
сначала программно запиши ей нужный запрос в поле SQL (см. пример из моего предыдущего поста)

5. а у тебя точно в TmpStr2 находится строка 'зима'?
Автор: filja
Дата сообщения: 16.12.2004 10:53
2&3. ща буду пробовать

5. То есть? А где ДОЛЖНА находиться строка 'зима'?

Страницы: 1

Предыдущая тема: DELPHI. Выборка по датам


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.