Как мне получить все записи через TDatasetProvider?

Если у меня есть два набора данных, которые оба являются производными от TCustomClientDataset, я могу иметь один вызов CloneCursor для другого и иметь независимое представление тех же данных. В документации создается впечатление, что вы можете добиться того же, используя TDatasetProvider, за исключением того, что исходным набором данных может быть любой набор данных.

Я пытаюсь заставить это работать. У меня есть TSimpleDataset (назовем его A), который считывает данные из базы данных, и TClientDataset (назовем его B), который работает с отдельным представлением, и есть TDBGrid, подключенный к B.

Если я вызываю B.CloneCursor(A, ...), в сетке отображаются все записи в A. Но если я создаю TDatasetProvider и устанавливаю для его свойства Dataset значение A, а затем устанавливаю его в качестве поставщика для B, сетка, подключенная к B, отображает только одну строку вместо всех.

Что я делаю не так и как это исправить, чтобы в сетке отображались все A?


person Mason Wheeler    schedule 15.09.2012    source источник
comment
Здесь нет проблем со вторым подходом. Я пробовал TADODataSet, а также TSimpleDataSet для A.   -  person NGLN    schedule 16.09.2012


Ответы (1)


После долгих поисков в отладчике мне удалось это отследить. При открытии набора данных данные проходят через поставщика, но сначала не вызывается First в исходном наборе данных. Из-за чего-то другого в программе исходный набор данных находился в последней строке, поэтому я получил только одну строку, прежде чем она попала в EOF. Явный вызов First заранее решает проблему.

person Mason Wheeler    schedule 16.09.2012
comment
Черт возьми, не уверен, называть это ошибкой или функцией. Думаю, кое-что нужно сказать обоим ... - person Marjan Venema; 16.09.2012