Letysite.ru

IT Новости с интернет пространства
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Access пропущен оператор в выражении запроса

Access пропущен оператор в выражении запроса

Делаю запрос
select count (distinct (Name)) from spisok
Выдаётся ошибка: неопределенная функция «distinct» в выражении, подскажите в чем ошибка?
Хотя по отдельности запросы:
select count (Name) from spisok
и
select distinct (Name) from spisok
работают без ошибок.


Desdechado © ( 2007-04-24 19:46 ) [1]

А справку почитать не судьба?
DISTINCT — не функция, скобки лишние.


Antaan © ( 2007-04-24 20:00 ) [2]

Без скобок пишет:
Oшибкa cинтaкcиca (пpoпyщeн oпepaтop) в выpaжeнии зaпpoca «count (distinct Name)»


Jan1 ( 2007-04-24 20:07 ) [3]

а как СУБД то называется?


Antaan © ( 2007-04-24 20:15 ) [4]

Я через ADO подключаюсь к БД Access


Jan1 ( 2007-04-24 20:26 ) [5]


> Я через ADO подключаюсь к БД Access

в нем нельзя так делать. Сделай запрос, который выберет сначала distinct, сохрани его, а потом делай запрос по count уже из запроса:
Query1

select distinct (Name) from spisok

Query2

select count (Name) from Query1


Antaan © ( 2007-04-24 20:53 ) [6]

Jan1 спасибо за совет


Savek ( 2007-04-25 09:07 ) [7]

не нужно загоняться с сохранением, надо так:
select count (Name) from (select distinct (Name) from spisok)


Jan1 ( 2007-04-25 10:58 ) [8]


> Savek (25.04.07 09:07) [7]

супер!
как говориться:»век живи век учись» 🙂

Пустое значение во «Внешнем источнике данных»

Ошибка ODBC. SQLSTATE: 42000
Номер ошибки: -3100
Описание: [Microsoft][Драйвер ODBC Microsoft Access] Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘( = 0)’.

P.S. В акцессе такой запрос работает :

Кто нибудь сталкивался?

(4) AlexO, Спасибо, работает! Забыл что так можно писать )

(5) Andrino, Клиент точно 8.2.16.352

Судя по всему конструкция вида

Не работает с внешним источником данных, так как 1С преобразует её вот в такую белеберду:

таким образом, 1С убивает скобки и пробелы во второй части конструкции «Выбрать»
с чем я Её и поздравляю )

Осталось придумать как обойтись без «Выбрать», попробую соединением наборов данных в СКД.

(9) tango, Надо было отдельную тему создать, виноват.
(12) asved.ru, Тема состоит из двух вопросов, на первый мне ответили в (4) Суть вопроса как раз и состояла в том, что ЕстьNULL не работает с внешними источниками данных и я спрашивал чем её можно заменить.
(11) tango, Могу и полностью написать селект, однако смысла нет в этом, ибо опытным путём установлено, что ЛЮБАЯ конструкция как в (8) не работает.

Поэтому и селект можно привести любой, например такой:

Возможно это глюк платформы. У меня 8.2.16.352 .

Если просто написать

И это понятно, не может 1С прибавить число к Null

Форма доступа — ошибка синтаксиса (отсутствующий оператор) в выражении запроса

Я получаю синтаксическую ошибку в форме, которую я создал по запросу. Я создал форму для ограничения доступа к изменяющимся записям. При попытке установить фильтры в форме я получаю синтаксические ошибки для всех атрибутов, которые я пытаюсь фильтровать. Я считаю, что это связано с отсутствием () вокруг внутреннего соединения в коде запроса, но для меня странно, что я могу без проблем фильтровать запрос. Ниже приведен код запроса:

Любые идеи, почему только форма генерирует синтаксическую ошибку или как это исправить?

Мне удалось быстро исправить это, перейдя в «Дизайн-вид формы» и положив [] на любые имена полей, в которых были пробелы. Теперь я могу использовать встроенные фильтры без раздражающего всплывающего окна о проблемах с синтаксисом.

У меня была такая же проблема. Как говорит Дедрен, проблема заключается не в запросе, а в источнике управления объектами формы. Поместите [] вокруг каждого объекта Control Source. например: Contol Source: [Product number] , Control Source: Salesperson.[Salesperson number] и т.д.

Читать еще:  Access to this resource is restricted

Makita рекомендует перейти к исходной таблице, на которую вы ссылаетесь в своем запросе, и переименовать поле, чтобы не было пробелов, например: SalesPersonNumber , ProductNumber и т.д. Это также решит многие будущие проблемы. Лучшее из удачи!

Попробуйте сделать имена полей законными, удалив пробелы. Это длинный выстрел, но он действительно помог мне раньше.

Эти ответы неверны. Существует фундаментальное отсутствие знаний в вашем мозгу, что я сейчас исправлю.

Ваша главная проблема здесь — ваша схема именования. Он многословный, содержит нежелательные символы и ужасно непоследователен.

Первая. Таблица, которая называется Salesperson , не обязательно должна иметь каждое поле в таблице с именем Salesperson.Salesperson number , Salesperson.Salesperson email . Вы уже находитесь в таблице Salesperson . Все в этой таблице относится к Salesperson . Вам не нужно продолжать это говорить.

Вместо этого используйте ID , Email . Не используйте Number , потому что это, вероятно, зарезервированное слово. Вы действительно пытаетесь ввести [] вокруг каждого имени поля для срока службы вашей базы данных?

Первичные ключи таблицы Student могут быть ID или StudentID , но быть последовательными. Внешние ключи должны быть только обозначены таблицей, на которую указывает, а затем ID . Например: Student.ID и Appointment.StudentID . ID всегда заглавная. Мне все равно, не сообщит ли вам ваш IDE, потому что везде, но ваша IDE будет ID . Даже Access нравится ID .

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

Вместо phone number используйте PhoneNumber или даже лучше, просто, Phone . Если вы выберете what time user made the withdrawal , вам придется вводить его каждый раз.

Третий. И это один из наиболее важных: всегда быть последовательным в любой выбранной вами схеме именования. Вы должны быть в состоянии сказать: «Мне нужен почтовый код из этой таблицы, его имя будет PostalCode». Вы должны знать, что даже не нужно искать его, потому что вы согласны в своем соглашении об именах.

Recap: Тесный, а не подробный. Держите имена короткими без пробелов, не повторяйте имя таблицы, не используйте зарезервированные слова и заглавные буквы каждого слова. Прежде всего, будьте последовательны.

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

ПРИМЕЧАНИЕ. Фактически вам нужно изменить имя поля в представлении проекта таблицы и в запросе.

Access пропущен оператор в выражении запроса

Вопрос № 62687: Здравствуйте. 1) Подскажите, как написать SQL запрос к InterBase в Delphi 7… К парадоксу писал так: SQL.Add(‘SELECT ID, Name, Avtor, Izd, God, Vid, Sp’); SQL.Add(‘FROM «:PPT:1.db»‘); SQL.Add(‘WHERE’); SQL.Add(‘(God =. Вопрос № 111317: Доброго времени суток. Подскажите, please, как можно решить такую проблему: имеется БД MS Access (D7Enterprise+ADO), в ней около 100 таблиц, в которых может быть от 300 до 200000 строк. Некоторые строки (Char) достигают 4000 символов в длину. В прогр. Вопрос № 57214: Здравствуйте! При отладке ниже приведёного кода выходит ошибка: Ошибка синтаксиса(пропущен оператор) в выражении запроса ‘STAVKA*’40000’/36 SUMMA’ .. Вопрос № 62687:

Здравствуйте.
1) Подскажите, как написать SQL запрос к InterBase в Delphi 7…
К парадоксу писал так:
SQL.Add(‘SELECT ID, Name, Avtor, Izd, God, Vid, Sp’);
SQL.Add(‘FROM «:PPT:1.db»‘);
SQL.Add(‘WHERE’);
SQL.Add(‘(God = «‘+ God + ‘»)’);
SQL.Add(‘ORDER BY Name’);
где PPT – псевдоним, а 1.db – имя файла БД.
Пробовал аналогичный к InterBase, выходит ошибка “Table does not exist“.
2) Как автоматически при загрузке Win XP стартовать InterBase Server v. 6.5.0.28? Сейчас запускаю так: Открываю IBConsole, щёлкаю по Local Server, ввожу имя, пароль и он стартует…

Отправлен: 15.11.2006, 06:15
Вопрос задал: ALL_mikky
Всего ответов: 3
Страница вопроса » Отвечает sir Henry, Старший модератор :
Здравствуйте, ALL_mikky!
Аналогом работы с IB является работа с Акцесовской базой. В IB все таблицы точно так-же хранятся в одном файле базы данных.
1. Нужно установить коннект с базой данных.
2. Открыть базу данных.
3. Выполнить запрос к одной или нескольким таблицам.
Например в БД у Вас есть таблица работников rabotniki с полями ID, NAME, DOLJNOST, ZARPLATA. Тогда запрос к таблице будет выглядеть так:
SELECT name, doljnost, zarplata FROM rabotniki
WHERE zarplata>10000
ORDER BY name
Естественно, прежде чем выполнять запрос, Вы должны создать как саму базу данных, так и необходимые Вам таблицы, тогда ошибки типа “Table does not exist“ у Вас выскакивать не будут, т.к. Вы точно будете знать, какие таблицы и с какими именами у Вас существуют в базе данных. Россия, Красноярск

Читать еще:  Импорт xml в access

——
Я только в одном глубоко убеждён — не надо иметь убеждений! 🙂

Ответ отправил: sir Henry, Старший модератор
Ответ отправлен: 15.11.2006, 07:12

1) Соединение с IB идет в два этапа:
— на форму бросается компонент IBDatabase, в котором указывается путь к БД (возможно сетевой), логин и пароль, роль пользовтеля и диалект.
— потом бросается компонент IBTransaction, в котором указывается ссылка на IBDatabase и поведение трансакций.
— после этого кладется компонент IBQuery и DBDataSource, ссоответствующими ссылками.
ПОсле этого в IBQuery.SQL.Add(‘Select * from Table where . order. ‘);
И открываешь запрос.
ЕСли к Query прицеплен DBGrid то получаешт содержимое в гриде.

——
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО

Доброго времени суток. Подскажите, please, как можно решить такую проблему: имеется БД MS Access (D7Enterprise+ADO), в ней около 100 таблиц, в которых может быть от 300 до 200000 строк. Некоторые строки (Char) достигают 4000 символов в длину. В программе нужно узнать, какие изменения (Insert/Update/Delete) производились в базе за какой-то период (например за сегодняшний день или за последние 3 дня). Программа может быть запущена как резидент или сервис — не суть важно. Создавать копию БД в начале нужного периода, а потом просто сравнивать 2 базы очень не хочется из-за их размеров (слишком долго и затратно с т.з. ресурсов ПК). Может быть есть какой-то более элегантный и разумный способ? Заранее, спасибо.

Отправлен: 28.11.2007, 03:06
Вопрос задал: MiCroSom
Всего ответов: 1
Страница вопроса » Отвечает Кэр Лаэда, Практикант :
Здравствуйте, MiCroSom!

Довольно странный вопрос, если программа поддерживает Логгирование действий, то естественно вы можете посмотреть, иначе никак, только сравнением бэкапов.

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

Ответ отправил: Кэр Лаэда, Практикант
Ответ отправлен: 28.11.2007, 15:53

Здравствуйте!
При отладке ниже приведёного кода выходит ошибка:
Ошибка синтаксиса(пропущен оператор) в выражении запроса ‘STAVKA*’40000’/36 SUMMA’

Отправлен: 30.09.2006, 12:25
Вопрос задал: Buenos dias, Практикант
Всего ответов: 1
Страница вопроса » Отвечает sir Henry, Старший модератор :
Здравствуйте, KuchumHan!
1. У Вас после «/36» и перед «SUMMA» пропущена запятая, если «SUMMA» это поле таблицы. Если же словом «SUMMA» Вы хотите обозначить столбец, в котором вычисляете выражение, то необходимо написать «AS Summa».
2. В строчке где запрос у Вас закомментирован Вы совершенно зря ставите расширение «.MDB». Дело в том, что файл с расширением «.MDB» это база данных, которая может содержать несколько таблиц, а запрсы проводятся исключительно к таблицам, а не к базам данных.
3. Там где Вы подставляете значения из Edit1.Text, могут быть лишние пробелы, которые могут совершенно исказить смысл выражения, поэтому лучше всего ведущие и концевые пробелы убирать функцией Trim().
4. Просто пожелание. Пишите большими буквами только операторы SQL, а названия таблиц и названия полей пишите маленькими буквами, тогда Ваше выражение будет более удобно читать и таким образом Вы сразу будете видет ь синтаксическую ошибку в построенном Вами выражении. Россия, Красноярск

Читать еще:  Документооборот на sharepoint

——
Я только в одном глубоко убеждён — не надо иметь убеждений! 🙂

Ответ отправил: sir Henry, Старший модератор
Ответ отправлен: 30.09.2006, 14:55

Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!

подать вопрос экспертам этой рассылки »

Скажите «спасибо» эксперту, который помог Вам!

* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. ( полный список тарифов )
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.

Создание подчиненных запросов

Инструкции Jet SQL, такие как SELECT, SELECT. .. INTO, INSERT. INTO, DELETE или UPDATE позволяют для вычисления предиката в предложении WHERE использовать другой запрос. Этот запрос называется подчиненным запросом.

Подчиненный запрос включается в главный запрос одним из следующих способов:

  • сравнение [ANY | ALL | SOME] (инструкцияSQL);
  • выражение [NOT] IN (инструкцияSQR);
  • [NOT] EXISTS (инструкцияSQL) ,

сравнение — выражение и оператор сравнения, который сравнивает это выражение с результатами подчиненного запроса;

выражение — выражение, для которого проводится поиск в результирующем наборе записей подчиненного запроса;

инструкцияSQL — инструкция SELECT, которая представляет подчиненный запрос.

Предикаты ANY или SOME являются синонимами и используются если в главном запросе нужно выбрать записи, удовлетворяющие сравнению со всеми записями, выбранными в подчиненном запросе. Ниже приведен пример запроса, который выбирает из таблицы «Товары» (Products) все товары, цена которых не ниже, чем цена товаров у конкурентов:

Предикат ALL используется для выбора в главном запросе только тех записей, которые удовлетворяют сравнению со всеми записями, выбранными в подчиненном запросе. В следующем примере выбираются все заказы, сделанные в 1998 году, стоимость которых ниже стоимости любого заказа, размещенного в 1997 году:

Предикат IN используется для выбора в главном запросе только тех записей, которые содержат значения, совпадающие с одним из значений, выбранных подчинен-ным_ запросом. Например, чтобы выбрать клиентов, которые разместили заказы в январе 1998 года, можно написать следующий запрос:

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

Предикат EXISTS используется в логическом выражении для определения того, должен ли подчиненный запрос возвращать какие-либо записи. Например, чтобы выбрать всех поставщиков для товаров в некотором заказе, можно использовать следующую инструкцию SQL:

В подчиненном запросе можно-использовать псевдонимы таблиц для ссылки на таблицы, перечисленные в предложении FROM, расположенном вне подчиненного запроса. В следующем примере выбираются фамилии и имена сотрудников, чья зарплата равна или больше средней зарплаты сотрудников, имеющих ту же должность. В предыдущем примере можно присвоить таблице «Сотрудники» (Employees) псевдоним Т1, и тогда запрос будет выглядеть следующим образом:

Некоторые подчиненные запросы можно использовать в перекрестных запросах как предикаты в предложении WHERE. Подчиненные запросы, применяемые для вывода результатов (в списке SELECT), нельзя применять в перекрестных запросах.

В отличие от запросов на объединение, подчиненный запрос можно создать в режиме Конструктора. В строке Условия отбора (Criteria) в качестве условия отбора следует указать, например, зарезервированное слово IN, а затем ввести инструкцию SELECT. А можно сначала создать в режиме Конструктора подчиненный запрос, переключиться в режим SQL, скопировать получившуюся инструкцию SQL в буфер

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

Ссылка на основную публикацию
Adblock
detector