Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как можно получить кол-во строк рез-та запроса? 
:(
    Опции темы
lifer
Дата 7.11.2004, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 17.1.2004
Где: Kiev, Ukraine

Репутация: нет
Всего: нет



У меня в программе есть компонент query, datasourse и несколько dbEdit. Как мне узнать сколько строк рез-та возвращается после выполнения query?

P.S. Это моя превая программа с использованием БД на Делфи, раньше работал с MySQL+PHP. Там все с этим понятно, а тут пока что не очень smile .
Помогите пожалуйста.
PM MAIL WWW ICQ   Вверх
Pakshin A. S.
Дата 7.11.2004, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 2
Всего: 61



Код

Select Field1, Field2, Count(*) From Table1 where Field1 = Something


Функция count возвращает количество строк (записей) в наборе данных...

Вроде так.
PM   Вверх
Vit
Дата 7.11.2004, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Pakshin A. S. - нет так нельзя!

Query.recordcount - это количество строк


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
lifer
Дата 7.11.2004, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 17.1.2004
Где: Kiev, Ukraine

Репутация: нет
Всего: нет



Спасибо большое.
Еще вопрос:
У меня в программе есть компонент query1 через который я осуществляю поиск по БД. Мне необходимо после нахождения результата отредактиовать данные, но я не могу этого сделать т.к. выскакивает ошибка "Cannot edit a read-only dataset." В чем ошибка?

Это сообщение отредактировал(а) lifer - 7.11.2004, 20:47
PM MAIL WWW ICQ   Вверх
Medved
Дата 7.11.2004, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 1
Всего: 154



Набор данных, возвращаемый копонентом TQuery, являющийся результатом запроса, редактировать можно, но при определенный услових. Кроме того - я Вам не рекомендую так делать. Это очень плохой стиль. Вы сам потом будуте не рады, что так сделали.

А подробное описание того, как редактировать данные в запросах, я уже давал раньше, сделайте поиск по форуму.

Модератор: Один топик - ОДИН вопрос.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Vit
Дата 8.11.2004, 04:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Цитата(lifer @ 7.11.2004, 10:57)
У меня в программе есть компонент query1 через который я осуществляю поиск по БД. Мне необходимо после нахождения результата отредактиовать данные, но я не могу этого сделать т.к. выскакивает ошибка "Cannot edit a read-only dataset." В чем ошибка?



В 17й строке запроса... Код запроса в студию!


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
lifer
Дата 8.11.2004, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 17.1.2004
Где: Kiev, Ukraine

Репутация: нет
Всего: нет



Прочитав статью "БД с нуля" стал исользовать Table1.Locate. ТОлько остался один вопрос: Locate находит первую запись, удовлетворящую условию. А если у меня в таблице есть две записи с одинаковым значением искомого поля как мне перейти ко второй записи?
PM MAIL WWW ICQ   Вверх
Medved
Дата 8.11.2004, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 1
Всего: 154



Я могу конечно подсказать Вам ответ, ибо поиск осуществляется не только методом Locate.

Но лучше порекомендую http://xammepbook.narod.ru/doc/delph/delphi3bd.rar вот эту книжку Шумакова. В ней вы найдете все вопросы, которые у Вас могут возникнуть при работе с БД на начальном этапе. Написана доступным языком.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Vit
Дата 8.11.2004, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Locate - самый простой метод и используется только для одной записи.

Используйте SQL запрос.


Цитата(lifer @ 8.11.2004, 02:57)
Прочитав статью "БД с нуля" стал исользовать Table1.Locate



Если бы прочитали до конца и внимательно то использовали бы SQL как значительно более мощное средство


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Нурадин
Дата 13.12.2004, 14:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Подсоединяюсь ч/з ADOconnection - курсор серверный, ADOQuery - серверный курсор, тип динамический, добавляю DBGrid, выходит ошибка Dataset does not support bookmarks? which are required for multi-record data controls
В чем причина, спасибо заранее
  Вверх
Vit
Дата 13.12.2004, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



А какой SQL?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Kurt
Дата 14.12.2004, 04:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Цитата(Vit)
Query.recordcount - это количество строк

Нет так давно мой знакомый потерял кучу времени именно из-за этого свойства.
Как оказалось, у этого самого TQuery есть глюк - после выполнения запроса в RecordCount далеко не всегда содержится количество записей - часто там какое-то левое число.
Помогает только вызов FetchAll() перед использование св-ва RecordCount.
Кто-нибудь встречался с подобным? В чем причина?



--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Нурадин
Дата 14.12.2004, 05:59 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











MSSQL2000
  Вверх
Vit
Дата 14.12.2004, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Цитата(Kurt @ 13.12.2004, 19:02)
Нет так давно мой знакомый потерял кучу времени именно из-за этого свойства.
Как оказалось, у этого самого TQuery есть глюк - после выполнения запроса в RecordCount далеко не всегда содержится количество записей - часто там какое-то левое число.
Помогает только вызов FetchAll() перед использование св-ва RecordCount.
Кто-нибудь встречался с подобным? В чем причина?



Объясню причину. Дело в том что клиент серверные технологии предусматривают передачу данных через сетку только по требованию, некими кусками. Фактически результат запроса это поток, который некими кусками перекачивается с сервера на клиент. Если вы выполняете например

Select * From Table

То вовсе не все данные перекачиваются на клиента, пререкачивается блок (обычно примерно 64 Kb, но зависит от настроек провайдера базы данных) там где находится курсор данных, если выборка меньше 64 Kb - то recordcount вернёт правильное значение, если нет то какое-то средне-потолочное. Для ADO обычно помогает следующий приём который я всем настоятельно рекомендую использовать:

AdoQuery1.open;
AdoQuery1.Last;
AdoQuery1.First;
AdoQuery1.recordcount

Именно выделенная строчка гарантирует правильность значения AdoQuery1.recordcount!

Хуже дело обстоит с однонаправленными курсорами данных, там нет никакой возможности узнать количество записей без прохода до конца данных, а проход в обратную сторону невозможен... Увы это ограничение технологии, которое невозможно обойти


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0542 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.