Читать «Виртуальная библиотека Delphi» онлайн - страница 92

Unknown

2. Использование псевдонимов в запросе SQL.

Я делаю запрос по двум таблицам разных форматов, находящихся по разным псевдонимам.

SELECT DB1.Column1, DB2.Column2 FROM :Alias1:DB1, :Alias2:DB2

но в результате получаю ошибку 'неизвестный тип поля "Alias1:DB1"'

На самом деле вы получаете ошибку Unknown Keyword, следовательно всего-лишь нужно заключить псевдоним и имя таблицы в двойные кавычки.

SELECT D1.Column1, D2.Column2 FROM ":Alias1:DB1" D1, ":Alias2:DB2" D2

Вообще экспериментировать с SQL-запросами проще следующим образом — создайте запрос QBE, настройте его так, как вам нужно, а затем оттранслируйте его в SQL. В результате вы получите правильный текст нужного вам SQL-запроса. Владельцы Delphi Client/Server могут использовать также и Visual Query Builder. Однако, не все QBE-запросы могут быть оттранслированы в SQL.

3. Ошибка в SQL запросе.

У меня есть TQuery и TDataSource. В свойстве SQL для TQuery я пишу

SELECT * FROM dbo.AnyTable

база данных на MS SQL Server. Когда я устанавливаю Active в True, то получаю ошибку:'Token not found. Token :dbo. line number:1'. Что не так?

Если свойство RequestLive=True, то имя таблицы нужно брать в кавычки:

SELECT * FROM "dbo.table"

Если свойство RequestLive=False, кавычек не требуется:

SELECT * FROM dbo.table

4. Проблемы при работе с MS Access через TQuery.

Я безуспешно пытался использовать данные из Microsoft Access иначе, нежели просто с помощью TTable.  Используя TQuery я могу только читать результат, но не могу редактировать. После "login screen" возникает сообщение типа 'Passthrough SQL connection must be shared'.

Измените в настройке псевдонима (alias) пункт 'SQLPASSTHRU MODE' на 'SHARED AUTOCOMMIT'.

5. Как создать таблицу при помощи SQL (или почему не работает TQuery.Open)?

TQuery.Open возвращает результат в виде курсора, в связи с этим он работает только для тех выражений, которые возвращают курсор. CREATE TABLE возвращает только результат операции - поэтому для выполнения этого выражения необходимо использовать TQuery.ExecSQL. Но и это может не сработать, если конкретный драйвер БД не поддерживает операцию создания таблиц - для получения характеристик драйвера используйте функции BDE (DbiOpenDriverList, DbiGetDriverDesc).

6. Возврат значения select max() и подобных SQL-выражений.

Я хочу выполнить SQL-выражение и получить результат в свою переменную, что-то типа

SELECT MAV(FieldA) FROM TableB INTO :VariableC;