|
Помогите советом с выбором RecordSourceType
|
|||
---|---|---|---|
#18+
Хелп читал, интернет смотрел, думать пробовал и т.д. Пользуюсь VFP9, FormDesigner обычно в Load формы производил открытие таблиц и их просмотр в гриде..., вот возникла проблема надо смотреть не таблицу, а выборку(в сети из 3 компов), понятно, что в таблице из миллиона записей, размером 1 гиг в Load select во временную таблицу(курсор), это долго, но вроде как есть варианты, которые выбирают для показа в гриде по несколько записей, и их постоянно подкачивают в грид, вот думаю это правда или нет... и в связи с этим думаю что лучше, и чем отличаются курсор адаптер, RecordSourceType=SQLStatement и RecordSourceType=QPR Как работает QPR, без понятия(я не пользуюсь контейнером базы данных), вроде создал запрос, записал, а привязать к гриду не получается(в record source указал имя файла, не получилось, надо его наверное как-то открыть), тем более как там происходит refresh данных тоже не ясно, и в чём его отличие от SQLStatemen, и от курсор адаптер... в общем нужно как-то разобраться, чтоб определиться... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 11:47 |
|
Помогите советом с выбором RecordSourceType
|
|||
---|---|---|---|
#18+
Никто и никогда не будет закачивать ВСЮ таблицу на клиента. Это бессмысленно, поскольку ни один "вменяемый" человек просто не способен визуально просмотреть миллион записей. Да и не нужны они пользователю. Как правило, пользователь работает с крайне ограниченным набором данных. Например, за последний день, неделю, ну, или месяц. Другой вариант, пользователю предоставляется набор критериев, по которым он выбирает данные. Но, опять же, предполагается, что общий объем выборки небольшой. Десятки, максимум, несколько сотен записей. Именно из подобных соображений и делаются выборки. Т.е. выборки с дополнительным условием 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 12:53 |
|
Помогите советом с выбором RecordSourceType
|
|||
---|---|---|---|
#18+
Спасибо...т.е, если грид используется только для просмотра, а не редактирования, то курсор адаптером можно не заморачиваться... и приминяя "бритву оккама" остаётся два варианта QPR, который не понятно как подключить или открыть (у меня есть созданный файл qpr(select * from x)) и второй вариант SQLStatement, который тоже не понятно, при просмотре в гриде он выполняется весь или только для видимых записей в гриде.... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2011, 06:05 |
|
Помогите советом с выбором RecordSourceType
|
|||
---|---|---|---|
#18+
Выполняется весь. Но покажите мне пользователя, которому _действительно_ нужно такое количество записей одновременно, что их выборка будет тормозить ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2011, 06:54 |
|
Помогите советом с выбором RecordSourceType
|
|||
---|---|---|---|
#18+
сомневаюсь, что выполняется весь запрос при SQLStatement, вроде как там подкачка по мере необходимости, когда курсор сдвигается, если люди желают видеть весь список записей а потом ввести параметры выборки, а не вначале параметры выборки, а потом список...но это опять отвлечение..., т.е. получается отказаться от QPR,SQLStatement и открывать всю таблицу ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2011, 08:27 |
|
Помогите советом с выбором RecordSourceType
|
|||
---|---|---|---|
#18+
q1w1e1если люди желают видеть весь список записейто это уже их проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2011, 08:35 |
|
Помогите советом с выбором RecordSourceType
|
|||
---|---|---|---|
#18+
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). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2011, 08:53 |
|
Помогите советом с выбором RecordSourceType
|
|||
---|---|---|---|
#18+
q1w1e1сомневаюсь, что выполняется весь запрос при SQLStatement, вроде как там подкачка по мере необходимости, когда курсор сдвигается, если люди желают видеть весь список записей а потом ввести параметры выборки, а не вначале параметры выборки, а потом список...но это опять отвлечение..., т.е. получается отказаться от QPR,SQLStatement и открывать всю таблицу Любой, т.е. абсолютно любой, из перечисленных ранее методов, в конце концов сводится к выполнению команды Select-SQL. Вне зависимости от того, как именно она "скрыта" или во что "обернута". Это значит, что вне зависимости от того, будет ли эта команда выполнена через файл QPR, прописана в SQLStatement или "обернута" в CursorAdapter общие принципы выполнения от этого не изменятся. Запрос выполняется сразу и целиком. Нет инструментов, чтобы "фетчить" (осуществлять подкачку "по требованию") запроса к DBF-таблицам. С другой стороны, а зачем Вам вообще запрос? Почему Вы хотите отказаться от прямого обращения к DBF-таблицам? В чем проблема-то? Вот при просмотре DBF-таблиц будет скачано на клиента только то, что отображается (ну, и индекс, конечно). Все, как Вы и хотели... Основная идея запроса - это выбрать (запросить) только то, что необходимо. Определенные поля из определенных записей. Если Вам необходима вся таблица, что зачем запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2011, 10:13 |
|
Помогите советом с выбором RecordSourceType
|
|||
---|---|---|---|
#18+
q1w1e1QPR, который не понятно как подключить или открыть (у меня есть созданный файл qpr(select * from x))Dc t там понятно, надо просто хелп читать внимательно и думалку включать. Код: plaintext 1.
Но даже при работе с SQL сервером если не дай бог юзер нажмет клавишу для прыгания в конец, то весь фетчинг пойдет лесом и придется ждать закачки всей выборки. К тому же, фетчинг возможен только в асинхронном режиме, которым еще надо уметь пользоваться и делать много лишних телодвижений по его поддержанию. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2011, 10:19 |
|
Помогите советом с выбором RecordSourceType
|
|||
---|---|---|---|
#18+
Спасибо за ответы, более-менее понятно.. PS: ВладимирМа зачем Вам вообще запрос? Почему Вы хотите отказаться от прямого обращения к DBF-таблицам? В чем проблема-то? Да как обычно... в итоговой таблице сумма какого-нибудь поля складывается из записей в дочерней таблице... просматривая некоторые проекты, видишь, что вводится дополнительное поле, для отражение этой суммы, которая подсчитывается в дочерней, а потом replace в итоговую, но так как формат DBF плохо защищён, можно помимо программ, триггеров и т.д. добавить удалить записи в дочерней таблице, то и может получиться несоответствие этих сумм, которая в итоговой и дочерней..., наверное тоже буду вводить дополнительное поле..., раз всё так сложно... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2011, 11:35 |
|
Помогите советом с выбором RecordSourceType
|
|||
---|---|---|---|
#18+
q1w1e1в итоговой таблице сумма какого-нибудь поля складывается из записей в дочерней таблице... просматривая некоторые проекты, видишь, что вводится дополнительное поле, для отражение этой суммы, которая подсчитывается в дочерней, а потом replace в итоговую, но так как формат DBF плохо защищён, можно помимо программ, триггеров и т.д. добавить удалить записи в дочерней таблице, то и может получиться несоответствие этих сумм, которая в итоговой и дочерней..., наверное тоже буду вводить дополнительное поле..., раз всё так сложно... Тут по-другому никак. Если каждый раз считать суммы - все будет тормозить. Для контроля сделай процедуру проверки, и также делай проверку суммы при открытии документа и выводе его на печать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2011, 13:38 |
|
|
start [/forum/topic.php?fid=41&msg=37368344&tid=1584256]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
73ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 195ms |
0 / 0 |