Разница между фильтром и предложением where - PullRequest
3 голосов
/ 21 июня 2011

Я всегда с моим приложением Access ..

Насколько я знаю, когда я выполняю предложение sql для моего бэкэнда (файл accdb), скажем

SELECT * FROM tbl WHERE id=1;

Он фильтруется на бэкэнде, затем по сети передается только одна запись.

У меня такой вопрос, когда я открываю форму, ограниченную запросом (без условия where), используя параметр фильтра, например

DoCmd.OpenForm "Form",,, strFilter

сколько записей передается по сети? Они фильтруются так же, как это предложение sql, или они фильтруются локально, а это значит, что большая сеть данных должна быть отправлена ​​по сети?

Я обеспокоен этим, потому что у меня есть много подчиненных форм, связанных с запросами, затем я открываю их в основных формах с параметром фильтра. И конечно, сеть здесь не очень хорошая.

РЕДАКТИРОВАТЬ: среда моего приложения находится на фабрике без локального сервера. Все сети / информация находятся в штаб-квартире компании в 300 км, может быть, WAN. Кроме перехода на сервер SQL, есть ли у меня другие решения, чтобы сделать его более надежным? Я слышал о чем-то « Citrix », у меня в системном трее была «Программа Citrix Neighborhood Agent Program», может ли она разместить мое приложение, чтобы сделать его быстрее?

Ответы [ 3 ]

2 голосов
/ 21 июня 2011
DoCmd.OpenForm "Form",,, strFilter

сколько записей передается по сети?

Столько, сколько соответствует вашему состоянию strFilter.Таким образом, если WHERE id=1 возвращает одну строку в предыдущем запросе SELECT и strFiler = "id = 1", то OpenForm откроет форму с этой единственной строкой в ​​качестве источника записи.

Параметр WhereCondition также доступен для DoCmd.OpenReport и работает так же, как и с OpenForm, что также может оказаться полезным.

Редактировать : вы должны иметьиндекс для поддержки критериев WHERE, независимо от того, встроите ли вы его в запрос или сделаете это «ad hoc» с помощью OpenForm WhereCondition.С индексом ядро ​​базы данных прочитает индекс, чтобы найти, какие строки соответствуют, и затем извлечет эти строки.Таким образом, поиск будет более эффективным и, следовательно, более быстрым, чем заставление движка читать каждую строку, чтобы определить, какие из них включают совпадения.

1 голос
/ 24 июня 2011

Когда Jet / ACE запрашивает данные с файлового сервера, первое, что ему нужно, это информация заголовка базы данных, которая имеет структуры данных, описывающие структуру файла данных.Эта информация запрашивается один раз в сеансе Access, так что на самом деле это проблема только при запуске.

Когда вы затем запрашиваете запись, Jet / ACE использует имеющиеся у него метаданные о файле для запроса соответствующих страниц индексадля задействованных таблиц затем используйте эти индексы для определения минимального количества запрашиваемых страниц данных.

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

Тем не менее, это все равно будет больше, чем допустимое время отклика в глобальной сети.Доступ был разработан для использования через проводную локальную сеть еще в те времена, когда стандарт сети был 10BaseT (10 Мбит / с).Что-нибудь меньшее, и у вас будут проблемы.WiFi также работает, но не из-за пропускной способности, а из-за ненадежности соединений.

Когда вам необходимо поддерживать пользователей удаленно, самое простое решение - разместить приложение Access в терминале Windows.Сервер.WTS построен на основе технологии, лицензированной у Citrix, поэтому вы часто будете видеть всю концепцию, описанную как Citrix, но ваши настройки WTS по умолчанию сильно отличаются от установки Citrix.Вы должны доплатить за Citrix, и он предоставляет вам множество различных функций.

Я использовал WTS без Citrix во многих средах и, честно говоря, не могу понять, каким будет оправдание для Citrix (кроме случаев, когдаВы должны поддерживать большое количество удаленных пользователей, т. е. в диапазоне от 100 и более).WTS устанавливается на каждом Windows Server, начиная с Windows 2000, и его очень легко установить и настроить.

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

Третьим решением будет Sharepoint, но у меня нет опыта в этом.Это определенно направление, которое MS продвигает для приложений Access в распределенных установках, но оно довольно сложное и имеет множество функций.Я бы не рекомендовал погружаться в него без особой подготовки и значительной корпоративной поддержки.

0 голосов
/ 21 июня 2011

На самом деле, с Access, на самом деле нет настоящего бэк-энда, как с добросовестным клиент-серверным механизмом, таким как SQL Server, Oracle или Postgres. Access использует архитектуру с общими файлами, в которой сама клиентская программа «владеет» частями файла на диске, в отличие от архитектуры передачи сообщений, в которой клиентская программа отправляет запросы данных в процесс внутреннего механизма, выполняющийся на сервере, где этот процесс «владеет» данными. С shared-файлом вся работа выполняется на клиенте, поэтому существует возможность передачи данных по грузовым поездам по проводам, если файл базы данных находится на другом компьютере .

Когда вы запрашиваете данные для Access, он часто читает намного больше данных из файла MDB на диске и кэширует на локальном клиенте намного больше данных, чем запрашивал ваш оператор. Access пытается сделать это разумно, предвидя ваши потребности. «Теперь, когда я здесь, - говорит Access, - я мог бы также сделать дорогостоящую поездку на диск и получить кучу данных». Не пойми меня неправильно. Я не доступный доступ и использую его уже более 10 лет, со времен, когда пропускная способность локальной сети составляла 10 Мбит / с. Доступ очень хорош для некоторых вещей. Но Access может поглотить пропускную способность, как вы не поверите.

Читайте о "наборах клавиш" в Access.

P.S. Я не такой, как Тим, который оставил тебе комментарий.

Некоторые полезные ссылки:

  http://msdn.microsoft.com/en-us/library/dd942824(v=office.12).aspx
  http://support.microsoft.com/kb/209126
  http://support.microsoft.com/kb/112112
  http://support.microsoft.com/kb/128808
...