Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];

Вниз

TpFIBDataSet: RecordCount, глюк?   Найти похожие ветки 

 
Megabyte ©   (2006-12-20 13:20) [0]

Мне надо узнать кол-во возвращаемых строк, чтобы задать длину дин. массива.
У Датасета есть 2 свойства:
RecordCount - заметил глюк, что всегда почему-то возвращает 1!
RecordCountFromSrv - не совсем понимаю, чем отличается от пред. свойства и что обозначает(м.б. кто подскажет). В другом проекте оно показывало мне нужное число.
В новом проекте: делаю запрос через ИБЭксперт - показывает 2097
Делаю тот же запрос на клиенте - TpFIBDataSet.RecordCountFromSrv выдает 11811
Как так?

з.ы. Короче, мне надо получить число строк! Остальное, если можете, подскажите...


 
Desdechado ©   (2006-12-20 13:41) [1]

Ты хоть отличаешь число записей, которое сервер может отдать в результате запроса, от числа записей, реально полученных клиентом?


 
sniknik ©   (2006-12-20 13:44) [2]

> RecordCount - заметил глюк, что всегда почему-то возвращает 1!
действительно глюк... должно быть -1 если рекордсет по какойто причине не поддерживает это свойство. срочно свяжись с разработчиками FIB-ов.

но вообще, во многих случаях он будет неопределен, например при асинхронной докачке данных, однопроходном/серверном рекордсете.
если это изза того, что получение данных в процессе, то надо просто сделать fetchall перед чтением свойства, если же изза невозможности получить значение то оно должно быть -1. (в хелпе это оговорено)
тебе нужно поподробнее узнать в каком режиме работает используемый тобой компонент... (документации нет?)

> Мне надо узнать кол-во возвращаемых строк, чтобы задать длину дин. массива.
перегружаеш данные из рекортсета в динамический массив? а зачем собственно? может не надо?


 
Ega23 ©   (2006-12-20 13:44) [3]

Indicates the total number of records associated with the dataset.

property RecordCount: Integer;

Description

As implemented in TDataSet, RecordCount is always -1. Ordinarily an application does not access RecordCount at the TDataSet level. Instead a redeclared and implemented RecordCount property in a descendant class such as TTable is accessed. RecordCount provides a fallback property for derived dataset classes that do not reimplement the property access method.


 
Ega23 ©   (2006-12-20 13:45) [4]

BLOB-поля в НД присутствуют?


 
Megabyte ©   (2006-12-20 13:48) [5]

Я может что не понимаю... Сделал предварительно TpFIBDataSet.fetchAll, а потом TpFIBDataSet.RecordCount, кот вернул число, равное  TpFIBDataSet.RecordCountFromSrv,т.е. 11811.
НО это не верное число! IBExpert выдает другое число. Не понимаю, почему?


 
Anatoly Podgoretsky ©   (2006-12-20 13:52) [6]

> Megabyte  (20.12.2006 13:48:05)  [5]

А какая разница верное или нет, справка говорит, что это нормально.


 
Desdechado ©   (2006-12-20 13:54) [7]

> IBExpert выдает другое число.
Потому как ты недофетчил в IBExpert"е.
Вот если сделаешь SELECT Count(*), то увидишь реальное кол-во.


 
Megabyte ©   (2006-12-20 13:56) [8]


> > Мне надо узнать кол-во возвращаемых строк, чтобы задать длину дин. массива.
перегружаеш данные из рекортсета в динамический массив? а зачем собственно? может не надо?

Анализ данных. Это только часть дела. У меня уже есть 4 запроса, кот. в один сделать невозможно.

Вот полностью задача: Надо расчитывать возможный расход деталей для ремонта телефонов. На каком основании делаю: получаю в одном запросе количество(count) всех деталей для каждой из моделей(1 запрос); потом получаю количество всех моделей(2-й запрос), кот. ремонтировали; считаю расход деталей на единицу каждой модели; далее смотрю, сколько аппаратов находится на приеме(3-й запрос) и сколько деталей есть на складе(4-й запрос); делаю расчет, сколько деталей  возможно понадобится для ремонта всем аппаратов, находящихся на приемке; если это число больше, чем на складе, вечером отправляется сигнализирующий об этом отчет на почту.

Чтобы все это увязать, все вычисления делаю на клиенте.

> Ega23 ©  (20.12.06 13:45) [4]

BLOB-поля в НД присутствуют?

Нет


 
Megabyte ©   (2006-12-20 14:00) [9]


> Desdechado ©  (20.12.06 13:54) [7]

> IBExpert выдает другое число.
Потому как ты недофетчил в IBExpert"е.
Вот если сделаешь SELECT Count(*), то увидишь реальное кол-во.

У меня в запросе уже есть агрегатное поле, где используется count.
Если перейти на последнюю строку, разве не показывает реальное кол-во записей(справа вверху)?

з.ы.Можно, конечно. задавать статически большую длину массива, или в цикле +1 делать, но это имхо не правильно...


 
Anatoly Podgoretsky ©   (2006-12-20 14:02) [10]

> Desdechado  (20.12.2006 13:54:07)  [7]

Вот это уже по теории, а не по реализации того или другого компонента.


 
Megabyte ©   (2006-12-20 14:02) [11]


> Megabyte ©  (20.12.06 13:48) [5]

Я может что не понимаю... Сделал предварительно TpFIBDataSet.fetchAll, а потом TpFIBDataSet.RecordCount, кот вернул число, равное  TpFIBDataSet.RecordCountFromSrv,т.е. 11811.
НО это не верное число! IBExpert выдает другое число. Не понимаю, почему?

Сорри, был не прав, после фетча на клиенте TpFIBDataSet.RecordCount выдает нужное мне число 2097!

Но все же происхождение TpFIBDataSet.RecordCountFromSrv = 11811 мне не понятно.

Всем спасибо.


 
Ega23 ©   (2006-12-20 14:02) [12]

После Open сделай Last. Потом смотри RecordCount


 
Anatoly Podgoretsky ©   (2006-12-20 14:04) [13]

> Megabyte  (20.12.2006 14:00:09)  [9]

Не обязан и тебе много примеров привели, почему ты можешь получить цифры с потолка


 
Sergey13 ©   (2006-12-20 14:09) [14]

> [8] Megabyte ©   (20.12.06 13:56)
> Чтобы все это увязать, все вычисления делаю на клиенте.

Массивы проще увязывать, чем датасеты?


 
Megabyte ©   (2006-12-20 14:18) [15]


> Sergey13 ©  (20.12.06 14:09) [14]
Массивы проще увязывать, чем датасеты?

Не понимаю, каким макаром мне их увязывать?

1запрос: ID_модели, Название_модели, Название_запчасти, Кол-во запчастей.
select Pm.phone_model_id, Pm.phone_model_title, Pl.part_description,
    count(*)
from phone_model Pm join Repairs R on Pm.phone_model_id = R.phone_model_id
    join parts_on_repair Pr on Pr.repair_id = R.repair_id
    join part_list Pl on Pr.part_list_id = Pl.part_list_id
group by Pm.phone_model_title, Pl.part_description, Pm.phone_model_id

2запрос: ID_модели, Кол-во моделей.
select Pm.phone_model_title, count(R.repair_id)
from phone_model Pm join Repairs R on Pm.phone_model_id = R.phone_model_id
group by Pm.phone_model_title


1 задача - связать эти 2 запроса:
ID_модели, Название_модели, Кол-во моделей, Название_запчасти, Кол-во запчастей, т.к. потом надо будет сделать вычисляемое поле: Кол-во запчастей/Кол-во моделей.
Что значит в данном случае связать датасеты и зачем, не понимаю. Да и это только часть операций.


 
iva ©   (2006-12-20 14:21) [16]


> Чтобы все это увязать, все вычисления делаю на клиенте.


А почему не стороне сервера?


 
Sergey13 ©   (2006-12-20 14:26) [17]

> [15] Megabyte ©   (20.12.06 14:18)
> Не понимаю, каким макаром мне их увязывать?
> select Pm.phone_model_id, Pm.phone_model_title, Pl.part_description, count(*)
> from phone_model

> select Pm.phone_model_title, count(R.repair_id)
> from phone_model

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


 
Megabyte ©   (2006-12-20 14:36) [18]

Ладно. Мысль вашу вроде понял. Осталось понять, как делать М-Д у TpFIBDataSet...
Спасибо.


 
Sergey13 ©   (2006-12-20 14:44) [19]

> [18] Megabyte ©   (20.12.06 14:36)

Что бы сделать М-Д у любых датасетов, надо что бы в подчиненном датасете в запросе было параметром ключевое поле главного датасета. При перемещении по главному ДС меняется параметр и переоткрывается детальный ДС. Но можно и съэмулировать это дело открыв сразу все интересующие данные и вместо переоткрытия детали просто смешаться на нужное значение мастер-поля и циклом (пока оно не сменилось) бегать по нему. Или, всесто позиционирования, можно отфильтровать по мастер-полю.


 
Desdechado ©   (2006-12-20 15:08) [20]

а я бы хранимку написал

Anatoly Podgoretsky ©   (20.12.06 14:02) [10]
> Вот это уже по теории, а не по реализации того или другого компонента.
Ну-ка, ну-ка, это какие такие компоненты вернут для SELECT Count(*) результат отличный от теории?


 
Anatoly Podgoretsky ©   (2006-12-20 15:22) [21]

> Desdechado  (20.12.2006 15:08:20)  [20]

Компоненты которые вместо этого использующие RecordCount, который какая то химера.


 
Виталий Панасенко   (2006-12-20 15:57) [22]


> Megabyte ©   (20.12.06 14:36) [18]
> Ладно. Мысль вашу вроде понял. Осталось понять, как делать
> М-Д у TpFIBDataSet...
> Спасибо.

На сайте www.devrace.com/ru естьподборка статей по этому поводу. Относительно RecordCount - установи PrepareOptions-psAskRecordCount=True


 
Megabyte ©   (2006-12-20 16:26) [23]

Всем спасибо.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.047 c
15-1172142142
Фармацевт
2007-02-22 14:02
2007.03.18
Чем отличается форматирование


15-1171890622
CCili
2007-02-19 16:10
2007.03.18
Кто-нить играл в World of Warcraft


8-1152851887
Узер
2006-07-14 08:38
2007.03.18
Звук


15-1172074969
oldman
2007-02-21 19:22
2007.03.18
Онищенко продолжает удивлять...


2-1172543287
dreamse
2007-02-27 05:28
2007.03.18
Правельное выполнение метода Free





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский