2013-03-31 2 views
2

У меня есть форма с компонентом dbgrid и sqlquery. Я пытаюсь заполнить dbgrid с помощью sqlquery. Когда я это сделаю, я получаю сообщение: «Операция не разрешена для однонаправленного набора данных». Я НЕ хочу использовать набор данных клиента, так как мне не нужна «локальная» копия данных, я бы хотел прочитать и отобразить данные напрямую. Как это может быть сделано?dbgrid без клиента dataset

ответ

10

documentation четко указано, (подчеркивание добавлено):

TSQLQuery является однонаправленным набор данных. В отличие от других наборов данных, однонаправленные наборы данных не буферируют несколько записей в памяти. Из-за этого вы можете перемещаться только с использованием методов First и Next. Нет встроенной поддержки редактирования: вы можете редактировать данные только в SQL-запросе, явно создавая команду SQL UPDATE или подключая набор данных к набору данных клиента с помощью поставщика.

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

(На самом деле, все DBExpress компоненты являются однонаправленными, в соответствии с документацией по Types of DBExpress DataSets.)

Вы должны либо использовать TClientDataSet или изменения с помощью DBExpress в какой-то другой метод доступа к данным например ADO, или отобразить данные с использованием чего-либо, кроме TDBGrid (например, TStringGrid) и реализовать собственное внутреннее хранилище. Однако TClientDataSet не должен быть файлом диска, если количество данных, которое вы извлекаете, управляемо в памяти; все данные могут оставаться там без «локальной копии» («набор данных в памяти»).

Смежные вопросы