Здравствуйте.
Количество строк в выборке select можно узнать 2мя способами.
1)
Код: Выделить всё
Form1.MyQuery1.SQL.Text:= 'select * from rd where name_id=:dname';
Form1.MyQuery1.ParamByName('dname').AsString := Pr1NameForDB[0,i1];
Form1.MyQuery1.Open;
i:=Form1.MyQuery1.RecordCount; // свойство RecordCount хранит число загруженных строк
2)
Код: Выделить всё
Form1.MyQuery1.SQL.Text:= 'select count(*) from rd where name_id=:dname';
Form1.MyQuery1.ParamByName('dname').AsString := Pr1NameForDB[0,i1];
Form1.MyQuery1.Open;
//SQL запрос возвратит число строк из таблицы rd отвечающих условию name_id=:dname
i:=Form1.MyQuery1.FieldByName('count(*)').AsInteger; //сохраним число строк
//теперь загрузим сами строки таблицы для дальнейшей работы с ними
Form1.MyQuery1.SQL.Text:= 'select * from rd where name_id=:dname';
Form1.MyQuery1.ParamByName('dname').AsString := Pr1NameForDB[0,i1];
Form1.MyQuery1.Open;
Учтите, что при работе со свойством RecordCount есть одна особенность. RecordCount хранит число строк, которое реально загрузил (закешировал) TMyQuery компонент из базы.
У компонента TMyQuery (а так же и у TMyTable) есть свойство FetchAll , по умолчанию оно установлено в True и это значит что будут загружаться сразу все записи из таблицы. В этом случае RecordCount соответствует реальному количеству записей в таблице БД.
Если FetchAll установлен в False то при открытии TMyQuery загрузятся не все записи. Число записей, которое будет загружено сразу после открытия ограничится числом указанным в свойстве FetchRows. При дальнейшей работе с TMyQuery (используя методы Next , Last) записи будут подгружаться по мере необходимости и число RecordCount будет увеличиваться. А метод Last вынудит TMyQuery подгрузить все записи из таблицы БД, если они ещё не были загружены.