2015-07-20 1 views
0

С прогрессом 9.1е я использую динамические запросы для создания расширяемых выводов данных.Поля Фраза Иногда игнорируется в динамическом запросе

Я использую запрос вида

FOR EACH tableName FIELDS(fieldName1 fieldName2) NO-LOCK 
    WHERE fieldName3 = "Value" 
    AND fieldName4 = "AnotherValue" 

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

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

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

В запросе указывается no-lock, как и параметр get-next, поэтому полная запись для исключительной блокировки также не должна быть релевантной.

Существуют ли другие критерии, по которым Progress решает выбрать всю запись и есть ли способ ее остановить?

+0

Единственный раз, когда вы должны заботиться об извлеченных FIELDS, происходит медленное сетевое соединение, чтобы минимизировать сетевой трафик. –

+0

@TimKuehn - это может быть предназначено для использования, но я пытаюсь создать динамический процесс запроса, который позволяет извлекать дополнительные данные для «будущей проверки», а так как динамические запросы прогресса не имеют выражения SELECT, Поля, казалось бы, были бы единственным вариантом для извлечения только необходимых полей в выбранных записях. В противном случае мне пришлось бы включить список необходимых полей в конфигурацию где-то еще, что не является идеальным. – Screwtape

+0

Я не вижу, как вы собираетесь получать ПОЛЫ, чтобы делать то, что вы ищете, - согласно 10.2B docs: «Когда вы указываете список полей, AVM может извлекать дополнительные поля или полную запись в зависимости от типа операции поиска и DataServer, который предоставляет запись». В сущности, полевые обозначения FIELDS являются предположением о том, что AVM может переопределяться по различным причинам. –

ответ

0

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

Это новость для меня, что вы можете использовать FIELDS с динамическим запросом, но документация подразумевает, что это правда.

Мне любопытно, как вы знаете, что он извлекает всю запись, если только вы не обнюхиваете пакет или что-то еще?

Во всяком случае, вот несколько вещей, которые вы можете проверить:

  • параметр fldisable запуска
  • rereadfields параметр запуска
  • путаница с КРОМЕ
  • в базе знаний Прогресса, однако я только что проверил быстро и не мог найти что-нибудь полезное. Я смутно помню ошибку в некоторых версиях, из которых ваш вопрос звонит колокол

Удачи.

+0

Привет! То, как я знаю, что происходит, - это то, что я просматриваю буфер, получая hBuf: BUFFER-FIELD (i), а затем проверяю hFld: AVAILABLE. Когда фраза полей работает, я просто получаю одно или два поля. Когда это не сработает - я получаю всю запись. Я хотел бы использовать фразу полей для выбора полей для запроса. – Screwtape

+0

TIL, который вы можете использовать ДОСТУПНО на полях! Благодаря! – GregT

0

Согласно этой статье K-Base это можно использовать ПОЛЕЙ с динамическими запросами:

http://knowledgebase.progress.com/articles/Article/21647

Можете ли вы поделиться код, который показывает, что это не работает для вас?