Microsoft query синтаксическая ошибка

258

12 февраля 2004 года

SergeySV

1.5K / / 19.03.2003

Господа, никто не подскажет url в msdn или еще где, с описанием всевозможных спецсимволов, когда используется LIKE в WHERE.
Раньше для коннекта из проги на VB6 к бд Access использовал DAO, там все было понятно, полное соответствие оператору Like в VB.
Сейчас вместо DAO использую ADO.

Заранее спасибо.
Иван Абрамов, программист, CSBI.
http://adanalysis.narod.ru — моя программа для выбора авто.
13 янв 04, 16:25 [489811]

Re: Описание спецсимволов для LIKE в ADO ?
Темный
Member

Откуда: РФ, Москва
Сообщений: 1714 Синтаксис SQL ANSI 92
% = *
? = _ (если не ошибаюсь)
13 янв 04, 16:26 [489814]

Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member

Откуда: СПб
Сообщений: 63 Немного не так.

DAO ADO
* %
? _

а вот дальше?

что вместо #, !
^ — как в MS SQL Server — не работает.

Вообщем, нужен url к полному описанию.

13 янв 04, 16:47 [489860]
Хам трамвайный

из справки

Сравнение языка запросов Microsoft Jet SQL и ANSI SQL

Ядро базы данных Microsoft Jet SQL в основном совместимо с ANSI-89 Level 1. Однако некоторые возможности языка запросов ANSI SQL не реализованы в Microsoft Jet SQL. В выпуске Microsoft Jet версии 4.X для поставщика Microsoft OLE DB для Jet реализовано больше синтаксиса ANSI-92 SQL. Аналогично, язык запросов Microsoft Jet SQL содержит зарезервированные слова и возможности, не поддерживаемые языком ANSI SQL.

Основные различия
Языки Microsoft Jet SQL и ANSI SQL имеют разные зарезервированные слова и типы данных. Дополнительные сведения см. в разделах Зарезервированные слова языка SQL ядра базы данных Microsoft Jet и Эквивалентные типы данных ANSI SQL. При использовании поставщика Microsoft OLE DB для Jet с версией Jet 4.X существует несколько дополнительных зарезервированных слов.
Другие правила применяются для конструкции Between…And, которая имеет следующий синтаксис.
выражение1 [NOT] Between значение1 And значение2

В языке Microsoft Jet SQL значение1 может быть больше, чем значение2; в языке ANSI SQL значение1 должно быть меньше значения2 или равно ему.

В языке Microsoft Jet SQL при использовании оператора Like поддерживаются как подстановочные знаки языка ANSI SQL, так и подстановочные знаки, относящиеся к Microsoft Jet. Невозможно совместно использовать подстановочные знаки ANSI и Microsoft Jet. Допускается использовать только один набор знаков, их нельзя смешивать. Использование знаков языка ANSI SQL разрешено только с ядром Jet версии 4.X и с поставщиком Microsoft OLE DB для Jet. При попытке использования подстановочных знаков языка ANSI SQL с приложением Microsoft Access или объектами DAO они будут трактоваться как литералы. Обратное верно при использовании поставщика Microsoft OLE DB для Jet и ядра Jet версии 4.X. Символ соответствия Microsoft Jet SQL ANSI SQL
Любой текстовый символ ? знак подчеркивания (_)
Любое количество символов * %

В языке Microsoft Jet SQL меньше ограничений. Например, разрешается производить группировку и сортировку по выражениям.
Язык Microsoft Jet SQL поддерживает более производительные выражения.
Расширенные возможности языка Microsoft Jet SQL
Язык Microsoft Jet SQL обладает следующими расшиpенными возможностями.

Инструкция TRANSFORM обеспечивает поддержку перекрестных запросов.

Существуют дополнительные статистические функции SQL, такие как StDev и VarP.
Для определения параметров запроса используется описание PARAMETERS.

Возможности языка ANSI SQL, не поддерживаемые в языке Microsoft Jet SQL
Язык Microsoft Jet SQL не поддерживает следующие возможности языка ANSI SQL.

Ссылки в статистической функции DISTINCT. Например, в языке Microsoft Jet SQL невозможно использовать конструкцию SUM(DISTINCT имя_столбца).
Использование предложения LIMIT TO nn ROWS для ограничения числа строк, возвращаемых запросом. Для подобного ограничения можно использовать только предложение WHERE.

13 янв 04, 16:49 [489864]

Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member

Откуда: СПб
Сообщений: 63 То есть все так, сорри, Темный, и спасибо.
Но нужна полная картина.
13 янв 04, 16:51 [489869]

Re: Описание спецсимволов для LIKE в ADO ?
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 4087 описание символов и примеров LIKE бери из справки к MS SQL серверу

[ ] Any single character within the specified range ([a-f]) or set ([abcdef]).
(WHERE au_lname LIKE ‘[C-P]arsen’ finds author last names ending with arsen and
beginning with any single character between C and P, for example Carsen, Larsen,
Karsen, and so on.)

[^] Any single character not within the specified range ([^a-f]) or set
([^abcdef]). (WHERE au_lname LIKE ‘de[^l]%’ all author last names beginning with
de and where the following letter is not l.)

LIKE ‘5[%]’ 5%

LIKE ‘[_]n’ _n

LIKE ‘[a-cdf]’ a, b, c, d, or f

LIKE ‘[-acdf]’ -, a, c, d, or f

LIKE ‘[ [ ]’ [

LIKE ‘]’ ]

LIKE ‘abc[_]d%’ abc_d and abc_de

LIKE ‘abc[def]’ abcd, abce, and abcf

и т.д.
13 янв 04, 16:55 [489881]

Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member

Откуда: СПб
Сообщений: 63 Спасибо, Хам, но, опять же в твоей цитате упоминается лишь *(%) и ?(_).
А как на счет #, !, , [] ?
13 янв 04, 16:58 [489891]

Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member

Откуда: СПб
Сообщений: 63 описание символов и примеров LIKE бери из справки к MS SQL серверу

Да, я так и сделал.
Но, к удивлению обнаружил, что маски с ^ не работают, а с ! работают. Каша какая-то получается, вот и спросил.
13 янв 04, 17:03 [489900]
Откуда: СПб
Сообщений: 63 А что будет выдавать WHERE Phone1 LIKE ‘([0-9][0-9][0-9])[134567890]%’
Выдает все правильно, т.е. 6-ой символ не двойка.
13 янв 04, 18:01 [490023]

Re: Описание спецсимволов для LIKE в ADO ?
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 4087 ну а дальше объясни: почему именно АНСИ 92. Откуда оно взялось при работе VB6 с акесом (версия бд)?
13 янв 04, 18:02 [490031]

Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member

Откуда: СПб
Сообщений: 63 Из проги на VB6 при помощи ADO 2.5 идет запрос к бд формата MS Access 2000.
13 янв 04, 18:05 [490044]

Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member

Откуда: СПб
Сообщений: 63 ну а дальше объясни: почему именно АНСИ 92. Откуда оно взялось при работе VB6 с акесом (версия бд)?

Потому что используется ADO, а не DAO.
Спецсимволы * и ? и # не работают просто наглядно.
13 янв 04, 18:07 [490051]

Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member

Откуда: СПб
Сообщений: 63 проверил на MS SQL
WHERE (вв LIKE ‘[0-9][0-9][0-9][^2]%’)
рабоает правильно и возращает все записи за исключением 2

На MS SQL — то наверняка все правильно будет работать, а ты попробуй посредством ADO к бд Access2000. Драйвер (провайдер) сов. другой.
13 янв 04, 18:20 [490084]

Re: Описание спецсимволов для LIKE в ADO ?
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 4087 >На MS SQL — то наверняка все правильно будет работать, а ты попробуй посредством ADO к бд Access2000. Драйвер (провайдер) сов. другой.

Для АДО (при работе с mdb) надо применять % и _. Для отрицания ! (оператор сравнения такой же как < >) ^ — этот знак для работы с mdb (формат Акес2002+ANSI SQL 92) и MS SQL.
Хотя действительно можно запутаться и в справке по этому поводу — тишина.
14 янв 04, 09:15 [490413]

Re: Описание спецсимволов для LIKE в ADO ?
Иван Абрамов
Member

Откуда: СПб
Сообщений: 63 А как конвертировать числовое поле в текстовое, чтобы использовать с LIKE?

В DAO я бы написал так
WHERE CSTR(NumericField1) LIKE ‘*51*’

А в ADO (при коннекте к бд MSAccess2000) как?
Что-то типа WHERE …NumericField1… LIKE ‘%51%’

Заранее спасибо.

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

Здравствуйте. Создаю запрос из Файла «Данные.xls» с помощью мастера создания запросов.
1.Создаю источник. Выбираю драйвер Driver do Microsoft Excel(*.xls)
2. При создании запроса, создаю правило отбора данных. Столбец «Марка» содержит ПАЗ
При сохранении запроса показывает, что «Синтаксическая ошибка»

Подскажите пожалуйста как создать запрос, который выдавал бы Марки содержащие «ПАЗ».

Изменено: agregator13.04.2015 21:51:22

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

Дописал запрос в Блокноте, но Microsoft Query выдает «Синтаксическая ошибка»
XLODBC
1
DBQ=H:данные.xls;DefaultDir=H:;Driver={Driver do Microsoft Excel(*.xls)};DriverId=790;FIL=excel 8.0;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;ReadOnly=1;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;
SELECT `plbase$`.`Уч-к`, `plbase$`.`№ ПЛ`, `plbase$`.`Дата ПЛ`, `plbase$`.Смена, `plbase$`.`Гар#№`, `plbase$`.Марка, `plbase$`.`Таб#№ вод`, `plbase$`.Водитель, `plbase$`.Время, `plbase$`.`Отр#`  FROM `H:Данные`.`plbase$` `plbase$`  WHERE (`plbase$`.`Уч-к`=7.0) AND (`plbase$`.`Отр#`<>’ПВ’) AND (`plbase$`.`Марка` Like ‘%ПАЗ%’)

Уч-к    № ПЛ    Дата ПЛ    Смена    Гар#№    Марка    Таб#№ вод    Водитель    Время    Отр#

Изменено: agregator13.04.2015 21:51:48

 

TheBestOfTheBest

Пользователь

Сообщений: 2366
Регистрация: 03.04.2015

Excel 2010 +PLEX +SaveToDB +PowerQuery

У вас колонка Марка непонятного для Query типа (то ли строка, то ли нет). Есть требования к формату источника данных, правда я их нигде не читал, вывел путем проб и ошибок:
1) в названиях полей не использовать ./№#%$ и т.д.
2) первая строка источника — описание полей, вторая их тип. Чтобы заработал Like внесите в G2 какую-нибудь строку (напр. «-«) тогда query будет считать колонку Марка —  string.
3) до описания полей ничего не вставлять, т.е. описанию полей не должны предшествовать никакие данные

Для примера я явно преобразовал в where поле Марка в string с помощью ф-ии trim()

Изменено: TheBestOfTheBest13.04.2015 19:14:34

Неизлечимых болезней нет, есть неизлечимые люди.

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

TheBestOfTheBest, большое спасибо за объяснения. Но никак не могу преобразовать поле Марка в string.  В G2 писал «-» — не помогло. Покажите пожалуйста как это делается «преобразовал в where поле Марка в string с помощью ф-ии trim()»

 

TheBestOfTheBest

Пользователь

Сообщений: 2366
Регистрация: 03.04.2015

Excel 2010 +PLEX +SaveToDB +PowerQuery

#5

15.04.2015 23:20:37

Цитата
agregator написал: как это делается «преобразовал…

Изучите ф-ию trim(), особенно то, что она возвращает.

Неизлечимых болезней нет, есть неизлечимые люди.

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

#6

16.04.2015 15:50:47

TheBestOfTheBest, , вы имеете ввиду

Код
XLODBC
1
DBQ=D:Данные.xls;DefaultDir=D:;Driver={Driver do Microsoft Excel(*.xls)};DriverId=790;FIL=excel 8.0;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;ReadOnly=1;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;
SELECT *  FROM `D:Данные`.`plbase$` `plbase$`  WHERE (trim(`plbase$`.`Марка`) Like '%ПАЗ%')

Если открыть в Excel этот запрос или ранний, то данные подтягиваются как надо. Но дело в том, что я хочу использовать запрос как источник для сводной таблицы, а использовать для сводной таблицы не получается — Microsoft Query пишет «Синтаксическая ошибка». Как решить эту проблему?

Изменено: agregator16.04.2015 15:54:18

Excel всемогущий.

 

TheBestOfTheBest

Пользователь

Сообщений: 2366
Регистрация: 03.04.2015

Excel 2010 +PLEX +SaveToDB +PowerQuery

Изменить формат таблицы-источника.

PS С query не работаю, т.к.очень глючит и не все позволяет реализовать.

Изменено: TheBestOfTheBest16.04.2015 15:59:32

Неизлечимых болезней нет, есть неизлечимые люди.

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

TheBestOfTheBest, пробовал создать запрос из файла «Данные TheBest.xls» с помощью мастера запросов,  ничего не получилось. Пробовал использовать «Запрос из Excel Files.odc» как источник для сводной таблицы, не смог указать на него как на источник.

Изменено: agregator16.04.2015 19:13:25

 

TheBestOfTheBest

Пользователь

Сообщений: 2366
Регистрация: 03.04.2015

Excel 2010 +PLEX +SaveToDB +PowerQuery

#9

16.04.2015 19:15:47

Цитата
agregator написал:  ничего не получилось

добивайтесь !

Цитата
не смог указать на него

тренируйтесь !
Берите за образец приложенный файл #7.

Неизлечимых болезней нет, есть неизлечимые люди.

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

TheBestOfTheBest,это можно сделать средствами Excel?

 

TheBestOfTheBest

Пользователь

Сообщений: 2366
Регистрация: 03.04.2015

Excel 2010 +PLEX +SaveToDB +PowerQuery

#11

16.04.2015 19:45:56

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

ЗЫ

Цитата
agregator написал: это можно сделать средствами Excel?

а как же по-вашему получен файл #8 ? Средствами Excel

Неизлечимых болезней нет, есть неизлечимые люди.

 

JeyCi

Пользователь

Сообщений: 3387
Регистрация: 27.11.2013

#12

16.04.2015 20:28:57

Цитата
agregator написал: Но дело в том, что я хочу использовать запрос как источник для сводной таблицы

поэтому лучше предупреждать об этом заранее… где источник, а где Сводная Таблица? — если в одном файле, то будут проблемы — описано здесь (в ветке

Ищу ХОРОШУЮ книгу по сводным таблицам

— пост№49) …   там же чуть ниже пост от

BankirS

с вариантом автообновления сводной макросом… источник сводной и саму сводную лучше располагать в разных файлах! иначе проблемы с запросами файла самого на себя… либо KL предлагал вариант макросом через ADO (к сожалению, по ветке не поместился файл, а файлообменники уже его затёрли)… для инфо:

Использование библиотеки ADO

(если вариант UpdatePivotTable от

BankirS

не подойдёт)

Изменено: JeyCi16.04.2015 20:31:43

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

 

TheBestOfTheBest

Пользователь

Сообщений: 2366
Регистрация: 03.04.2015

Excel 2010 +PLEX +SaveToDB +PowerQuery

#13

16.04.2015 20:38:09

Цитата
Пробовал использовать «Запрос из Excel Files.odc» как источник для сводной таблицы, не смог указать на него как на источник

на новом листе Данные-Существующие подключения- выбрать из раздела Подключения в этой книге созданное подключение. Открыть нужное.
Далее выбрать Отчет сводной таблицы. Все.

Неизлечимых болезней нет, есть неизлечимые люди.

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

Всем большое спасибо за помощь. Сделал как написал TheBestOfTheBest  в 13 сообщении и всё получилось. :D

 

JeyCi

Пользователь

Сообщений: 3387
Регистрация: 27.11.2013

#15

17.04.2015 15:42:11

Цитата
TheBestOfTheBest написал: С query не работаю, т.к.очень глючит и не все позволяет реализовать… тренируйтесь

подкреплю ветку скринами…
без Query — как-то так, видимо… но вот на последнем шаге проблема, которая не позволяет «тренироваться»… говорит ЭТОТ ИСТОЧНИК ДАННЫХ НЕ СОДЕРЖИТ ВИДИМЫХ ТАБЛИЦ — …  не подскажете, как вы обходите её?? (не задавая именнованного диапазона)

Скрытый текст

P.S. иногда на предпоследнем шаге тоже говорит… НЕРАСПОЗНАВАЕМЫЙ ФОРМАТ Базы Данных… — но этот вопрос решён — если на скрине 3 не забыть указать имя в поле, до нажатия кнопки Создать
(после n-го количества проб и ошибок)

Изменено: JeyCi17.04.2015 16:38:49

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

 

JeyCi

Пользователь

Сообщений: 3387
Регистрация: 27.11.2013

p.s.

Создание сводной таблицы на основе внешнего источника

данных хорошо описано у дружественного сайта… но там на примере .mdb-файлов… — можно создавать Сводную и по ходу формировать нужный запрос — как альтернативный вариант для ТС

Изменено: JeyCi17.04.2015 15:56:20

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

 

TheBestOfTheBest

Пользователь

Сообщений: 2366
Регистрация: 03.04.2015

Excel 2010 +PLEX +SaveToDB +PowerQuery

#17

17.04.2015 16:37:44

Цитата
JeyCi написал: ..  не подскажете, как вы обходите её?? (не задавая именнованного диапазона)

В данном случае подключение в файле было, коллега спросил как сделать сводную

из него

. Если подключения нет, его придется создавать, кодом или query. Я обычно создаю через query любое попроще и дописываю свойства подключения ручками. Query — кране глючный инструмент, даже where дает ошибки.

Изменено: TheBestOfTheBest17.04.2015 16:51:06

Неизлечимых болезней нет, есть неизлечимые люди.

 

JeyCi

Пользователь

Сообщений: 3387
Регистрация: 27.11.2013

#18

17.04.2015 16:40:10

Цитата
TheBestOfTheBest написал: кодом или query…  создаю через query любое попроще и дописываю свойства подключения ручками.

теперь можно тренироваться :)

Изменено: JeyCi17.04.2015 16:41:33

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

  • Remove From My Forums
  • Question

  • User-1240292594 posted

    Any Ideas are appreciated!

    I’m trying to run a Microsoft Query against one of my SQL Databases, pulling the data into Excel 2003. (Data > Import External Data > New database Query)

    Basically, I have a field called ‘[Identity]’ and each time I try and drop in any of the fields from that same table I see an error@ «Incorrect Syntax near the keyword ‘Identity’. Statements could not be prepared»

    Any Ideas?

    MSQuery error

Answers

  • User-949955009 posted

    You can use quoted identifier for the column such as:

    select table.»column» from table in your case select Data.»Identity» from Data

    However, you should have QUOTED_IDENTIFIER ON for this to work. [It is on by default]

    • Marked as answer by

      Thursday, October 7, 2021 12:00 AM

  • #2

Are you trying to define the criteria in the Query Wizard or in the SQL Query Editor?

In either case you should be able to select the field name and criteria value (if it exists in the dataset) from dropdown lists.

  • #4

When you are in the MS Query editor, click on the «SQL» button. That will show you the SQL query statement that was build using the Wizard.
It should look something like this.
SELECT MyData.`Transfer #`, MyData.Name, MyData.`Order`, MyData.Sales
FROM `C:testMyfile_SQL data.xlsx`.MyData MyData
WHERE (MyData.`Transfer #`=’4 digit number’)

Copy and Post that code to this thread. Also, post the error message that you are getting when you try to run the query.

If the field name doesn’t match your data exactly, then edit it in this SQL dialog and save the changes.

I’m using MS Query in Excel to execute the following query:

select 
iif(egachid <>'GCAJA0', True, False)
from fgledg
where egcono='1'and egdivi='D30'and egvono=51166554

I have a tabel, fgledg, that contains a column, egchid. For a specific voucher (egvono = 51166554) I get the following rows:

EGCONO    EGDIVI    EGYEA4  EGVONO      EGCHID
1         D30       2015    51166554    GCAJA0
1         D30       2015    51166554    GCAJA0
1         D30       2015    51166554    GCAJA0
1         D30       2015    51166554    GCAJA0
1         D30       2015    51166554    SEBSHHASP
1         D30       2015    51166554    SEBSHHASP
1         D30       2015    51166554    SEBSHHASP

I would like my query to return True if the column egchid contains other values than GCAJA0 and false if the column only contains the value GCAJA0, but I keep getting error messages no matter how i write the syntax. It seems to accept the iif function at least, but the syntax is incorrect?

I have tried diffrent variations of writing the syntax, but get the following error messages:

IIf(egachid <>'GCAJA0', True, False)        Token <> was not valid
IIf(egachid = 'GCAJA0', False, True)        Token = was not valid
IIf([egachid] <>'GCAJA0', True, False)      Token [ was not valid
IIf([egachid] <>'GCAJA0', 'True', 'False')  Token [ was not valid

What am I doing wrong?

Понравилась статья? Поделить с друзьями:
  • Magicar 7 автозапуск ошибки
  • M0116 код ошибки
  • Lukey 702 ошибка 514
  • Llamabeard ошибка sea of thieves
  • List add java ошибка