Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите советом с выбором RecordSourceType / 11 сообщений из 11, страница 1 из 1
26.07.2011, 11:47
    #37367065
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите советом с выбором RecordSourceType
Хелп читал, интернет смотрел, думать пробовал и т.д.
Пользуюсь VFP9, FormDesigner
обычно в Load формы производил открытие таблиц и их просмотр в гриде..., вот возникла проблема надо смотреть не таблицу, а выборку(в сети из 3 компов), понятно, что в таблице из миллиона записей, размером 1 гиг в Load select во временную таблицу(курсор), это долго, но вроде как есть варианты, которые выбирают для показа в гриде по несколько записей, и их постоянно подкачивают в грид, вот думаю это правда или нет...
и в связи с этим думаю что лучше, и чем отличаются курсор адаптер, RecordSourceType=SQLStatement и RecordSourceType=QPR
Как работает QPR, без понятия(я не пользуюсь контейнером базы данных), вроде создал запрос, записал, а привязать к гриду не получается(в record source указал имя файла, не получилось, надо его наверное как-то открыть), тем более как там происходит refresh данных тоже не ясно, и в чём его отличие от SQLStatemen, и от курсор адаптер... в общем нужно как-то разобраться, чтоб определиться...
...
Рейтинг: 0 / 0
26.07.2011, 12:53
    #37367191
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите советом с выбором RecordSourceType
Никто и никогда не будет закачивать ВСЮ таблицу на клиента. Это бессмысленно, поскольку ни один "вменяемый" человек просто не способен визуально просмотреть миллион записей. Да и не нужны они пользователю. Как правило, пользователь работает с крайне ограниченным набором данных. Например, за последний день, неделю, ну, или месяц.

Другой вариант, пользователю предоставляется набор критериев, по которым он выбирает данные. Но, опять же, предполагается, что общий объем выборки небольшой. Десятки, максимум, несколько сотен записей.

Именно из подобных соображений и делаются выборки. Т.е. выборки с дополнительным условием WHERE.

Физически, выборки можно оформить следующим образом

1. Программный код (файл PRG).
1.1. Напрямую в методе формы
1.2. В файле QPR (это обычный файл PRG с измененным расширением. Наличие контейнера базы данных для него не обязательно)
1.3. Прописать в свойстве Grid.RecordSource, если RecordSourceType=SQLStatement

2. Local View (требует наличие контейнера базы данных)

3. Использование класса CursorAdapter

Какой способ лучше? Ну, любые способы имеют достоинства и недостатки. Все зависит от решаемой задачи и личных предпочтений программиста.

Программный код (вне зависимости от выбранного варианта) потребует дополнительного программирования, если потребуется изменения, внесенные в Grid, перенести в таблицу-источник. Т.е. придется писать много кода. Но, с другой стороны, процессы чтения и модификации под полным контролем программиста и нет "непонятных" процессов, выполняемых "автоматически"

Local View и CursorAdapter позволяют автоматизировать процесс переноса изменений из выборки обратно в таблицу-источник

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

CursorAdapter - относительно сложен в понимании, однако дает бОльшую "свободу маневра" для программиста по сравнению с Local View
...
Рейтинг: 0 / 0
27.07.2011, 06:05
    #37368296
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите советом с выбором RecordSourceType
Спасибо...т.е, если грид используется только для просмотра, а не редактирования, то курсор адаптером можно не заморачиваться... и приминяя "бритву оккама" остаётся два варианта QPR, который не понятно как подключить или открыть (у меня есть созданный файл qpr(select * from x)) и второй вариант SQLStatement, который тоже не понятно, при просмотре в гриде он выполняется весь или только для видимых записей в гриде....
...
Рейтинг: 0 / 0
27.07.2011, 06:54
    #37368298
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите советом с выбором RecordSourceType
Выполняется весь. Но покажите мне пользователя, которому _действительно_ нужно такое количество записей одновременно, что их выборка будет тормозить
...
Рейтинг: 0 / 0
27.07.2011, 08:27
    #37368341
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите советом с выбором RecordSourceType
сомневаюсь, что выполняется весь запрос при SQLStatement, вроде как там подкачка по мере необходимости, когда курсор сдвигается, если люди желают видеть весь список записей а потом ввести параметры выборки, а не вначале параметры выборки, а потом список...но это опять отвлечение..., т.е. получается отказаться от QPR,SQLStatement и открывать всю таблицу
...
Рейтинг: 0 / 0
27.07.2011, 08:35
    #37368344
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите советом с выбором RecordSourceType
q1w1e1если люди желают видеть весь список записейто это уже их проблемы.
...
Рейтинг: 0 / 0
27.07.2011, 08:53
    #37368352
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите советом с выбором RecordSourceType
q1w1e1сомневаюсь, что выполняется весь запрос при SQLStatement, вроде как там подкачка по мере необходимости...
Есть сильное подозрение что подкачка работает только при использовании SQL-сервера, если запрос к DBF то он сразу целиком выборку сделает.
В хэлпе так написано:
HELP CURSORGETPROP( ) Function FetchIsComplete L
If True (.T.), the fetch process is complete for an ODBC or ADO-based cursor.
If False (.F.), the fetch process has not been completed.
This option is not supported for tables and local views or on the environment level (work area 0).
...
Рейтинг: 0 / 0
27.07.2011, 10:13
    #37368442
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите советом с выбором RecordSourceType
q1w1e1сомневаюсь, что выполняется весь запрос при SQLStatement, вроде как там подкачка по мере необходимости, когда курсор сдвигается, если люди желают видеть весь список записей а потом ввести параметры выборки, а не вначале параметры выборки, а потом список...но это опять отвлечение..., т.е. получается отказаться от QPR,SQLStatement и открывать всю таблицу
Любой, т.е. абсолютно любой, из перечисленных ранее методов, в конце концов сводится к выполнению команды Select-SQL. Вне зависимости от того, как именно она "скрыта" или во что "обернута". Это значит, что вне зависимости от того, будет ли эта команда выполнена через файл QPR, прописана в SQLStatement или "обернута" в CursorAdapter общие принципы выполнения от этого не изменятся. Запрос выполняется сразу и целиком. Нет инструментов, чтобы "фетчить" (осуществлять подкачку "по требованию") запроса к DBF-таблицам.

С другой стороны, а зачем Вам вообще запрос? Почему Вы хотите отказаться от прямого обращения к DBF-таблицам? В чем проблема-то? Вот при просмотре DBF-таблиц будет скачано на клиента только то, что отображается (ну, и индекс, конечно). Все, как Вы и хотели...

Основная идея запроса - это выбрать (запросить) только то, что необходимо. Определенные поля из определенных записей. Если Вам необходима вся таблица, что зачем запрос?
...
Рейтинг: 0 / 0
27.07.2011, 10:19
    #37368452
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите советом с выбором RecordSourceType
q1w1e1QPR, который не понятно как подключить или открыть (у меня есть созданный файл qpr(select * from x))Dc t там понятно, надо просто хелп читать внимательно и думалку включать.
Код: plaintext
1.
RecordSourceType - QPR
RecordSource - <file с запросом>.qpr
Фетчинг сам фокс не делает, можно про него забыть.
Но даже при работе с SQL сервером если не дай бог юзер нажмет клавишу для прыгания в конец, то весь фетчинг пойдет лесом и придется ждать закачки всей выборки. К тому же, фетчинг возможен только в асинхронном режиме, которым еще надо уметь пользоваться и делать много лишних телодвижений по его поддержанию.
...
Рейтинг: 0 / 0
27.07.2011, 11:35
    #37368590
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите советом с выбором RecordSourceType
Спасибо за ответы, более-менее понятно..
PS: ВладимирМа зачем Вам вообще запрос? Почему Вы хотите отказаться от прямого обращения к DBF-таблицам? В чем проблема-то?
Да как обычно... в итоговой таблице сумма какого-нибудь поля складывается из записей в дочерней таблице... просматривая некоторые проекты, видишь, что вводится дополнительное поле, для отражение этой суммы, которая подсчитывается в дочерней, а потом replace в итоговую, но так как формат DBF плохо защищён, можно помимо программ, триггеров и т.д. добавить удалить записи в дочерней таблице, то и может получиться несоответствие этих сумм, которая в итоговой и дочерней..., наверное тоже буду вводить дополнительное поле..., раз всё так сложно...
...
Рейтинг: 0 / 0
27.07.2011, 13:38
    #37368830
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите советом с выбором RecordSourceType
q1w1e1в итоговой таблице сумма какого-нибудь поля складывается из записей в дочерней таблице... просматривая некоторые проекты, видишь, что вводится дополнительное поле, для отражение этой суммы, которая подсчитывается в дочерней, а потом replace в итоговую, но так как формат DBF плохо защищён, можно помимо программ, триггеров и т.д. добавить удалить записи в дочерней таблице, то и может получиться несоответствие этих сумм, которая в итоговой и дочерней..., наверное тоже буду вводить дополнительное поле..., раз всё так сложно...
Тут по-другому никак. Если каждый раз считать суммы - все будет тормозить.
Для контроля сделай процедуру проверки, и также делай проверку суммы при открытии документа и выводе его на печать.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите советом с выбором RecordSourceType / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]