Показать сообщение отдельно
  #3  
Старый 25.08.2007, 22:49
Jacky Jacky вне форума
Прохожий
 
Регистрация: 24.06.2007
Адрес: Тюмень
Сообщения: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
А если попробовать количество записей умножить на размер записи (TADOQuery.RecordSize)?

Первая мысль была такая же, но не получается.

"Чистый" (т.е. размер записи, согласно занимаемым байтам в зависимости от типа поля) размер записи в БД составляет 265 байт.

Свойство RecordSize в Delphi (2005) возвращает 560 байт.

Решил допустить, что в в любом случае в передаваемый пакет данных должен содержать (как минимум) признак разделителя полей. Полей 35, значит к 265 плюсуем еще 35 байт, плюс должны быть признаки разделения записей и т.д.

Но в любом случае 560 не получается.

Потом подумал, что должны передаваться еще и названия полей в пакете, как минимум один раз.
Чтобы убедиться в правильности предположения, провел эксперимент - сократил названия полей в БД. Свойство RecordSize не изменилось! Те же самые 560.
Причем в БД есть поля нефиксированной переменной длины (varchar), длина которых различается в каждых записях. Это не повлияло на RecordSize - снова 560.
Причем выяснилось, что независимо от количество возвращаемых запросом из БД записей, их RecordSize постоянен и неизменен - всегда 560.
При сокращении/увеличении количества полей, возвращаемых запросом, размер RecordSize варьировался, но далеко не всегд логичным образом - иногда на меньшее количество полей размер превышал (!) 560 первоначальных байт.

Открыл встроенную справку, прочитал про RecordSize, цитирую:
Цитата:
Description

RecordSize indicates the size needed for internal record buffers. In TDataSet, the value of RecordSize is always 0 because TDataSet does not implement record buffering. Descendant classes that buffer records override the property getter to return the number of bytes in a record buffer.

Т.е. это свойство возвращает не истинный размер записи, а размер требуемого буфера.

Вопрос снова актуален - каким образом можно получить размер возвращаемого sql-запроса?
Ответить с цитированием