| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Как можно получить кол-во строк рез-та запроса? |
| Автор: lifer 7.11.2004, 12:41 |
| У меня в программе есть компонент query, datasourse и несколько dbEdit. Как мне узнать сколько строк рез-та возвращается после выполнения query? P.S. Это моя превая программа с использованием БД на Делфи, раньше работал с MySQL+PHP. Там все с этим понятно, а тут пока что не очень Помогите пожалуйста. |
| Автор: Pakshin A. S. 7.11.2004, 14:33 | ||
Функция count возвращает количество строк (записей) в наборе данных... Вроде так. |
| Автор: Vit 7.11.2004, 16:36 |
| Pakshin A. S. - нет так нельзя! Query.recordcount - это количество строк |
| Автор: lifer 7.11.2004, 19:57 |
| Спасибо большое. Еще вопрос: У меня в программе есть компонент query1 через который я осуществляю поиск по БД. Мне необходимо после нахождения результата отредактиовать данные, но я не могу этого сделать т.к. выскакивает ошибка "Cannot edit a read-only dataset." В чем ошибка? |
| Автор: Medved 7.11.2004, 23:17 |
| Набор данных, возвращаемый копонентом TQuery, являющийся результатом запроса, редактировать можно, но при определенный услових. Кроме того - я Вам не рекомендую так делать. Это очень плохой стиль. Вы сам потом будуте не рады, что так сделали. А подробное описание того, как редактировать данные в запросах, я уже давал раньше, сделайте поиск по форуму. Модератор: Один топик - ОДИН вопрос. |
| Автор: Vit 8.11.2004, 04:24 | ||
В 17й строке запроса... Код запроса в студию! |
| Автор: lifer 8.11.2004, 11:57 |
| Прочитав статью "БД с нуля" стал исользовать Table1.Locate. ТОлько остался один вопрос: Locate находит первую запись, удовлетворящую условию. А если у меня в таблице есть две записи с одинаковым значением искомого поля как мне перейти ко второй записи? |
| Автор: Medved 8.11.2004, 12:36 |
| Я могу конечно подсказать Вам ответ, ибо поиск осуществляется не только методом Locate. Но лучше порекомендую http://xammepbook.narod.ru/doc/delph/delphi3bd.rar вот эту книжку Шумакова. В ней вы найдете все вопросы, которые у Вас могут возникнуть при работе с БД на начальном этапе. Написана доступным языком. |
| Автор: Vit 8.11.2004, 15:41 | ||
| Locate - самый простой метод и используется только для одной записи. Используйте SQL запрос.
Если бы прочитали до конца и внимательно то использовали бы SQL как значительно более мощное средство |
| Автор: Нурадин 13.12.2004, 14:52 |
| Подсоединяюсь ч/з ADOconnection - курсор серверный, ADOQuery - серверный курсор, тип динамический, добавляю DBGrid, выходит ошибка Dataset does not support bookmarks? which are required for multi-record data controls В чем причина, спасибо заранее |
| Автор: Vit 13.12.2004, 16:52 |
| А какой SQL? |
| Автор: Kurt 14.12.2004, 04:02 | ||
Нет так давно мой знакомый потерял кучу времени именно из-за этого свойства. Как оказалось, у этого самого TQuery есть глюк - после выполнения запроса в RecordCount далеко не всегда содержится количество записей - часто там какое-то левое число. Помогает только вызов FetchAll() перед использование св-ва RecordCount. Кто-нибудь встречался с подобным? В чем причина? |
| Автор: Нурадин 14.12.2004, 05:59 |
| MSSQL2000 |
| Автор: Vit 14.12.2004, 17:54 | ||
Объясню причину. Дело в том что клиент серверные технологии предусматривают передачу данных через сетку только по требованию, некими кусками. Фактически результат запроса это поток, который некими кусками перекачивается с сервера на клиент. Если вы выполняете например Select * From Table То вовсе не все данные перекачиваются на клиента, пререкачивается блок (обычно примерно 64 Kb, но зависит от настроек провайдера базы данных) там где находится курсор данных, если выборка меньше 64 Kb - то recordcount вернёт правильное значение, если нет то какое-то средне-потолочное. Для ADO обычно помогает следующий приём который я всем настоятельно рекомендую использовать: AdoQuery1.open; AdoQuery1.Last; AdoQuery1.First; AdoQuery1.recordcount Именно выделенная строчка гарантирует правильность значения AdoQuery1.recordcount! Хуже дело обстоит с однонаправленными курсорами данных, там нет никакой возможности узнать количество записей без прохода до конца данных, а проход в обратную сторону невозможен... Увы это ограничение технологии, которое невозможно обойти |