Понятия не имею, какое у него официальное название, поэтому, может быть, поэтому я ничего не могу найти в Интернете.
По сути, когда вы используете sql в vfp, он делает первоначальный проход (иногда 2?) Без перемещения курсора записи или сохранения результатов.
К сожалению, в моем sql есть подпрограммы, которые запускаются и меняют вещи во время этого первоначального прохода.
Почему я использую подпрограммы в SQL-запросах? Поскольку vfp не поддерживает ссылки вне подзапроса в выбранных элементах (еще раз, я не знаю официального имени).
Пример: select id, (select detail.name from detail where master.id == detail.id) name from master
Это работает, хотя: select id, getname(id) from master
, где getname()
- подпрограмма, содержащая sql из первого примера.
Вы также можете использовать объединение, но приведенное выше является лишь примером, и объединение не работает в моем случае.
Есть ли способ справиться с начальными проходами? Vfp создает логическое значение типа firstpass
или что-то в этом роде? Я полагаю, я мог бы добавить счетчик к моей подпрограмме, но это кажется более грязным, чем это уже есть.
В качестве альтернативы кто-то может объяснить или связать мне объяснение с начальным проходом vfp? Я считаю, что раньше он делал только один начальный проход, но теперь он делает два после изменения некоторого кода.
Редактировать: хорошо, я был не прав. Приведенный выше пример работает. Не работает следующее:
SELECT d2.id, (SELECT TOP 1 d1.lname l FROM dpadd d1 WHERE d1.id== d2.id ORDER BY l) FROM dpadd d2
Это дает мне сообщение «SQL: Запросы этого типа не поддерживаются».
Странно это работает, если я делаю следующее:
SELECT d2.id, (SELECT COUNT(d1.lname) FROM dpadd d1 WHERE d1.id == d2.id) FROM dpadd d2
Насчет подпрограмм, это методы моей формы. Базы данных являются локальными файлами .dbf. Я не взаимодействую ни с какими серверами, просто запускаю прямые команды sql с предложениями into cursor
и затем генерирую отчеты (обычно).
Я вернусь через несколько минут с действительно полезным оператором select, который "не поддерживается". Я уверен, что вы заметили, что пример top 1
совершенно бесполезен.