![]() |
|
|
![]()
|
|
| lifer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 17.1.2004 Где: Kiev, Ukraine Репутация: нет Всего: нет |
У меня в программе есть компонент query, datasourse и несколько dbEdit. Как мне узнать сколько строк рез-та возвращается после выполнения query?
P.S. Это моя превая программа с использованием БД на Делфи, раньше работал с MySQL+PHP. Там все с этим понятно, а тут пока что не очень Помогите пожалуйста. |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 2 Всего: 61 |
Функция count возвращает количество строк (записей) в наборе данных... Вроде так. |
|||
|
||||
| Vit |
|
|||
![]() 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 |
|||
|
||||
| lifer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 17.1.2004 Где: Kiev, Ukraine Репутация: нет Всего: нет |
Спасибо большое.
Еще вопрос: У меня в программе есть компонент query1 через который я осуществляю поиск по БД. Мне необходимо после нахождения результата отредактиовать данные, но я не могу этого сделать т.к. выскакивает ошибка "Cannot edit a read-only dataset." В чем ошибка? Это сообщение отредактировал(а) lifer - 7.11.2004, 20:47 |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 1 Всего: 154 |
Набор данных, возвращаемый копонентом TQuery, являющийся результатом запроса, редактировать можно, но при определенный услових. Кроме того - я Вам не рекомендую так делать. Это очень плохой стиль. Вы сам потом будуте не рады, что так сделали.
А подробное описание того, как редактировать данные в запросах, я уже давал раньше, сделайте поиск по форуму. Модератор: Один топик - ОДИН вопрос. -------------------- |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 14 Всего: 207 |
В 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 |
|||
|
||||
| lifer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 17.1.2004 Где: Kiev, Ukraine Репутация: нет Всего: нет |
Прочитав статью "БД с нуля" стал исользовать Table1.Locate. ТОлько остался один вопрос: Locate находит первую запись, удовлетворящую условию. А если у меня в таблице есть две записи с одинаковым значением искомого поля как мне перейти ко второй записи?
|
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 1 Всего: 154 |
Я могу конечно подсказать Вам ответ, ибо поиск осуществляется не только методом Locate.
Но лучше порекомендую http://xammepbook.narod.ru/doc/delph/delphi3bd.rar вот эту книжку Шумакова. В ней вы найдете все вопросы, которые у Вас могут возникнуть при работе с БД на начальном этапе. Написана доступным языком. -------------------- |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 14 Всего: 207 |
Locate - самый простой метод и используется только для одной записи.
Используйте SQL запрос.
Если бы прочитали до конца и внимательно то использовали бы 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 |
|||
|
||||
| Нурадин |
|
|||
|
Unregistered |
Подсоединяюсь ч/з ADOconnection - курсор серверный, ADOQuery - серверный курсор, тип динамический, добавляю DBGrid, выходит ошибка Dataset does not support bookmarks? which are required for multi-record data controls
В чем причина, спасибо заранее |
|||
|
||||
| Vit |
|
|||
![]() 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 |
|||
|
||||
| Kurt |
|
|||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: нет Всего: 36 |
Нет так давно мой знакомый потерял кучу времени именно из-за этого свойства. Как оказалось, у этого самого TQuery есть глюк - после выполнения запроса в RecordCount далеко не всегда содержится количество записей - часто там какое-то левое число. Помогает только вызов FetchAll() перед использование св-ва RecordCount. Кто-нибудь встречался с подобным? В чем причина? -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
| Нурадин |
|
|||
|
Unregistered |
MSSQL2000
|
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 14 Всего: 207 |
Объясню причину. Дело в том что клиент серверные технологии предусматривают передачу данных через сетку только по требованию, некими кусками. Фактически результат запроса это поток, который некими кусками перекачивается с сервера на клиент. Если вы выполняете например 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 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |