Форум: "Базы";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
ВнизКак узнать, сколько строк вернул запрос? Найти похожие ветки
← →
tria (2003-10-02 10:27) [0]Использую TIBSql. Можно ли узнать, сколько строк вернул запрос? До того, как пройдусь по всем строкам?
← →
mfender (2003-10-02 10:28) [1]property RecordCount: Integer;
← →
Johnmen (2003-10-02 10:35) [2]TIBSQL не предназначен для возвращения НД !
← →
tria (2003-10-02 10:37) [3]Johnmen> Если можно, расшифруй, что значит НД?
← →
mfender (2003-10-02 10:40) [4]набор данных.
← →
tria (2003-10-02 10:49) [5]Не, что то вы не правы.
При открытии RecordCount всегда 0 или 1. При каждом Next он увеличивается на 1, пока не считаешь все строки.
А данные он возвращает, только не в привычном TField а TIBXSQLVAR.
← →
Vlad (2003-10-02 11:01) [6]Думаю что никак. В IBSQL нельзя получить сразу все данные, т.к. он фетчит их сам, по мере необходимости.
Дружеский совет: используй для таких целей IBQuery или IBDataSet. Там есть метод FetchAll
← →
Johnmen (2003-10-02 11:03) [7]Ответы на твои вопросы и сомнения:
TIBSQL+F1
RecordCount+F1
:)
← →
tria (2003-10-02 11:18) [8]Johnmen> Вопросы то и возникли после F1.
Vlad>Вопрос встал такой: я делаю запрос, после этого результаты отражаю в обычном гриде, буфер данных в виде TFields мне вроде как и не нужен. Но думаю, что много времени теряю при увеличении количества строк в гриде на 1 при каждом Next. Хочется как-то оптимизировать данную процедуру.
← →
Vlad (2003-10-02 11:25) [9]>tria © (02.10.03 11:18) [8]
Если ты уж настаиваешь на использовании IBSQL, тогда делай 2 компонента. Один тебе будет возвращать основной набор данных, а другой - count(*). Так должно быть быстрее.
← →
tria (2003-10-02 11:28) [10]В смысле два последовательных запроса в пределах одной транзакции SnapShot?
← →
Vlad (2003-10-02 11:29) [11]Ну да, чем не вариант ?
← →
tria (2003-10-02 11:33) [12]Дело в том, что транзакция чтения у меня не SnapShot, а "read_committed","rec_version","nowait"
Делать ее SnapShot - лишняя нагрузка на сервер.
И опять же, для запроса, вернувшего 5 строк, выгоднее работать одним запросом. Для случая 500 - наверное вторым. А у меня есть и такие, и такие. И заранее знать сколько приблизительно строк вернет запрос я не могу.
Все равно большое спасибо за обсуждение.
← →
Johnmen (2003-10-02 11:35) [13]>tria © (02.10.03 11:18)
Не верю :) Не верю, что ты смог отобразить в "обычном гриде" НД, полученный с пом. TIBSQL ! Он же однонаправленный !
← →
tria (2003-10-02 11:39) [14]Все очень просто: использую не TDbGrid, а потомок от TDrawgrid для простого отображения данных.
Считал строку запроса, добавил в грид строку,перенес значения.
← →
Sergey13 (2003-10-02 11:46) [15]2tria © (02.10.03 11:39) [14]
>Все очень просто: использую не TDbGrid, а потомок от TDrawgrid для простого отображения данных.
Считал строку запроса, добавил в грид строку,перенес значения.
Задача становится все более интересной. 8-)
← →
tria (2003-10-02 11:51) [16]Sergey13>Offtop. Классная у тебя анкета... Оценил.
← →
Sergey13 (2003-10-02 11:54) [17]2tria © (02.10.03 11:51) [16]
>Offtop
А че такое? Я даже сам перечитал, чего не делал мимимум год. 8-)
← →
Жук (2003-10-02 11:56) [18]
> Sergey13 © (02.10.03 11:54) [17]
:-)))
← →
tria (2003-10-02 11:58) [19]Sergey13>Offtop Последние данные: увлечение/хобби + интересное о себе. Вызвало улыбку и у соседей по кабинету. Ладно, закрыли эту тему. Лучше скажи, чем же так интересна задача?
← →
Sergey13 (2003-10-02 11:58) [20]А че вы так ржете то? Там только правда и ничего кроме правды. 8-)
Я обиделся и ушел. 8-(
← →
tria (2003-10-02 12:02) [21]Sergey13>Offtop Блин, да юмор твой понравился. Я бы сам такое написал, если бы додумался. Мы тебя хвалим, а ты обижаешься. Все, хватит об этом.
← →
Vlad (2003-10-02 12:03) [22]Лично для меня задачка интересна тем, почему такие хитрости - премудрости ? Чем обычная связка DBGrid-DataSource-IBDataSet не устраивает ? Из соображений экономии памяти ? Сомневаюсь...
← →
tria (2003-10-02 12:50) [23]Прошу прощения за отсутствие.
Попробую по пунктам некоторые особенности:
1. Грид с возможностью объединения ячееек.
2. Одна запись может соответствовать нескольким строкам грида. Таких ДБГридов я не встречал. Может вы знаете.
3. Корректировка записи происходит не в гриде, а в открывающемся окне.
← →
Vlad (2003-10-02 12:53) [24]Ну тогда всё круто :)
← →
MsGuns (2003-10-02 13:17) [25]>tria © (02.10.03 12:50) [23]
>Попробую по пунктам некоторые особенности:
>1. Грид с возможностью объединения ячееек.
Без проблем на обычном гриде с написанием, ессно, кое-какого кода
>. Одна запись может соответствовать нескольким строкам грида.
OnDawColumnCll - и что душе угодно, хотб голых девок в ячейках.
>. Корректировка записи происходит не в гриде, а в открывающемся окне.
А причем здесь грид ?
Вообще же, ИМХО, присутствует некоторое умничание, т.е. попытка простое сделать сложным ;)))
← →
stud (2003-10-02 13:22) [26]тебе поможет quantumgrid!))
← →
tria (2003-10-02 14:06) [27]>MsGuns А я не умничаю. Я специалист по 1С, а Делфи - больше для души.
>1. Грид с возможностью объединения ячееек.
>Без проблем на обычном гриде с написанием, ессно, кое-какого кода
Не знаю, у меня до сих пор проблемы. Хоть и мелкие. И пусть мне многоуважаемый MsGuns кинет в меня исходником, где бы он реализовал зачатки такого грида. Иначе при всем уважении - "ИМХО, присутствует некоторое умничание". Докажи обратное.
stud> Слышал, но не рассматривал. Но как-то в форуме было обсуждение, в котором было сказано об отсутсвии гридов, в которых одна запись представлялась бы несколькими строками. Но как я уже говорил, могу сильно ошибаться.
Хотя поздно, много чего уже работает, в откате назад не вижу смысла.
← →
VAleksey (2003-10-02 14:43) [28]Можно я подведу итог?
По сабжу:
Либо отдельный запрос с count, либо FetchAll + RecordCount.
По вопросу в теле сообщения:
Только предварительный count запроса. Иначе никак.
← →
tria (2003-10-02 14:47) [29]>VAleksey
Спасибо за внесенную ясность. Я с тобой согласен. Просто надеялся, что может есть какая-то возможность.
← →
MsGuns (2003-10-02 16:40) [30]>tria © (02.10.03 14:06) [27]
Не для того, чтобы что-то тебе доказать - мне это абсолютно не надо, а токмо ради пользы дела - получай "зачатки"
procedure TfrmOut.grOutProdDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
BkgColor: TColor;
begin
if gdSelected in State then OutRect := Rect;
if not (gdSelected in State) then
BkgColor := TDBGrid(Sender).Color
else
if TDBGrid(Sender).Focused then
BkgColor := clActiveCaption // Синий для текущей строки
else
BkgColor := clMedGray; // Серый для текущей строки
TDBGrid(Sender).Canvas.Brush.Color:=BkgColor;
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
В этом примере красится вся строка, но если надо только некоторые ячейки, делай анализ на принадлежность прорисовываемой ячейке этим некоторым..
У класса TColumn есть св-во Field, через которое можно выйти на значение поля
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.012 c