kea |
Отправлено: 03.11.2005, 14:39 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 80
|
Здравствуйте!
Я решил использовать один компонент IBQuery для выполнения запроса select, который в зависимости от выбора пользователя обращается к одной из трех таблиц со статистическими данными. Все эти таблицы имеют поле типа DateTime, остальные — типы Integer и Float. Количество полей у всех таблиц разные. После выполнения запроса первым идет поле DateTime, затем остальные. Как мне обратиться к значениям полей в цикле, например, для вывода их в строку?
IBQuery->Close();
IBQuery->SQL->Clear();
IBQuery->SQL->Add(CreateQueryStr());
IBQuery->Open();
while( !IBQuery->Eof )
{
for ( int i = 0; i < IBQuery->FieldCount; i ++ )
{
//здесь должно быть обращение к значению поля
}
IBQuery->Next();
}
|
|
Guest |
Отправлено: 03.11.2005, 14:51 |
|
Не зарегистрирован
|
если IB наследник dataset, то обращаться можно по индексу
ds->Fields->Fields[i]->
(а он таки наследник) |
|
** kea |
Отправлено: 08.11.2005, 17:04 |
|
Не зарегистрирован
|
Здравствуйте!
Использовал для вывода в строку такую кострукцию:
IBQuery->Fields->Fields[i]->AsString.
Среди выводимых полей были вычисляемые поля (процент выполненея),
имеющие тип numeric(5,2) в хранимой процедуре. Для просмотра результатов ее выполнения используется IBQuery. При представлении в виде строки для вычисляемых полей нули после десятичной точки отбрасыввались: например выводится 100 вместо 100,00. Значения вида 96,51 выводились без отбрасывания знаков после точки. Запускал хранимую процедуру непосредственно в IBConsole там тоже отбрасываются нули после десятичной точки. Как этого избежать?
Для расчета процентов в хранимой процедуре исползовалось выражение:
if ( zaplan is not null and zaplan != 0 and exec is not null ) then
percent = 100.00 * exec / zaplan;
поле percent вычисляемое и возвращаемое из процедуры и имеет тип numeric(5,2). |
|
0xb800 |
Отправлено: 08.11.2005, 21:17 |
|
Не зарегистрирован
|
Если используете DBGridEh, то
CODE | DBGridEh->Columns->Items[i]->DisplayFormat="0.000"; |
для показа трёх знаков после запятой, "0.00" — два знака и т.д. |
|
AVC |
Отправлено: 09.11.2005, 09:28 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
А если не используете, то приводите поле к TNumericField и ставите нужный DisplayFormat |
|
Guest |
Отправлено: 09.11.2005, 17:31 |
|
Не зарегистрирован
|
Я так и делал. Проверял тип поля равенство ftFloat и ставил нужный формат. Хотелось бы обойтись без этой операции сравнения, поскольку остальные поля имеют тип integer. Или вызов функции AsString все равно бы убрал 2 нуля после точки? Если не убирает, то как получить на выходе хранимой процедуры 60.00 %, а не 60 % |
|
0xb800 |
Отправлено: 09.11.2005, 20:32 |
|
Не зарегистрирован
|
CODE | select
cast(percent as varchar(6))
from your_table
where (your_conditions) | |
|
** guest |
Отправлено: 10.11.2005, 14:10 |
|
Не зарегистрирован
|
20xb800
Интересное решение! Только зачем для varchar 6 символов?
точка, два знака после нее, 3 знака перед ней? Если будет допустим 1000% (гипотетически)? |
|
0xb800 |
Отправлено: 11.11.2005, 00:23 |
|
Не зарегистрирован
|
Это только на первый взгляд |
|
kea |
Отправлено: 11.11.2005, 15:28 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 80
|
6 символов достаточно на все случаи жизни? |
|