Microsoft access ошибка синтаксиса пропущен оператор

No, no, no.

These answers are all wrong. There is a fundamental absence of knowledge in your brain that I’m going to remedy right now.

Your major issue here is your naming scheme. It’s verbose, contains undesirable characters, and is horribly inconsistent.

First: A table that is called Salesperson does not need to have each field in the table called Salesperson.Salesperson number, Salesperson.Salesperson email. You’re already in the table Salesperson. Everything in this table relates to Salesperson. You don’t have to keep saying it.

Instead use ID, Email. Don’t use Number because that’s probably a reserved word. Do you really endeavour to type [] around every field name for the lifespan of your database?

Primary keys on a table called Student can either be ID or StudentID but be consistent. Foreign keys should only be named by the table it points to followed by ID. For example: Student.ID and Appointment.StudentID. ID is always capitalized. I don’t care if your IDE tells you not to because everywhere but your IDE will be ID. Even Access likes ID.

Second: Name all your fields without spaces or special characters and keep them as short as possible and if they conflict with a reserved word, find another word.

Instead of: phone number use PhoneNumber or even better, simply, Phone. If you choose what time user made the withdrawal, you’re going to have to type that in every single time.

Third: And this one is the most important one: Always be consistent in whatever naming scheme you choose. You should be able to say, «I need the postal code from that table; its name is going to be PostalCode.» You should know that without even having to look it up because you were consistent in your naming convention.

Recap: Terse, not verbose. Keep names short with no spaces, don’t repeat the table name, don’t use reserved words, and capitalize each word. Above all, be consistent.

I hope you take my advice. This is the right way to do it. My answer is the right one. You should be extremely pedantic with your naming scheme to the point of absolute obsession for the rest of your lives on this planet.

NOTE:You actually have to change the field name in the design view of the table and in the query.

Регистрация на форуме тут, о проблемах пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите восстановить пароль

Поиск по форуму
Расширенный поиск

Страница 1 из 2 1 2 Следующая >

Почему возникает эта ошибка.
Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘[Стипендія нарахування].[Середній бал]? (база данных в Access 2010)

SELECT [Стипендія нарахування].[Середній бал]
IF([Середній бал]<4,»0″,
IF([Середній бал]=5,»950″,
IF([Середній бал]>=4 And <5,»800″)) AS [Стипендія]
FROM [Стипендія нарахування];

Сообщение об ошибке при использовании специальных символов в базах данных Access

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

Оригинальный номер базы знаний: 826763

Эта статья применима к файлам баз данных Microsoft Access (.mdb) или (.accdb), а также к файлу проекта Microsoft Access (.adp).

Симптомы

При использовании специальных символов в Access возникает одна из следующих проблем.

Проблема 1

В имени поля таблицы используется один из следующих специальных символов:

  • Знак над символом (`)
  • Восклицательный знак (!)
  • Точка (.)
  • квадратные скобки ([])
  • Пробел
  • Непечатаемые символы

В этом случае отобразится следующее сообщение об ошибке:

Недопустимое имя поля.
Убедитесь, что имя не содержит точку (.), восклицательный знак(!), квадратные скобки ([]), пробел или непечатаемый символ, например символ возврата каретки. Если вы вставляете имя из другого приложения, попробуйте нажать клавишу ESC и ввести имя еще раз.

При использовании этих специальных символов в имени таблицы отобразится следующее сообщение об ошибке:

Введенное имя объекта ‘TableName‘ не соответствует правилам именования объектов Microsoft Office Access.

Проблема 2

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

Если имя поля содержит пробел, вопросительный знак (?) или знак @, отобразится следующее сообщение об ошибке:

Ошибка синтаксиса во введенном выражении.
Задано значение для операции без оператора

Если имя поля содержит кавычки («) или апостроф (‘), отобразится следующее сообщение об ошибке:

Введенное выражение содержит ошибочную строку.
Строка может содержать до 2048 знаков, включая знаки открывающей и закрывающей кавычек.

Если имя поля содержит знак решетки (#), отобразится следующее сообщение об ошибке:

Введенное выражение содержит недопустимое значение даты.

Если имя поля содержит знак процента (%), тильду (

), точку с запятой (;) или скобки ([]), отобразится следующее сообщение об ошибке:

Ошибка синтаксиса во введенном выражении.
Пропущен операнд или оператор, введен недопустимый знак или лишняя запятая, либо задана строка без кавычек.

Если имя поля содержит фигурные скобки (), отобразится следующее сообщение об ошибке:

Неверно сформированный код GUID в выражении запроса ‘ObjectName

Если имя поля содержит квадратные скобки ([]) или круглые скобки (()), отобразится следующее сообщение об ошибке:

Во введенном выражении отсутствует закрывающая скобка, квадратная скобка (]) или вертикальная черта (|).

Проблема 3

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

  • знак «больше» (>);
  • знак «меньше» (<);
  • Точка (.)
  • Звездочка (*)
  • Двоеточие (:)
  • Крышка (^)
  • Знак плюс (+)
  • Обратная косая черта ()
  • Знак равенства (=)
  • амперсанд (&);
  • Косая черта (/)

Обходной путь

Чтобы устранить эту проблему, не используйте специальные символы. Если в выражениях запроса необходимо использовать специальные символы, заключите их в квадратные скобки ([]). Например, если вы хотите использовать знак «больше» (>), используйте [>].

Дополнительная информация

Microsoft Access не ограничивает использование специальных символов, таких как знак решетки (#), точка (.) или кавычки («) в именах объектов базы данных или в именах полей базы данных. Однако при использовании специальных символов могут возникнуть непредвиденные ошибки. Поэтому корпорация Майкрософт рекомендует не использовать специальные символы в именах объектов базы данных в базе данных Access или в проекте базы данных. В этой статье рассматриваются специальные символы, которые не следует использовать во избежание известных проблем с ними.

При работе с Access или другим приложением, например приложением Microsoft Visual Basic или приложением Active Server Pages (ASP), не следует использовать следующие специальные символы:

Соглашения об именовании в Access

Корпорация Майкрософт рекомендует не использовать точку (.), восклицательный знак (!), знак ударения (`), квадратные скобки ([ ]), пробел ( ) или кавычки («) внутри имен функций, имен переменных, имен полей или имен объектов базы данных, таких как таблицы и формы.

Использование следующих специальных символов в Access приводит к возникновению известных проблем. В следующих сценариях описано, когда не следует использовать специальные символы:

Что значит пропущен оператор в выражении запроса access

Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007

Репутация: нет
Всего: нет

Здравствуйте.

Вобще на форме выбирется ДАТА в dateTimePicker, затем хочу сделать ЗАПРОС на ВЫБОРКУ из таблицы (Access) по этой дате . ну если дата совпала, то потом все вывожу в dataGridView1

Код
OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE Дата=»+dateTimePicker1.Value+»», «Provider=Microsoft.Jet.OLEDB.4.0;» + «Data Source=» + @»….kafe.mdb»);
B.SelectCommand.Connection.Open();
B.SelectCommand.ExecuteNonQuery();
B.SelectCommand.Connection.Close();
DataTable C = new DataTable();
B.Fill(C);
dataGridView1.DataSource = C;

ну вобщем когда я на форме выбираю дату и нажимаю кнопку поиск ВЫЛАЗИЕТ вот такая ОШИБКА:

Код
Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘Дата=03.12.2008 0:00:00’.
Код
SELECT * FROM Содержание_заказа WHERE Дата=03.12.2008 0:00:00

Помогите разобраться с этой проблемой.
Заранее спасибо.

Let’s do some .NET

Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 67

kuller, dateTimePicker1.Value.ToString(«dd.MM.yyyy»);

Добавлено через 36 секунд
kuller, а вообще в каком формате дата хранится в базе?

Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007

Репутация: нет
Всего: нет

Let’s do some .NET

Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 67

Вот так выглядит у меня в Access 2003 запрос на выборку поля с датой

SELECT Table1.ID, Table1.Field1
FROM Table1
WHERE (((Table1.Field1)=#1/10/2008#));

Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007

Репутация: нет
Всего: нет

Код
Дата содержит синтаксическую ошибку в выражении запроса ‘Дата=#03.12.2008 0:00:00#’.
Код
SELECT * FROM Содержание_заказа WHERE Дата=#03.12.2008 0:00:00#

Добавлено через 4 минуты и 4 секунды
и так ошибка(((

Код
OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE (([Содержание_заказа].[Дата]=» + dateTimePicker1.Value + «))», «Provider=Microsoft.Jet.OLEDB.4.0;» + «Data Source=» + @»….kafe.mdb»);
Код
Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘(([Содержание_заказа].[Дата]=03.12.2008 0:00:00))’.

Let’s do some .NET

Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 67

kuller, попробуйте прогнать запрос с хардкодом

Код
OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE Дата= #12/03/2008#», «Provider=Microsoft.Jet.OLEDB.4.0;» + «Data Source=» + @»….kafe.mdb»);
B.SelectCommand.Connection.Open();
B.SelectCommand.ExecuteNonQuery();
B.SelectCommand.Connection.Close();
DataTable C = new DataTable();
B.Fill(C);
dataGridView1.DataSource = C;

Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007

Репутация: нет
Всего: нет

Код
OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE Дата=#12/03/2008#», .

ну т.к. в БД нет строки с такой датой то у меня выскочила табличка:

Код
MessageBox.Show(«Извените, по вашему запросу ничего не найдено», .

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

Добавлено через 1 минуту и 8 секунд
Вот поставил 20/11/2008:
и в dataGridView1 вывелись ВСЕ найденные РЕЗУЛЬТАТЫ .. причем верные)))))

Добавлено через 3 минуты и 34 секунды
ВЫВОД:

дату надо получить из dateTimePicker1.Value и привести к виду:

#ч/м/г#,а потом только вызывать запрос.

Let’s do some .NET

Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 67

Код
OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE Дата=#»+dateTimePicker1.Value.ToString(«dd/MM/yyyy»)+»#», «Provider=Microsoft.Jet.OLEDB.4.0;» + «Data Source=» + @»….kafe.mdb»);
B.SelectCommand.Connection.Open();
B.SelectCommand.ExecuteNonQuery();
B.SelectCommand.Connection.Close();
DataTable C = new DataTable();
B.Fill(C);
dataGridView1.DataSource = C;

Это сообщение отредактировал(а) Partizan — 4.12.2008, 12:28

Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007

Репутация: нет
Всего: нет

Да уж(
и так не работате((((

Код
OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE Дата=#»+dateTimePicker1.Value.ToString(«MM/dd/yyyy»)+»#», «Provider=Microsoft.Jet.OLEDB.4.0;» + «Data Source=» + @»….kafe.mdb»);
Код
Дата содержит синтаксическую ошибку в выражении запроса ‘Дата=#11.20.2008#’.
Код
SELECT * FROM Содержание_заказа WHERE Дата=#11.20.2008#

Добавлено через 5 минут
Причем по моему не так:
ToString(«MM/dd/yyyy»)
а вот так:
ToString(«dd/MM/yyyy»)
ну всеравно не пашет((((

Это сообщение отредактировал(а) kuller — 4.12.2008, 12:32

Let’s do some .NET

Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Сообщество Программистов

Загрузка…

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

DataModule2.ADOQuery1.SQL.Add('INSERT INTO Users (login,password) VALUES ('''+Edit1.Text+''', '''+Edit2.Text+''')');
      DataModule2.ADOQuery1.ExecSQL;
      ShowMessage('Успешно');

Но выдает ошибку «…Ошибка синтаксиса (пропущен оператор) в выражении запроса»
Что не так?
В таблице самой 3 поля: код, Login, password


  • Вопрос задан

    более трёх лет назад

  • 216 просмотров

Пригласить эксперта

Доброго. Ну, тут думать даже нечего. На самом деле ошибка синтаксиса, скорее всего с ‘
Возьми вот это всё ‘INSERT INTO Users (login,password) VALUES (»’+Edit1.Text+»’, »’+Edit2.Text+»’)’);
DataModule2.ADOQuery1.ExecSQL;
Загони в текстовую переменную вместе с данными, сам увидишь. Если не увидишь — выведи ее в Management Studio

Может числить сначала:
DataModule2.ADOQuery1.SQL.Clear;

сейчас ошибка «ошибка синтаксиса инструкции insert into»

Проверьте текст запроса (SQL.Text) либо отладчиком, либо ShowMessage.


  • Показать ещё
    Загружается…

09 июн. 2023, в 01:21

10000 руб./за проект

09 июн. 2023, в 01:06

50000 руб./за проект

09 июн. 2023, в 00:36

1000 руб./за проект

Минуточку внимания

imfrozen

0 / 0 / 1

Регистрация: 14.05.2012

Сообщений: 55

1

11.06.2016, 18:34. Показов 6159. Ответов 2

Метки нет (Все метки)


Добрый день.Пытаюсь сделать запрос на соединение таблиц,но получаю ошибку: Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘nazv_otpFROM privoz_gruz INNER JOIN korabli ON privoz_gruz.id_ship = korabli.id_shipINNER JOIN port_otp ON privoz_gruz.port_otp = port_otp.id_port_otpr’.

SQL
1
SELECT id_privoz_gruz,nazvanie,data_prib,nazv_otp,sotrudnik FROM( privoz_gruz INNER JOIN korabli ON privoz_gruz.id_ship = korabli.id_ship) INNER JOIN port_otp ON privoz_gruz.port_otp = port_otp.id_port_otpr INNER JOIN sotrudniki ON privoz_gruz.sotrudniki.id_sotrudniki

Думаю что проблема в расставлении скобок.Подскажите пожалуйста

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

ltv_1953

Эксперт MS Access

16778 / 6959 / 1548

Регистрация: 21.06.2012

Сообщений: 12,975

12.06.2016, 08:07

2

Лучший ответ Сообщение было отмечено imfrozen как решение

Решение

Если это Аксесс (согласно теме, а не разделу). то FROM примерно так (в приведенном запросе и скобок не хватает, и в конце какая-то каша …)

SQL
1
2
3
FROM ((privoz_gruz INNER JOIN korabli ON privoz_gruz.id_ship = korabli.id_ship) 
INNER JOIN port_otp ON privoz_gruz.port_otp = port_otp.id_port_otpr) 
INNER JOIN sotrudniki ON privoz_gruz.sotrudniki = sotrudniki.id_sotrudniki

1

0 / 0 / 1

Регистрация: 14.05.2012

Сообщений: 55

12.06.2016, 09:17

 [ТС]

3

действительно, промахнулся с разделом, извиняюсь
спасибо за помощь

0

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    >
    INNER JOIN объединение 3 таблиц
    , MS Access/ADO

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    31.10.12, 12:00

      Junior

      *

      Рейтинг (т): 1

      Написал запрос, объединяющий 3 таблицы INNER JOIN’ом

      ExpandedWrap disabled

          ADOQuery1.SQL.Clear;

          ADOQuery1.SQL.Add(‘select BL.mkb,MKB.DESCR,SUM(BL.dni) as dni,D.fio,count(*) as kolvo’);

          ADOQuery1.SQL.Add(‘from BolList as BL ‘);

          ADOQuery1.SQL.Add(‘INNER JOIN Doctor as D ON BL.doctor=D.key ‘);

          ADOQuery1.SQL.Add(‘INNER JOIN MKB ON BL.mkb=mkb.code ‘);

          ADOQuery1.SQL.Add(‘where PolStac=»‘+PolStac+’»‘);

          ADOQuery1.SQL.Add(‘and Date>=:d1 and Date<=:d2’);

          ADOQuery1.Parameters.ParamByName (‘d1’).Value:=DateEdit1.Date;

          ADOQuery1.Parameters.ParamByName (‘d2’).Value:=DateEdit2.Date;

          ADOQuery1.SQL.Add(‘GROUP BY BL.mkb,D.fio,MKB.DESCR’);

          ADOQuery1.Active:=true;

      выдает ошибку: Ошибка синтаксиса(пропущен оператор) в выражении запроса BL.doctor=D.key INNER JOIN MKB ON BL.mkb=mkb.code
      Делаю подобный запрос в SQL-server все работает…

      Может Access не дает объединять больше 2х таблиц?
      Нагуглил похожую проблему http://www.cyberforum.ru/delphi-database/thread13773.html но ее решения там нету…

      Добавлено 31.10.12, 12:13
      Если сделать все cross join’ом, всмысле через запятую таблицы написать, то все работает

      ExpandedWrap disabled

          ADOQuery1.SQL.Clear;

          ADOQuery1.SQL.Add(‘select BL.mkb,MKB.DESCR,SUM(BL.dni) as dni,D.fio,count(*) as kolvo’);

          ADOQuery1.SQL.Add(‘from BolList as BL,Doctor as D,MKB’);

          ADOQuery1.SQL.Add(‘where BL.doctor=D.key and BL.mkb=mkb.code and BL.mkb=mkb.code’);

          ADOQuery1.SQL.Add(‘and PolStac=»‘+PolStac+’»‘);

          ADOQuery1.SQL.Add(‘and Date>=:d1 and Date<=:d2’);

          ADOQuery1.Parameters.ParamByName (‘d1’).Value:=DateEdit1.Date;

          ADOQuery1.Parameters.ParamByName (‘d2’).Value:=DateEdit2.Date;

          ADOQuery1.SQL.Add(‘GROUP BY BL.mkb,D.fio,MKB.DESCR’);

          ADOQuery1.Active:=true;

      Но вопрос про INNER JOIN не снимается, почему в данном случае не работает он?


      Gonarh



      Сообщ.
      #2

      ,
      31.10.12, 14:56

        ExpandedWrap disabled

           ADOQuery1.SQL.BeginUpdate;

           ADOQuery1.SQL.Clear;

           ADOQuery1.SQL.Add(‘select BL.mkb,MKB.DESCR,SUM(BL.dni) as dni,D.fio,count(*) as kolvo’);

           ADOQuery1.SQL.Add(‘GROUP BY BL.mkb,D.fio,MKB.DESCR’);

           ADOQuery1.SQL.EndUpdate;


        sansans



        Сообщ.
        #3

        ,
        31.10.12, 18:18

          Почему бы не использовать неплохой конструктор запросов самого Аксесса, чтобы посмотреть как на самом деле текст запроса должен выглядеть.
          Рекомендуется именно его, т.к. Аксесс формирует селективные запросы, объединяющие данные из нескольких таблиц (кстати, и из 2, 3, 5, 10, и т.д. таблиц) с окаянным количеством вложенных круглых скобок, переплетение которых без пол-литры не разобрать.
          После успешного выполнения сконструированного запроса перенести текст этого запроса в приложение. Будет работать за милую душу. Проверено сотни раз.


          int 21h



          Сообщ.
          #4

          ,
          01.11.12, 05:37

            Junior

            *

            Рейтинг (т): 1

            2 sansans, спасибо помогло. Оказывается в синтаксисе Access INNER JOIN берется в скобки

            ExpandedWrap disabled

              SELECT *

              FROM (BolList INNER JOIN doctor ON BolList.Doctor = doctor.key) INNER JOIN mkb ON BolList.mkb = mkb.CODE;


            Fr0sT



            Сообщ.
            #5

            ,
            01.11.12, 06:31

              Хоть трабл был и не в этом, но кто ж добавляет кусок запроса после присваивания параметров

              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

              0 пользователей:

              • Предыдущая тема
              • Delphi: Базы данных
              • Следующая тема

              Рейтинг@Mail.ru

              [ Script execution time: 0,1050 ]   [ 16 queries used ]   [ Generated: 30.01.23, 16:30 GMT ]  

                

              dsultan

              14.04.08 — 16:48

              подключаюсь к dbf через microsoft.jet

              запутался в joinах, вот что выдает

              Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘ttl.ACCID = accs.ID INNER JOIN 1SACCS AS accs2 ON accs.SCHKOD >= accs2.SCHKOD’.

              если убрать второй джойн — не ругается

              где собака?

              SELECT ttl.ACCID AS schet, ttl.CURRID AS valut,

              iif(ttl.VSC0 = ‘ EL’,ttl.SC0,iif(ttl.VSC1 = ‘ EL’,ttl.SC1,

              iif(ttl.VSC2 = ‘ EL’,ttl.SC2,0))) AS sk1, iif(KIND = ‘1’,ttl.SD

              ,0) AS sumost, iif(KIND = ‘2’,ttl.SD,0) AS valsumost,

              iif(KIND = ‘3’,ttl.SD,0) AS kolost

              FROM 1SBKTTL AS ttl

              INNER JOIN

              1SACCS AS accs ON ttl.ACCID = accs.ID

              INNER JOIN

              1SACCS AS accs2 ON accs.SCHKOD >= accs2.SCHKOD AND LEFT(accs.SCHKOD,LEN(accs2.SCHKOD)) = accs2.SCHKOD

              AND accs.PLANID = 809 AND accs2.ID = ‘ 1V ‘

              WHERE (ttl.date = #1/1/2008#) AND (ttl.KIND IN (‘1’, ‘2’, ‘3’)) AND (‘ EL’ IN (ttl.VSC0,

              ttl.VSC1, ttl.VSC2))

                

              sapphire

              1 — 14.04.08 — 16:54

              Попробуй, если ты используешь INNER JOIN
              использовать select … from {перечень таблиц} where {условие выборки} AND {условия соединений}

                

              sapphire

              2 — 14.04.08 — 16:56

              SELECT ttl.ACCID AS schet, ttl.CURRID AS valut,

              iif(ttl.VSC0 = ‘ EL’,ttl.SC0,iif(ttl.VSC1 = ‘ EL’,ttl.SC1,
              iif(ttl.VSC2 = ‘ EL’,ttl.SC2,0))) AS sk1, iif(KIND = ‘1’,ttl.SD
              ,0) AS sumost, iif(KIND = ‘2’,ttl.SD,0) AS valsumost,
              iif(KIND = ‘3’,ttl.SD,0) AS kolost
              FROM 1SBKTTL AS ttl,  1SACCS AS accs, 1SACCS AS accs2
              WHERE
              ((ttl.date = #1/1/2008#) AND (ttl.KIND IN (‘1’, ‘2’, ‘3’)) AND (‘ EL’ IN (ttl.VSC0,
              ttl.VSC1, ttl.VSC2)))
              AND
              (
              accs ON ttl.ACCID = accs.ID AND accs.SCHKOD >= accs2.SCHKOD AND LEFT(accs.SCHKOD,LEN(accs2.SCHKOD)) = accs2.SCHKOD
              AND accs.PLANID = 809 AND accs2.ID = ‘ 1V ‘
              )

                

              dsultan

              3 — 14.04.08 — 17:21

              (2) пустоту вернул :(

                

              sapphire

              4 — 14.04.08 — 17:31

              (3) Если положение dbf-ок статично, можно создать mdbшник и прилепить к нему через связь с таблицами запрос внутри. Так делают, когда хотят уйти от ограничений ядра jet

                

              dsultan

              5 — 14.04.08 — 17:35

              все ок, спасибо, при копипасте пробелы в ‘ 1v ‘ потерялись, и еще заодно узнал, что planID в dbf лежит 36ричный, а в sql версии десятичный

                

              sapphire

              6 — 14.04.08 — 17:36

              (5) :)

                

              dsultan

              7 — 14.04.08 — 17:37

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

                

              sapphire

              8 — 14.04.08 — 17:37

              +(4) Иногда лучше использовать драйвер FoxPro (см документацию к 1С++),
              или через Access. Кстати, частенько Accessовские БД используют для диагностики.

                

              sapphire

              9 — 14.04.08 — 17:38

              (7) Правильно, потому что ты не используешь индексы.

                

              dsultan

              10 — 14.04.08 — 17:39

              (8) я и начал с фокспрошного драйвера, уперся в форматы дат, устал бодаться, решил  джет попробовать

                

              dsultan

              11 — 14.04.08 — 17:41

              а их можно через джет использовать?

                

              КонецЦикла

              12 — 14.04.08 — 17:47

              (10) Юзай ОлеДБ, 1С++ и поиск
              Хватит долбить

                

              КонецЦикла

              13 — 14.04.08 — 17:48

              Кроме того уже есть аккаунтрекордсет

                

              dsultan

              14 — 14.04.08 — 18:07

              (12)а чем джет не оледб?
              делал уже через 1с++, быстрые итоги, все супер, только оказалось, что с dbf они не работают

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

              (13) это к чему?


              Форум программистов Vingrad

              >

              [ Script execution time: 0,1050 ]   [ 16 queries used ]   [ Generated: 30.01.23, 16:30 GMT ]  

                

              dsultan

              14.04.08 — 16:48

              подключаюсь к dbf через microsoft.jet

              запутался в joinах, вот что выдает

              Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘ttl.ACCID = accs.ID INNER JOIN 1SACCS AS accs2 ON accs.SCHKOD >= accs2.SCHKOD’.

              если убрать второй джойн — не ругается

              где собака?

              SELECT ttl.ACCID AS schet, ttl.CURRID AS valut,

              iif(ttl.VSC0 = ‘ EL’,ttl.SC0,iif(ttl.VSC1 = ‘ EL’,ttl.SC1,

              iif(ttl.VSC2 = ‘ EL’,ttl.SC2,0))) AS sk1, iif(KIND = ‘1’,ttl.SD

              ,0) AS sumost, iif(KIND = ‘2’,ttl.SD,0) AS valsumost,

              iif(KIND = ‘3’,ttl.SD,0) AS kolost

              FROM 1SBKTTL AS ttl

              INNER JOIN

              1SACCS AS accs ON ttl.ACCID = accs.ID

              INNER JOIN

              1SACCS AS accs2 ON accs.SCHKOD >= accs2.SCHKOD AND LEFT(accs.SCHKOD,LEN(accs2.SCHKOD)) = accs2.SCHKOD

              AND accs.PLANID = 809 AND accs2.ID = ‘ 1V ‘

              WHERE (ttl.date = #1/1/2008#) AND (ttl.KIND IN (‘1’, ‘2’, ‘3’)) AND (‘ EL’ IN (ttl.VSC0,

              ttl.VSC1, ttl.VSC2))

                

              sapphire

              1 — 14.04.08 — 16:54

              Попробуй, если ты используешь INNER JOIN
              использовать select … from {перечень таблиц} where {условие выборки} AND {условия соединений}

                

              sapphire

              2 — 14.04.08 — 16:56

              SELECT ttl.ACCID AS schet, ttl.CURRID AS valut,

              iif(ttl.VSC0 = ‘ EL’,ttl.SC0,iif(ttl.VSC1 = ‘ EL’,ttl.SC1,
              iif(ttl.VSC2 = ‘ EL’,ttl.SC2,0))) AS sk1, iif(KIND = ‘1’,ttl.SD
              ,0) AS sumost, iif(KIND = ‘2’,ttl.SD,0) AS valsumost,
              iif(KIND = ‘3’,ttl.SD,0) AS kolost
              FROM 1SBKTTL AS ttl,  1SACCS AS accs, 1SACCS AS accs2
              WHERE
              ((ttl.date = #1/1/2008#) AND (ttl.KIND IN (‘1’, ‘2’, ‘3’)) AND (‘ EL’ IN (ttl.VSC0,
              ttl.VSC1, ttl.VSC2)))
              AND
              (
              accs ON ttl.ACCID = accs.ID AND accs.SCHKOD >= accs2.SCHKOD AND LEFT(accs.SCHKOD,LEN(accs2.SCHKOD)) = accs2.SCHKOD
              AND accs.PLANID = 809 AND accs2.ID = ‘ 1V ‘
              )

                

              dsultan

              3 — 14.04.08 — 17:21

              (2) пустоту вернул :(

                

              sapphire

              4 — 14.04.08 — 17:31

              (3) Если положение dbf-ок статично, можно создать mdbшник и прилепить к нему через связь с таблицами запрос внутри. Так делают, когда хотят уйти от ограничений ядра jet

                

              dsultan

              5 — 14.04.08 — 17:35

              все ок, спасибо, при копипасте пробелы в ‘ 1v ‘ потерялись, и еще заодно узнал, что planID в dbf лежит 36ричный, а в sql версии десятичный

                

              sapphire

              6 — 14.04.08 — 17:36

              (5) :)

                

              dsultan

              7 — 14.04.08 — 17:37

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

                

              sapphire

              8 — 14.04.08 — 17:37

              +(4) Иногда лучше использовать драйвер FoxPro (см документацию к 1С++),
              или через Access. Кстати, частенько Accessовские БД используют для диагностики.

                

              sapphire

              9 — 14.04.08 — 17:38

              (7) Правильно, потому что ты не используешь индексы.

                

              dsultan

              10 — 14.04.08 — 17:39

              (8) я и начал с фокспрошного драйвера, уперся в форматы дат, устал бодаться, решил  джет попробовать

                

              dsultan

              11 — 14.04.08 — 17:41

              а их можно через джет использовать?

                

              КонецЦикла

              12 — 14.04.08 — 17:47

              (10) Юзай ОлеДБ, 1С++ и поиск
              Хватит долбить

                

              КонецЦикла

              13 — 14.04.08 — 17:48

              Кроме того уже есть аккаунтрекордсет

                

              dsultan

              14 — 14.04.08 — 18:07

              (12)а чем джет не оледб?
              делал уже через 1с++, быстрые итоги, все супер, только оказалось, что с dbf они не работают

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

              (13) это к чему?


              Форум программистов Vingrad

              > 2 Join-а в Query, не проходит запрос в IDE 

              :(

              Опции темы

              eXcoder

              Новичок

              Профиль
              Группа: Участник
              Сообщений: 16
              Регистрация: 26.2.2006

              Репутация: нет
              Всего: нет

              День добрый. Работаю через ADO с DBF’ами.
              Объединяю 3 таблицы.

              Пишу в ADOQuery.SQL :

              Код

              SELECT DISTINCT arc_acc.TNUM, arc_acc.SUM
              FROM arc_acc
              LEFT OUTER JOIN cardspri ON arc_acc.TNUM = cardspri.TNUM
              LEFT OUTER JOIN Licschet ON Licschet.xFIO = (cardspri.FAM+" "+cardspri.NAME+" "+cardspri.PATR)
              WHERE (arc_acc.CPERIOD='2005.12') AND ((arc_acc.INOUT='306') OR (arc_acc.INOUT='307'))
              ORDER BY arc_acc.TNUM

              в SQL Suery Analyzer от SQL SERVER 2000
              все проходит на ура.

              IDE говорит, что:
              «
              Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘arc_acc.TNUM = cardspri.TNUM
              LEFT OUTER JOIN Licschet ON Licschet.xFIO = (cardspri.FAM+» «+cardspri.NAME+» «+cardspri.PATR)’

              «

              Как выйти из ситуации?

              Это сообщение отредактировал(а) eXcoder — 1.3.2006, 06:04

              SergeBS

              Эксперт
              ***

              Профиль
              Группа: Завсегдатай
              Сообщений: 1111
              Регистрация: 10.6.2005
              Где: Владимир

              Репутация: 11
              Всего: 22

              Апострофы посмотри — в Delphi надо удваивать, т.е.
              SQL
              select * where a = ‘blabla-bla’ and b = 1

              В IDE:
              var
              s : string;

              s := ‘select * where a = »blabla-bla» and b = 1’;
              И так же — в Query и т.п.

              CaNIBaLchik

              Новичок

              Профиль
              Группа: Участник
              Сообщений: 48
              Регистрация: 8.2.2006
              Где: Томск

              Репутация: нет
              Всего: нет

              join -ы они вообще раздувают кортежы, любои join можно заменить and — ом

              eXcoder

              Новичок

              Профиль
              Группа: Участник
              Сообщений: 16
              Регистрация: 26.2.2006

              Репутация: нет
              Всего: нет

              Цитата(CaNIBaLchik @ 1.3.2006, 11:55 Найти цитируемый пост)
              join -ы они вообще раздувают кортежы, любои join можно заменить and — ом

              Можешь показать на моем запросе как вместо JOIN юзать AND ? smile

              SergeBS

              Эксперт
              ***

              Профиль
              Группа: Завсегдатай
              Сообщений: 1111
              Регистрация: 10.6.2005
              Где: Владимир

              Репутация: 11
              Всего: 22

              CaNIBaLchik,

              Цитата
              join -ы они вообще раздувают кортежы, любои join можно заменить and — ом

              Шутник.

              eXcoder,
              Вдогонку:
              ParamCheck -> false
              Prepared -> false

              ТоляМБА

              Котэ
              ***

              Профиль
              Группа: Завсегдатай
              Сообщений: 1607
              Регистрация: 15.12.2004
              Где: Трансильвания

              Репутация: 3
              Всего: 252

              Была у меня похожая проблема – 3 таблицы и два джоина. Не знаю поможет в твоем случае или нет, но всё же.
              Есть у меня в MS-SQL Server три таблицы:

              Liter, LiterLang, Landg
              LiterID,———-LiterID, LangName
              LiterName, LangID,—————-LangID

              Надеюсь так структура понятна.

              Был запрос:

              Код

              SELECT Landg.LangName, Liter.LiterName
              FROM  LiterLang INNER JOIN
              Liter ON LiterLang.LiterID = Liter.LiterID INNER JOIN
              Landg ON LiterLang.LangID = Landg.LangID

              Прокатывал на ура.
              Импортнул в dBase IV. В Делфях ошибка:

              Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘LiterLang.LiterID = Liter.LiterID INNER JOIN
              Landg ON LiterLang.LangID = Landg.LangID’

              Мои действия:
              1. Создал пустую базу Access
              2. Импортнул в нее все таблы
              3. Вставил в неё этот же запрос – оппа, тоже самое сообщение об ошибке. Ну, думаю, а какже акцесс-то связывает свои таблы? Захожу в схему данных и создаю связи (см. выше) перед этим поставив ключевые поля в Liter и в Lang. Захожу в запросы «Создание запроса в режиме конструктора», добавляю все три таблы – все связи сразу показались, помечаю соотв. поля на вывод, жму на просмотр – выдает те же данные что и на MS-SQL Server! С замиранием жму на «Режим SQL» — вижу запрос:

              Код

              SELECT Landg.LangName, Liter.LiterName
              FROM Liter INNER JOIN (Landg INNER JOIN LiterLang ON Landg.LangID = LiterLang.LangID) ON Liter.LiterID = LiterLang.LiterID;

              Цепляю его, ложу в ADOQuery1. Открываю – всё работает.

              Vit

              Vitaly Nevzorov
              ****

              Профиль
              Группа: Экс. модератор
              Сообщений: 10964
              Регистрация: 25.3.2002
              Где: Chicago

              Репутация: 14
              Всего: 207

              Заменить двойные кавычки на одинарные, но удвоенные

              ———————

              With the best wishes, Vit
              I have done so much with so little for so long that I am now qualified to do anything with nothing
              Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru



















              Правила форума «Delphi: Базы данных и репортинг»
              Vit
              Петрович

              Запрещено:

              1. Публиковать ссылки на вскрытые компоненты

              2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

              Обязательно указание:

              1. Базы данных (Paradox, Oracle и т.п.)

              2. Способа доступа (ADO, BDE и т.д.)

              • Литературу по Дельфи обсуждаем здесь
              • Действия модераторов можно обсудить здесь
              • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
              • Вопросы по реализации алгоритмов рассматриваются здесь
              • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи
              • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

              FAQ раздела лежит здесь!


              Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

              0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
              0 Пользователей:
              « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »

              Вопрос:

              Я выполняю задание на класс, и я нахожусь на своем конце. В принципе, мне нужно написать запрос, который использует INNER JOIN для объединения всех данных в 4 таблицы, избегая при этом заголовков с одинаковыми именами (Ie Table1.Master_Number и Table2.Master_Number). Литературные инструкции заключаются в следующем:

              Шаг 1. Создайте представление обо всех столбцах (только один раз столбцы столбцов, если столбцы дублируются в таблицах) во всех таблицах базы данных лекций 5. Сохраните этот запрос как Lecture_5_View и нам этот запрос, чтобы построить следующие 3 запроса. В предложении “FROM” вы должны использовать “INNER JOIN” в этом запросе. Помните, что ACCESS не поддерживает команду “CREATE VIEW”, поэтому вы должны создать запрос выбора. ‘

              Вот скриншот базы данных, в которой показаны все заголовки и заголовки столбцов. Tables

              Основываясь на других сообщениях, подобных этому, я подумал, что это будет довольно просто. У меня это до сих пор, но он не хочет запускать

              (т.е. ошибка синтаксиса (отсутствующий оператор) в выражении запроса “Таблица1.Master_Number = Таблица2.Master_Number INNER JOIN Table4 ON Table1.Master_Number = Table4.Master_Number)

              SELECT *
              FROM Table1
              INNER JOIN Table2 ON Table1.Master_Number = Table2.Master_Number
              INNER JOIN Table4 ON Table1.Master_Number = Table4.Master_Number
              

              Где я буду ошибаться до сих пор и как выполнить этот запрос?

              Большое спасибо, Джош

              Лучший ответ:

              При использовании Access вам необходимо использовать круглые скобки при выполнении нескольких соединений:

              SELECT  * 
              FROM    (Table1 
                      INNER JOIN Table2 
                          ON Table1.Master_Number = Table2.Master_Number)
                      INNER JOIN Table4 
                          ON Table1.Master_Number = Table4.Master_Number;
              

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

              SELECT  *
              FROM    Table1
                      INNER JOIN Table2
                          ON Table1.Master_Number = Table2.Master_Number;
              

              Тогда у вас есть:

              SELECT  *
              FROM    YourFirstQuery
                      INNER JOIN Table4 
                          ON Table1.Master_Number = Table4.Master_Number;
              

              Это немного отличается от подзапросов, поскольку вы все еще можете ссылаться на все поля из Таблицы 1 и Таблицы2.


              РЕДАКТИРОВАТЬ

              Чтобы избежать дублирования столбцов, вам нужно явно указать нужные столбцы (хотя вы все равно должны это делать):

              SELECT  Table1.Master_Number,
                      Table1.Asset_Tag,
                      Table1.Serial_Number,
                      Table2.Last_Name,
                      Table2.First_Name,
                      Table4.Office_Number,
                      Table4.Location,
                      Table4.Department
              FROM    (Table1 
                      INNER JOIN Table2 
                          ON Table1.Master_Number = Table2.Master_Number)
                      INNER JOIN Table4 
                          ON Table1.Master_Number = Table4.Master_Number;
              

              Ответ №1

              Попробуй это:

                SELECT * FROM ((Table1
              INNER JOIN Table2
              ON Table1.Master_Number = Table2.Master_Number)
              INNER JOIN Table4
              ON Table1.Master_Number = Table4.Master_Number)
              

              Возможно, вам также будет интересно:

            • Microsoft access odbc ошибка вызова
            • Microsoft access 2016 ошибка 2711
            • Microsoft 404 not found ошибка
            • Microsd не форматируется ошибка ввода вывода
            • Microlife тонометр ошибка 3 error

            • Понравилась статья? Поделить с друзьями:
              0 0 голоса
              Рейтинг статьи
              Подписаться
              Уведомить о
              guest

              0 комментариев
              Старые
              Новые Популярные
              Межтекстовые Отзывы
              Посмотреть все комментарии