Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.23;
Скачать: CL | DM;

Вниз

Как узнать, сколько строк вернул запрос?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.03 c
1-74259
Брат
2003-10-13 12:17
2003.10.23
Program reset


3-73999
Митяй
2003-10-02 20:29
2003.10.23
---|Ветка была без названия|---


6-74364
Николай
2003-08-25 16:22
2003.10.23
TCP/IP


11-74104
Ajax
2003-02-02 09:00
2003.10.23
XP-прозрачность у KOL-форм


1-74276
ak75
2003-10-10 17:01
2003.10.23
Drag&Drop в DBTreeList (TreeView)