Меню

Delphi число содержит синтаксическую ошибку

Polina@

0 / 0 / 0

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

Сообщений: 28

1

MS Access

Число содержит синтаксическую ошибку в выражении запроса (дата)

10.02.2015, 23:17. Показов 1472. Ответов 2

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


Выполняю следующий запрос:

Delphi
1
2
3
4
5
DM.ADOQuery1.Active := false;
DM.ADOQuery1.SQL.Clear;
DM.ADOQuery1.SQL.Add('select Учёт from Дата where Дата='+Edit3.Text);
DM.ADOQuery1.Open;
DM.ADOQuery1.Active := true;

В Edit3 ввожу 10.02.2010
Выдает сообщение об ошибке:Число содержит синтаксическую ошибку в выражении запроса «Дата=10.02.2010»

В БД access поле «Дата» текстовое.
Но если запрос выглядит следующим образом, то все работает

Delphi
1
2
3
4
5
DM.ADOQuery1.Active := false;
DM.ADOQuery1.SQL.Clear;
DM.ADOQuery1.SQL.Add('select Äàòà from Ó÷¸ò where Äàòà="10.02.2010"');
DM.ADOQuery1.Open;
DM.ADOQuery1.Active := true;

Помогите, пожалуйста!!!

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



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

10.02.2015, 23:17

2

northener

пофигист широкого профиля

4599 / 3059 / 850

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

Сообщений: 17,624

10.02.2015, 23:20

2

Delphi
1
DM.ADOQuery1.SQL.Add('select Учёт from Дата where Дата="'+Edit3.Text+'"');



1



KOPOJI

Почетный модератор

Эксперт HTML/CSSЭксперт PHP

16842 / 6720 / 880

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

Сообщений: 19,967

10.02.2015, 23:21

3

Delphi
1
DM.ADOQuery1.SQL.Add('select Учёт from Дата where Дата="'+Edit3.Text+'"');

?



0



 
Valerik ©
 
(2008-11-25 10:46)
[0]

Помгите пожалуйста с запросом!!!!
Form2.ADOQuery1.SQL.Add(«select * from Otchet Where data=»+DateTimePicker1.+»»);

Дает ошибку:Число содержит синтаксическую ошибку в выражении запроса «data=24.11.2008»

В чем может быть проблема?


 
Valerik ©
 
(2008-11-25 10:47)
[1]

Извините опечатка, вот запрос:
Form2.ADOQuery1.SQL.Add(«select * from Otchet Where data=»+DateToStr(DateTimePicker1.Date)+»»);


 
Sergey13 ©
 
(2008-11-25 10:50)
[2]

> [0] Valerik ©   (25.11.08 10:46)
> В чем может быть проблема?

В нежелании использовать параметры в запросе.
Where data=:data


 
qqq
 
(2008-11-25 10:53)
[3]


> )+»»);

этот хвостик зачем?


 
sniknik ©
 
(2008-11-25 10:55)
[4]

> Дает ошибку:Число содержит синтаксическую ошибку в выражении запроса «data=24.11.2008»
а разве нет? правильным с точки зрения любого sql сервера будет число с одной точкой между целой и дробной частью типа «data=24.11»

используй параметры.


 
stas ©
 
(2008-11-25 11:22)
[5]

Valerik ©   (25.11.08 10:46)
Дата в Access записывается в диезах
data=#24.11.2008#


 
Sergey13 ©
 
(2008-11-25 11:57)
[6]

> [5] stas ©   (25.11.08 11:22)

А в другой СУБД в бемолях. А через параметры едят все.


 
qqq
 
(2008-11-25 13:10)
[7]


> stas ©   (25.11.08 11:22) [5]

это зло!


 
Valerik ©
 
(2008-11-25 13:35)
[8]

Form2.ADOQuery1.Close;
    Form2.ADOQuery1.SQL.Clear;
    Form2.ADOQuery1.SQL.Add(«select * from Otchet Where data=:D1»);      Form2.ADOQuery1.Parameters.ParamByName(«D1»).Value:=DateTimePicker1.Date;
    Form2.ADOQuery1.Open;

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


 
Palladin ©
 
(2008-11-25 13:44)
[9]

значит нет ничего за эту дату


 
Palladin ©
 
(2008-11-25 13:45)
[10]

у тебя поди в данных дата еще и со временем сидит…


 
sniknik ©
 
(2008-11-25 14:03)
[11]

> у тебя поди в данных дата еще и со временем сидит…
по другому и не бывает, типа только дата в аксессе нет, и кстати DateTimePicker1.Date тоже не совсем Date…


 
Valerik ©
 
(2008-11-25 14:08)
[12]

есть за эту дату данные. и функцию в Access задавал, что бы ставил только дату.
И все равно пусто.


 
Правильный$Вася
 
(2008-11-25 14:09)
[13]


> есть за эту дату данные

начало и конец суток можешь определить?
BETWEEN юзай


 
Palladin ©
 
(2008-11-25 14:11)
[14]


> sniknik ©   (25.11.08 14:03) [11]

) я имею в виду, что значение времени в данных не 0 (взял да поставил значение по умолчанию на поле Date()+Time()),


> и кстати DateTimePicker1.Date тоже не совсем Date

а вот это, кстати да, упущение с моей стороны, причина скорее всего наоборотная )

Form2.ADOQuery1.Parameters.ParamByName("D1").Value:=Trunc(DateTimePicker1.Date);


 
Valerik ©
 
(2008-11-25 14:11)
[15]

Разобрался. Перевел дату в стринг и все заработало:
Form2.ADOQuery1.Parameters.ParamByName(«D1»).Value:=DateToStr(DateTimePicker1.Da te)


 
Sergey13 ©
 
(2008-11-25 14:17)
[16]

> [15] Valerik ©   (25.11.08 14:11)
> Перевел дату в стринг и все заработало

Успехов тебе в нелегкой борьбе.


 
sniknik ©
 
(2008-11-25 14:19)
[17]

> Перевел дату в стринг и все заработало:
ну это только на первый взгляд. ты просто перенес ошибку из очевидных в «плавающие» и трудно уловимые.


 
sniknik ©
 
(2008-11-25 14:23)
[18]

> Form2.ADOQuery1.Parameters.ParamByName(«D1»).Value:=DateToStr(DateTimePicker1.Da  te)
вместо этого выполни к примеру вот эту пару и сравни результат
Form2.ADOQuery1.Parameters.ParamByName(«D1»).Value:= «24.11.2008»;
и
Form2.ADOQuery1.Parameters.ParamByName(«D1»).Value:= «11.24.2008»;


 
Valerik ©
 
(2008-11-25 14:50)
[19]


> вместо этого выполни к примеру вот эту пару и сравни результатForm2.
> ADOQuery1.Parameters.ParamByName(«D1»).Value:= «24.11.2008»;
> иForm2.ADOQuery1.Parameters.ParamByName(«D1»).Value:= «11.
> 24.200

Результат одинаковый)))


 
Palladin ©
 
(2008-11-25 15:03)
[20]


> Valerik ©   (25.11.08 14:50) [19]

а так ?

Form2.ADOQuery1.Parameters.ParamByName(«D1»).Value:= «12.11.2008»;
и
Form2.ADOQuery1.Parameters.ParamByName(«D1»).Value:= «11.12.2008»;


 
Valerik ©
 
(2008-11-25 15:20)
[21]


> а так ?Form2.ADOQuery1.Parameters.ParamByName(«D1»).Value:
> = «12.11.2008»;иForm2.ADOQuery1.Parameters.ParamByName(«D1»).
> Value:= «11.12.2008»;

А в чем разница????


 
Palladin ©
 
(2008-11-25 15:39)
[22]

Это не разница. Это игра такая. Угадай где месяц. На какой машине.


 
sniknik ©
 
(2008-11-25 15:42)
[23]

> А в чем разница????
дальтоник? нет разницы (в принципе задания. есть только в цифрах > 12 и <=), а результат для разных случаев различается. и подумай что будет если ты на таких недостоверных данных будешь к примеру зарплату начислять… побьют ведь (как минимум).


 
stas ©
 
(2008-11-25 17:08)
[24]

Sergey13 ©   (25.11.08 11:57) [6]
qqq   (25.11.08 13:10) [7]

Параметры параметрами,  а синтаксис sql движка с которым работаешь надо знать.


 
Правильный$Вася
 
(2008-11-25 18:39)
[25]


> stas ©   (25.11.08 17:08) [24]

многое нужно знать, а еще больше нужно знать, что делать НЕ надо
даже если есть такая возможность


 
Palladin ©
 
(2008-11-25 18:41)
[26]

особенно для того, что бы потом не скакать по всему проекту исправляя запросы при смене СУБД


 
stas ©
 
(2008-11-25 20:53)
[27]

>Правильный$Вася   (25.11.08 18:39) [25]
Palladin ©   (25.11.08 18:41) [26]
Я  нигде и не говорил что параметры не нужно использовать.


 
Правильный$Вася
 
(2008-11-25 21:50)
[28]


> stas ©   (25.11.08 20:53) [27]

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


 
Palladin ©
 
(2008-11-25 21:56)
[29]

негодяй! 😉


 
Valerik ©
 
(2008-11-26 09:03)
[30]


> sniknik ©   (25.11.08 15:42) [23]

Ты думаешь я не понял, что разницы ни какой????


 
Valerik ©
 
(2008-11-26 09:03)
[31]

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


 
Palladin ©
 
(2008-11-26 09:13)
[32]


> Valerik ©   (26.11.08 09:03) [31]

а ты всю ветку прочитал?


 
stas ©
 
(2008-11-26 10:06)
[33]

Palladin ©   (25.11.08 21:56) [29]
))
Правильный$Вася   (25.11.08 21:50) [28]
За параметры было написано в [4], зачем дублировать?
А я ничего не подсовывал ))
А сказал как правильно записывать запрос с использованием даты.
Я же не писал не слушай [4], а делай как в [5].

Valerik ©   (25.11.08 14:11) [15]
Если уже преобразовал в стринг, то нужно в такой формат YYYYMMDD, т.е.
20081126.


 
Правильный$Вася
 
(2008-11-26 11:08)
[34]


> Если уже преобразовал в стринг, то нужно

не нужно!
параметр должен идти тем типом, какой он есть «в натуре», без всяких преобразований, которые даже если не обманывают СУБД (что часто случается), то вынуждают его делать обратные преобразования, что и накладно по времени/ресурсам, и может привести к неверному обратному преобразованию
и при нормальном «тип-в-тип» использовании параметров нет никакой необходимости помнить все эти бредовые недоформаты, специфичные для каждой СУБД каждой ее версии на каждой локали под каждой учеткой


 
Sergey13 ©
 
(2008-11-26 11:49)
[35]

> [34] Правильный$Вася   (26.11.08 11:08)
> параметр должен идти тем типом, какой он есть «в натуре»,

Как я понял, он у автора так и идет. Его проблема в том, что у него в БД дата в строке хранится.


 
Palladin ©
 
(2008-11-26 12:00)
[36]


>  Его проблема в том, что у него в БД дата в строке хранится.

хто сказал? variant — содержащий строковые данные при попытке обратиться к нему как к TDateTime будет пытаться преобразовать эту строку


 
Anatoly Podgoretsky ©
 
(2008-11-26 12:34)
[37]

> Sergey13  (26.11.2008 11:49:35)  [35]

Тогда это не дата, а набор символов.


 
sniknik ©
 
(2008-11-26 13:02)
[38]

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

> Если уже преобразовал в стринг, то нужно в такой формат YYYYMMDD, т.е. 20081126.
не путай акцесс и мсскл

> Его проблема в том, что у него в БД дата в строке хранится.
вряд ли. если бы у него была строка мой тест не сработал бы.


 
stas ©
 
(2008-11-26 13:05)
[39]

>sniknik ©   (26.11.08 13:02) [38]
Это вроде любая СУБД правильно понимает.


 
sniknik ©
 
(2008-11-26 13:13)
[40]

> Это вроде любая СУБД правильно понимает.
а ты проверь… и огласи список.

если уж нужен строковый формат для любой(вернее для как можно большего количества, любая это слишком самоуверенно) то тогда надо брать формат представления odbc 2008-11-26, «засилье» odbc было длительным и многие вводили поддержку и ради совместимости будут держать дальше. тогда их будет больше, но не все естественно.


    msm.ru

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

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

    >
    Запрос по дате
    , Создание запроса по дате

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



    Сообщ.
    #1

    ,
    08.10.04, 12:48

      Уважаемые господа!
      Подскажите где у меня ошибка?
      База в файле Access через ADO.
      Создаю запрос с использованием DateEdit:

      SQL.Add(‘(Date=»’+DateEdit.EditText+»’)’);

      компилируется нормально, но при обращении выдает ошибку «Несоответствие типов данных в выражении условия отбора».

      Master

      Chow



      Сообщ.
      #2

      ,
      08.10.04, 13:11

        Используй параметры:

        ExpandedWrap disabled

          SQL.Add(‘(Date=:P_DATE)’);

          SQL.ParamByName(‘P_DATE’).Value = DateEdit.Date;


        nikvicfc



        Сообщ.
        #3

        ,
        08.10.04, 13:34

          Спасибо за такой быстрый ответ, но к сожалению не компилируется.
          Пишет, что не понимает «Parameters».

          Wizard

          Bas



          Сообщ.
          #4

          ,
          08.10.04, 13:50

            Цитата nikvicfc, 8.10.04, 15:48

            SQL.Add(‘(Date=»’+DateEdit.EditText+»’)’);

            ExpandedWrap disabled

              ‘(Date=#’+DateEdit.EditText+’#)’


            nikvicfc



            Сообщ.
            #5

            ,
            11.10.04, 06:04

              Уважаемый Master!
              При таком коде появляется ошибка: ‘Дата содержит синтаксическую ошибку в выражении запроса ‘(Date=##)».


              Kobra



              Сообщ.
              #6

              ,
              11.10.04, 06:23

                Цитата nikvicfc, 8.10.04, 15:48

                SQL.Add(‘(Date=»’+DateEdit.EditText+»’)’);

                тут кажется ошибки нет, но дату нужно вводить соответствующим форматом. точно не помню но кажется YYYY-MM-DD.
                или как писал Chow через параметр.


                shilnik



                Сообщ.
                #7

                ,
                11.10.04, 07:24

                  Если выдается именно (дословно) такая ошибка:

                  Цитата

                  ‘Дата содержит синтаксическую ошибку в выражении запроса ‘(Date=##)»

                  то это значит, что DateEdit.EditText имеет пустое значение. Иначе было бы:
                  ‘Дата содержит синтаксическую ошибку в выражении запроса ‘(Date=#чего-то там#)»

                  Wizard

                  Bas



                  Сообщ.
                  #8

                  ,
                  11.10.04, 07:50

                    Цитата nikvicfc, 11.10.04, 09:04

                    ‘Дата содержит синтаксическую ошибку в выражении запроса ‘(Date=##)».

                    В Accesse дату принято заключать в #.
                    Слово ‘Date’ — являеться зарезервированным во многих язаках, и если оно являеться именем поля то обычно надо брать в кавычки.


                    nikvicfc



                    Сообщ.
                    #9

                    ,
                    11.10.04, 10:01

                      Уважаемые господа!
                      Отвечаю по-порядку.
                      И в таблице и в запросе формат dd.mm.yyyy, в таблице Access — краткий формат даты.
                      Первоначально сообщение об ошибке так и было написоно:’Дата содержит синтаксическую ошибку в выражении запроса ‘(Date=#11.10.2004#)».
                      Название поля(Date) на самом деле иное.

                      Сообщение отредактировано: nikvicfc — 11.10.04, 10:05

                      Wizard

                      Bas



                      Сообщ.
                      #10

                      ,
                      11.10.04, 10:26

                        Цитата nikvicfc, 11.10.04, 13:01

                        ‘(Date=#11.10.2004#)».

                        А так (Date=#11/10/2004#)

                        ExpandedWrap disabled

                          WHERE (((Заказы.ДатаРазмещения)=#7/26/1996#));


                        pigas



                        Сообщ.
                        #11

                        ,
                        12.10.04, 01:51

                          слово DATE зарезервировано стандартом ANSI/iso sql92.
                          Оно не допустимо к исползованию как имя поля.


                          nikvicfc



                          Сообщ.
                          #12

                          ,
                          12.10.04, 05:45

                            Уважаемый Master!
                            Попробывал заменить везде, в том числе в системе разделители даты.
                            Кроме изменения разделителей ничего не изменилось. Ошибка та же:’Дата содержит синтаксическую ошибку в выражении запроса ‘(S_Date=#11/10/2004#)».
                            Уважаемый Pigas, как я уже писал название поля на самом деле не Date, так написал на форуме для простоты.


                            Mamont



                            Сообщ.
                            #13

                            ,
                            12.10.04, 06:07

                              Member

                              **

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

                              Я работаю на Delphi 7 с использованием DBExpress Компонет.
                              И у меня тоже возникла ошибка при работе с датой, точнее передачей ее запросом.

                              Цитата

                              SQLQuery1.Close;
                              SQLQuery1.SQL.Text:=’insert into history (now_date) values (:date)’;
                              SQLQuery1.ParamByName(‘date’).asDateTime:=date;
                              SQLQuery1.ExecSQL();

                              Он ругается : «dbExpress Error: Invalid Field Type»
                              В таблице поле типа: datetime
                              Также пытался Задавать параметр asDate. Все равно нивкакую.

                              Сообщение отредактировано: Mamont — 12.10.04, 06:23

                              Master

                              Chow



                              Сообщ.
                              #14

                              ,
                              12.10.04, 06:09

                                Какой текст запроса полностью?
                                (И все-же стоит использовать параметры — не надо ломать голову о формате представления того или иного типа. Тем более, что на другом компьютере могут быть другие настройки и ваша программа не будет работать)

                                Добавлено 12.10.04, 06:11

                                Цитата Mamont, 12.10.04, 09:07

                                ‘insert into (now_date) values (:date)’

                                Где здесь указано имя таблицы?


                                Mamont



                                Сообщ.
                                #15

                                ,
                                12.10.04, 06:12

                                  Member

                                  **

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

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

                                  Добавлено 12.10.04, 06:14
                                  Sorry

                                  Цитата

                                  SQLQuery1.SQL.Text:=’insert into history (now_date) values (:date)’;

                                  Это я когда пост писал, забыл написать. В проге название таблицы присутствует.

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

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

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

                                  Рейтинг@Mail.ru

                                  [ Script execution time: 0,1237 ]   [ 16 queries used ]   [ Generated: 28.01.23, 18:02 GMT ]  

                                  Типов сообщений компилятора — более двухсот. Рассмотрим перечень наиболее встречающихся сообщений класса Error

                                  • 0. <Что-то1> expected but <Что-то2> found. Обычно это сообщение возникает при синтаксической ошибке.Например,в случае небаланса скобок,компилятор сообщит: ‘)’ expected but ‘;’ found (вместо ожидавшейся скобки найдена запятая).

                                    Компилятор часто сообщает, что ‘end’ ожидается,например:x:= 5,7; здесь неуместен разделитель-запятая, а сообщается про end. (‘END’ expected but ‘,’ found)

                                  • 1. <Имя> is not a type identifier. Данное <Имя> не является именем типа.
                                  • 2. ‘;’ not allowed before ‘Else’. Перед else нельзя ставить точку с запятой
                                  • 3. Abstract method must be virtual or dynamic. Абстрактный метод должен быть виртуальным или динамическим.
                                  • 4. Ambiguous overloaded call to <Имя блока>. Компилятор не может однозначно выбрать перегружаемый блок. Измените параметр.
                                  • 5. Array type required. Ошибка возникает в случаях, когда в индексе элемента массива указано больше уровней, чем предусмотрено описанием, и если массив не описан. Например, после объявления двумерного массива х или простой переменной х ошибочно записывают элемент х[2,1,1] (в нем показано три измерения).
                                  • 6. Assignment to FOR-loop variable <Имя>. Присваивание значения параметру FOR-цикла в теле цикла.

                                    Например, вследствие описки дважды используется имя i в кратном цикле:

                                    For i:= 1 to n do For i:= 1 to m do ...
                                    
                                  • 7. Break or Continue outside of loop. Break или Continue — не в цикле.
                                  • 8. Cannot initialize local variables. Локальные переменные запрещено инициализировать (задавать им значения при описании).
                                  • 9. Cannot assign to/read a read-only/write-only property. Присвоение значения свойству read/only и чтение свойства write/only запрещены.
                                  • 10. Constant expression expected.В этом месте должна стоять константа или константное выражение, например константа выбора в структуре Case.
                                  • 11. Constant expression violates subrange bounds. Выход значения константы из диапазона. Контроль не полон. Например, «сойдет с рук» присваивание x:=3000000000, где х имеет тип integer, но начение х будет искажено.
                                  • 12. Constant or type identifier expected. Требуется имя типа или тип-диапазон.
                                  • 13. Could not compile used unit <Имя>. Компиляция присоединенного модуля <Имя> невозможна.
                                  • 14. Data type too large. Тип определяет структуру размером более 2 Гбайт; это слишком много.
                                  • 15. Declaration expected but <Что-то> found. Пропущено описание или оператор.
                                  • 16. Declaration of <Имя> differs from previous declarations… Данный заголовок блока не соответствует упреждающему объявлению блока.
                                  • 17. Default parameter <Имя> must be by-value or constant. Необязательный параметр (со значением по умолчанию) не должен вызываться по ссылке.
                                  • 18. Expression expected. В этом месте программы должно стоять выражение.
                                  • 19. Expression too complicated. Выражение излишне сложно для компиляции.
                                  • 20. File type not allowed here. В этом месте или в этой роли файловую переменную нельзя использовать. Например, она не может быть формальным параметром-значением.
                                  • 21. For loop control variable must be simple local variable. Параметр цикла должен быть простой локальной (описанной в этом же блоке) переменной.
                                  • 22. For loop control variable must have ordinal type. Параметр цикла должен иметь порядковый тип.Вещественный тип запрещен.
                                  • 23. Function needs result type. В заголовке функции надо указывать тип ее результата.
                                  • 24. Identifier expected but <Что-то> found. В этом месте должно стоять имя. Например, пропущено имя функции после Function.
                                  • 25. Identifier redeclared <Имя>.<Имя> описано повторно, но в пределах блока имя можно описать лишь раз. Проверьте, не обозначена ли локальная переменная тем же именем, что и формальный параметр блока.
                                  • 26. Illegal character in input file <знак>. Запретный знак, например «русская» буква, либо вы оставили скобку }, убрав открывающую скобку {.
                                  • 27. Illegal type in Read/Readln (Write/Writeln) statement. Элемент запрещенного типа в списке ввода/вывода.
                                  • 28. Incompatible types <указание типов>. Несоответствие типов по присваиванию или типов операндов одной операции. Сообщение выдается и при неверном использовании структур. Например, z — запись, ошибочно записано присваивание z:= 0 (работать надо с полями записи).
                                  • 29. Invalid function result type. Недопустимый тип результата функции.
                                  • 30. Label already defined: <Метка>. <Метка> уже помечает другой оператор.
                                  • 31. Left side cannot be assigned to. He может быть такой левой части в присваивании. Примеры: попытка присвоить значение файловой переменной, присвоение значения формальному параметру-константе.
                                  • 32. Line too long. В строке программного текста больше 255 знаков.
                                  • 33. Low bound exceeds high bound. Нижняя граница превышает верхнюю.
                                  • 34. Missing operator or semicolon.Пропуск операции (например перед скобкой) или пропуск точки с запятой. При пропуске ‘;’ маркер ошибки стоит на очередном предложении (объявлении или операторе).
                                  • 35. Missing parameter type. He указан тип формального параметра-значения или параметра процедурного типа.
                                  • 36. Not enough actual parameters. He хватает фактических параметров.
                                  • 37. Need to specify at least one dimension … Нужно задавать в операторе SetLength хотя бы один размер динамического массива.
                                  • 38. Number of elements differs from declaration. Число элементов в структурной константе не соответствует ее описанию.
                                  • 39. Operator not applicable to this operand type. Операция не применима к операндам данного типа. Например: ‘А’ or ‘В’; ‘Text1’* ‘Text2’.
                                  • 40. Order of fields in record constant differs from declaration. Порядок полей в записи-константе не соответствует описанию записи.
                                  • 41. Ordinal type required. Требуется порядковый тип (например, в индексе).
                                  • 42. Out of memory. Компилятору не хватает памяти.
                                  • 43. Statement expected but <Что-то> found. В этом месте должен стоять оператор. Сообщение выдается во всех случаях, когда в тело блока или секцию инициализации ошибочно помещают описание (<Что-то>). Ошибочная форма обращения к процедуре Procedure <Имя> или к функции Function <Имя> также вызывает сообщение.
                                  • 44. Sets may have at most 256 elements. Множество (тип Set) не может содержать более 256 элементов.
                                  • 45. Slice standard function only allowed as open array argument. Функцию Slice можно использовать лишь как фактический параметр
                                  • 46. Statement not allowed in interface part. Предложения в секции интерфейса программного модуля недопустимы.
                                  • 47. Syntax error in real number. Синтаксическая ошибка в записи числа вещственного типа.
                                  • 48. There is no overload version of <Имя> that can be called with these arguments.Не предусмотрен перегружаемый блок <Имя>, который мог бы вызываться с таким аргументом. Пример: IntToStr(x), где х – выражение вещественного типа.
                                  • 49. Too many actual parameters. Фактических параметров больше, чем формальных.
                                  • 50. Type actual and formal var parameters must be identical. Тип фактического параметра должен быть идентичен типу формального параметра-переменной.
                                  • 51. Type of expression must be <Тип>. Выражение должно быть указанного типа. Например,после While и Until должно стоять логическое выражение.
                                  • 52. Undeclared identifier: <Имя>.Не описано <Имя>. Проверьте есть ли описание в нужном месте,нет ли описок в имени. Если указано имя компонента формы, проверьте,поместили ли компонент на данную форму.
                                  • 53. Unexpected end of file in comment started on line <N>. Неожиданный конец файла при незавершенном комментарии, начало комментария — в строке N.
                                  • 54. Unit name mismatch: <Имя>. Имя модуля ошибочно.
                                  • 55. Unsatisfied forward or external declaration <Имя>. Отсутствует описание блока, объявление которого было дано (заголовок в интерфейсе или в описании объектного типа, либо упреждающее описание).
                                  • 56. Unterminate string. He закрыта апострофом строка-константа типа string.

                                  Рассмотрим также некоторые сообщения классов warning и hint.

                                  • Return value of function <Имя> might be undefined. В теле функции нет присваивания ее результата.
                                  • Variable <Имя> might not have been initialized. Указывает имя переменой, которой не задали значения.
                                  • For-Loop variable <Имя> may be undefined after loop. Попытка использования значения параметра For-цикла после завершения этого цикла.
                                  • Text after final ‘END.’ ignored by compiler. Текст, идущий за конечной строкой модуля, игнорируется компилятором.
                                  • Variable <Имя> is declared but never used in <Имя блока>. Обращает внимание на переменную <Имя>, описанную,но не нашедшую применения.
                                  • Value assigned to <Имя> never used. Хотя бы одно значение переменной <Имя> никак не использовано.

                                  Несколько рекомендаций

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

                                  Не удаляйте прежний вариант кода,пока не убедитесь,что ошибка устранена. Лучше на время закомментировать код,заключив его в скобки: { код }

                                  Компилятор не анализирует, как будет выполняться программа, поэтому выход значения индекса из диапазона выявляет только если индекс задан константным выражением. Деление на ноль вообще пропускается, кроме оператора div, в случае если делитель — константное выражение.

                                  I keep getting the same error when I try and get info from my MS access database. Below is my coding.

                                  var      
                                  iTemp, iX, iY, k : Integer;
                                  sDate : String;
                                  
                                  begin
                                  
                                    iTemp := 0;
                                    DB.Close;
                                    DB.SQL.Add('SELECT Count(UserID) AS Total FROM tblResults;');
                                    DB.Parameters.ParamByName('ID').Value := pID;
                                    DB.ExecSQL;
                                    DB.Open;
                                  
                                    iTemp := DB.FieldByName('Total').AsInteger;
                                  
                                    if iTemp = 0 then
                                      ShowMessage('Sorry but we do not have any test results for you. Take a test and check your result !')
                                    else
                                    Begin
                                  
                                      DB.Close;
                                      DB.SQL.Add('SELECT Mark,DateTested AS Total FROM tblResults WHERE UserID=:ID;');
                                      DB.Parameters.ParamByName('ID').Value := pID;
                                      DB.ExecSQL;
                                      DB.Open;
                                  
                                      for k := 1 to iTemp do
                                      Begin
                                  
                                      iX := k;
                                      iY := DB.FieldByName('Mark').AsInteger;
                                      sDate := DB.FieldByName('DateTested').AsString;
                                  
                                      Chart1.Series[0].AddXY(iX,iY,sDate,clTeeColor);
                                  
                                      DB.Next;
                                  
                                      End;
                                  
                                      Db.Close;
                                    End;
                                  

                                  The error is

                                  Syntax errpr. in query expression ‘Username=»SELECT Count(UserID) AS Total FROM tblResults’

                                  I really do not undertand this error. Please help me get this thing working.

                                  Gord Thompson's user avatar

                                  Gord Thompson

                                  113k30 gold badges203 silver badges404 bronze badges

                                  asked Oct 27, 2013 at 19:18

                                  Benedict Ferguson's user avatar

                                  1

                                  I don’t know Delphi (only MS Access), but one thing in your code still looks strange to me:

                                  Your error message says that the error occurs «in query expression ‘Username=»[the SQL string from your code].

                                  You passed the SQL string to your query with this code:

                                  DB.SQL.Add('SELECT Count(UserID) AS Total FROM tblResults;');
                                  

                                  As you are using DB.SQL.Add('...') (and not something like DB.SQL = '...'), I suspect that maybe DB.SQL already contains something at the beginning of your code.

                                  Where else should the 'Username= part come from?

                                  answered Oct 27, 2013 at 19:31

                                  Christian Specht's user avatar

                                  Christian SpechtChristian Specht

                                  35.4k14 gold badges130 silver badges181 bronze badges

                                  1

                                  I keep getting the same error when I try and get info from my MS access database. Below is my coding.

                                  var      
                                  iTemp, iX, iY, k : Integer;
                                  sDate : String;
                                  
                                  begin
                                  
                                    iTemp := 0;
                                    DB.Close;
                                    DB.SQL.Add('SELECT Count(UserID) AS Total FROM tblResults;');
                                    DB.Parameters.ParamByName('ID').Value := pID;
                                    DB.ExecSQL;
                                    DB.Open;
                                  
                                    iTemp := DB.FieldByName('Total').AsInteger;
                                  
                                    if iTemp = 0 then
                                      ShowMessage('Sorry but we do not have any test results for you. Take a test and check your result !')
                                    else
                                    Begin
                                  
                                      DB.Close;
                                      DB.SQL.Add('SELECT Mark,DateTested AS Total FROM tblResults WHERE UserID=:ID;');
                                      DB.Parameters.ParamByName('ID').Value := pID;
                                      DB.ExecSQL;
                                      DB.Open;
                                  
                                      for k := 1 to iTemp do
                                      Begin
                                  
                                      iX := k;
                                      iY := DB.FieldByName('Mark').AsInteger;
                                      sDate := DB.FieldByName('DateTested').AsString;
                                  
                                      Chart1.Series[0].AddXY(iX,iY,sDate,clTeeColor);
                                  
                                      DB.Next;
                                  
                                      End;
                                  
                                      Db.Close;
                                    End;
                                  

                                  The error is

                                  Syntax errpr. in query expression ‘Username=»SELECT Count(UserID) AS Total FROM tblResults’

                                  I really do not undertand this error. Please help me get this thing working.

                                  Gord Thompson's user avatar

                                  Gord Thompson

                                  113k30 gold badges203 silver badges404 bronze badges

                                  asked Oct 27, 2013 at 19:18

                                  Benedict Ferguson's user avatar

                                  1

                                  I don’t know Delphi (only MS Access), but one thing in your code still looks strange to me:

                                  Your error message says that the error occurs «in query expression ‘Username=»[the SQL string from your code].

                                  You passed the SQL string to your query with this code:

                                  DB.SQL.Add('SELECT Count(UserID) AS Total FROM tblResults;');
                                  

                                  As you are using DB.SQL.Add('...') (and not something like DB.SQL = '...'), I suspect that maybe DB.SQL already contains something at the beginning of your code.

                                  Where else should the 'Username= part come from?

                                  answered Oct 27, 2013 at 19:31

                                  Christian Specht's user avatar

                                  Christian SpechtChristian Specht

                                  35.4k14 gold badges130 silver badges181 bronze badges

                                  1

                                  MOV
                                  Постоялец
                                  Постоялец
                                   
                                  Сообщения: 414
                                  Зарегистрирован: 13.03.2004 (Сб) 15:13
                                  Откуда: Санкт-Петербург

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

                                  Вот запрос в Accesse:

                                  Код: Выделить всё
                                  Dim i As Date
                                  DoCmd.RunSQL "UPDATE DailySales SET DailySales.dn =" + g + " WHERE DailySales.Data = " + Format( i, "DD.MM.YYYY")

                                  Ругается что: Число содержит синтаксическую ошибку в выражении запроса ‘DailySales.Data= 01.07.2004’

                                  Поле Data в таблице и переменная в условии запроса (i) имеют тип дата. Пробовал без форматирования даты и менять формат даты самого поля таблицы (сейчас там краткий формат). Все-таки что-то не то с типами. i форматировал по разному.

                                  Если записать просто Format( i, «DDMMYYYY»), то зарос проходит, но дат в таблице не находит, чтобы обновить, а они есть.

                                  Может кто-то точно знает в чем причина?


                                  Leon_
                                  Постоялец
                                  Постоялец
                                  Аватара пользователя

                                   
                                  Сообщения: 333
                                  Зарегистрирован: 19.05.2004 (Ср) 16:31
                                  Откуда: Moscow
                                  • ICQ

                                  Сообщение Leon_ » 12.07.2004 (Пн) 10:41

                                  Попробуй Format$(i, «#mm-dd-yyyy#).

                                  :?: Off. Не лучше ли для конкатенации строк использовать & вместо + ?


                                  MOV
                                  Постоялец
                                  Постоялец
                                   
                                  Сообщения: 414
                                  Зарегистрирован: 13.03.2004 (Сб) 15:13
                                  Откуда: Санкт-Петербург

                                  Сообщение MOV » 12.07.2004 (Пн) 11:13

                                  пишу так Format$(i, «#DD.MM.YYYY#») в ошибке вообще косяк выдается:

                                  Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘DailySales.Data= 3816DD-MM-YYYY9’

                                  (это дословно). :?

                                  Если пишу без символа «#», а=просто

                                  Format$(i, «DD.MM.YYYY») он съедает, но дат все равно в таблице не находит :?

                                  Off. Не лучше ли для конкатенации строк использовать & вместо + ?

                                  Я часто встречал раньше, что что-то работает быстрее, но все время забываю что именно и проверять пока некогда. Поэтому пишу «+», тоже нормально пашет.


                                  alibek
                                  Большой Человек
                                  Большой Человек
                                   
                                  Сообщения: 14204
                                  Зарегистрирован: 19.04.2002 (Пт) 11:40
                                  Откуда: Russia

                                  Сообщение alibek » 12.07.2004 (Пн) 11:21

                                  Format$(i, «#mm/dd/yyyy#»)

                                  Lasciate ogni speranza, voi ch’entrate.


                                  Leon_
                                  Постоялец
                                  Постоялец
                                  Аватара пользователя

                                   
                                  Сообщения: 333
                                  Зарегистрирован: 19.05.2004 (Ср) 16:31
                                  Откуда: Moscow
                                  • ICQ

                                  Сообщение Leon_ » 12.07.2004 (Пн) 11:24

                                  :? Я использую такую функцию везде, где нужна форматированная для Access дата:

                                  Код: Выделить всё
                                  Public Function fl_ConvToStrDt(ByVal dtDate As Date) As String
                                  'конв "#12-31-1999#"
                                      Dim sDate       As String

                                          sDate = Format$(dtDate, "mm-dd-yyyy hh:mm:ss")
                                      sDate = "#" & sDate & "#"
                                      fl_ConvToStrDt = sDate
                                  End Function

                                  т.е. не в Format сразу вставляю «#», а во второй строке. Может, в этом дело?


                                  MOV
                                  Постоялец
                                  Постоялец
                                   
                                  Сообщения: 414
                                  Зарегистрирован: 13.03.2004 (Сб) 15:13
                                  Откуда: Санкт-Петербург

                                  Сообщение MOV » 12.07.2004 (Пн) 11:56

                                  Мда :?

                                  Ни один вариант не проходит. Эксперементировал по разному.

                                  А если и проходит, то не ловит даты в таблице. Попробую поле даты сделать строковым или как нибудь по другому, чтобы обойти этот косяк.

                                  Спасибо. Моежет вернусь к вопросу позже.


                                  Leon_
                                  Постоялец
                                  Постоялец
                                  Аватара пользователя

                                   
                                  Сообщения: 333
                                  Зарегистрирован: 19.05.2004 (Ср) 16:31
                                  Откуда: Moscow
                                  • ICQ

                                  Сообщение Leon_ » 12.07.2004 (Пн) 12:08

                                  Должно все быть Ок.

                                  1) Попробуй сначала делать не UPDATE запрос, а SELECT, чтобы проверить правильность условий.

                                  2) Проверь, что дата форматируется как MM-DD-YYYY («американский» формат даты), а не DD-MM-YYYY.


                                  Leon_
                                  Постоялец
                                  Постоялец
                                  Аватара пользователя

                                   
                                  Сообщения: 333
                                  Зарегистрирован: 19.05.2004 (Ср) 16:31
                                  Откуда: Moscow
                                  • ICQ

                                  Сообщение Leon_ » 12.07.2004 (Пн) 12:11

                                  Поле даты не надо делать строковым, это изврат и гемор.

                                  Лучше покажи код, что не получился и формат таблицы DailySales.


                                  MOV
                                  Постоялец
                                  Постоялец
                                   
                                  Сообщения: 414
                                  Зарегистрирован: 13.03.2004 (Сб) 15:13
                                  Откуда: Санкт-Петербург

                                  Сообщение MOV » 12.07.2004 (Пн) 13:04

                                  Поле даты не надо делать строковым, это изврат и гемор

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

                                  Лучше покажи код, что не получился и формат таблицы DailySales.

                                  Это код:

                                  Код: Выделить всё
                                  Private Sub Кнопка35_Click()
                                  DoCmd.RunSQL "DELETE * FROM [DailySales]"
                                  Dim dbsTemp As Database, i As Date
                                  Set dbsTemp = CurrentDb
                                  Dim g As String
                                  g = "1"
                                  For i = CDate(Me.fldDateFrom) To CDate(Me.fldDateTo)

                                          ConnectOutput dbsTemp, _
                                                  "dBASETable", _
                                                  "dBase IV;DATABASE=D:ARCHIVSALEARCH", _
                                                  "SALE" & Format(Month(i), "00") & Format(Day(i), "00")

                                  DoCmd.RunSQL "INSERT INTO DailySales ( Data, Store, Amount ) " & _
                                      "SELECT dBASETable.DATE, dBASETable.STORE, Sum(IIf([OPERATION]='P',[DELTASUM],-[DELTASUM])) AS Amount " & _
                                      "FROM dBASETable GROUP BY dBASETable.DATE, dBASETable.STORE"

                                      DoCmd.RunSQL "UPDATE DailySales SET DailySales.dn =" + g + " WHERE DailySales.Dn IS NULL AND DailySales.Data= '" + Format(i, "dd.mm.yyyy") + "'"

                                  dbsTemp.TableDefs.Delete "dBASETable"
                                  g = Str(Val(g) + 1)

                                  ' за тот же день предыдущей недели
                                      ConnectOutput dbsTemp, _
                                                  "dBASETable", _
                                                  "dBase IV;DATABASE=D:ARCHIVSALEARCH", _
                                                  "SALE" & Format(Month(i - 7), "00") & Format(Day(i - 7), "00")

                                  DoCmd.RunSQL "INSERT INTO DailySales ( Data, Store, Amount ) " & _
                                      "SELECT dBASETable.DATE, dBASETable.STORE, Sum(IIf([OPERATION]='P',[DELTASUM],-[DELTASUM])) AS Amount " & _
                                      "FROM dBASETable GROUP BY dBASETable.DATE, dBASETable.STORE"

                                  DoCmd.RunSQL "UPDATE DailySales SET DailySales.dn =" + g + " WHERE DailySales.Dn IS NULL AND DailySales.Data= '" + Format(i - 7, "dd.mm.yyyy") + "'"

                                  dbsTemp.TableDefs.Delete "dBASETable"
                                  g = Str(Val(g) + 1)
                                  Next

                                  DoCmd.OpenReport "rptПродажи", acViewPreview
                                  End Sub

                                  Все-таки преобразовал поле DailySales.Data к текстовому типу так заработало. Но когда добавил еще одно услове (чтобы он не обновлял, то, что уже обновил по второму разу):
                                  это

                                  Код: Выделить всё
                                  WHERE DailySales.Dn IS NULL

                                  он начал обновлять все поле на нули :? :D . мне уже смешно становится такие косяки…

                                  Тип данных в таблице DailySales:

                                  Поле Data — текстовый;

                                  Поле Dn- числовой. (можно было бы и его в текстовый, чтобы апдейт заработал нормально, но это нельзя — по нему потом упорядочиается все)

                                  Последний раз редактировалось MOV 12.07.2004 (Пн) 13:42, всего редактировалось 1 раз.


                                  Leon_
                                  Постоялец
                                  Постоялец
                                  Аватара пользователя

                                   
                                  Сообщения: 333
                                  Зарегистрирован: 19.05.2004 (Ср) 16:31
                                  Откуда: Moscow
                                  • ICQ

                                  Сообщение Leon_ » 12.07.2004 (Пн) 13:39

                                  Думаю

                                  DoCmd.RunSQL «UPDATE DailySales SET DailySales.dn =» + g + » WHERE DailySales.Dn IS NULL AND DailySales.Data= ‘» + Format(i — 7, «MM.DD.yyyy») + «‘»

                                  Надо изменить на

                                  Код: Выделить всё
                                  Dim sDate     as String
                                  sDate = "#" & Format$(i - 7, "MM/DD/yyyy")  & "#"
                                  DoCmd.RunSQL "UPDATE DailySales SET DailySales.dn =" + g + " WHERE DailySales.Dn IS NULL AND DailySales.Data= " & sDate


                                  MOV
                                  Постоялец
                                  Постоялец
                                   
                                  Сообщения: 414
                                  Зарегистрирован: 13.03.2004 (Сб) 15:13
                                  Откуда: Санкт-Петербург

                                  Сообщение MOV » 12.07.2004 (Пн) 13:58

                                  Легче не становится. Да я решил остановиться на текстовом форамте поля даты. Так что теперь первый вопрос отпал — сейчас мне интересно почему он так криво обновляет (все на нули), когда добавляешь в условие

                                  DailySales.Dn IS NULL


                                  MOV
                                  Постоялец
                                  Постоялец
                                   
                                  Сообщения: 414
                                  Зарегистрирован: 13.03.2004 (Сб) 15:13
                                  Откуда: Санкт-Петербург

                                  Сообщение MOV » 12.07.2004 (Пн) 14:19

                                  Все сделал. Ну их нафиг эти UPDATE :shock:

                                  Засунул сразу все в INSERT и короче, и гимора нет, и быстрее, и поле дата не надо к текстовому преобразовывать.

                                  Получилось так:

                                  Вместо

                                  Код: Выделить всё
                                  DoCmd.RunSQL "INSERT INTO DailySales ( Data, Store, Amount ) " & _
                                      "SELECT dBASETable.DATE, dBASETable.STORE, Sum(IIf([OPERATION]='P',[DELTASUM],-[DELTASUM])) AS Amount " & _
                                      "FROM dBASETable GROUP BY dBASETable.DATE, dBASETable.STORE"

                                      DoCmd.RunSQL "UPDATE DailySales SET DailySales.dn =" + g + " WHERE DailySales.Dn IS NULL AND DailySales.Data= '" + Format(i, "dd.mm.yyyy") + "'"

                                  можно ведь сразу записать:

                                  Код: Выделить всё
                                  DoCmd.RunSQL "INSERT INTO DailySales ( Data, Store, Amount, [b]dn[/b] ) " & _
                                      "SELECT dBASETable.DATE, dBASETable.STORE, Sum(IIf([OPERATION]='P',[DELTASUM],-[DELTASUM])) AS Amount, " [b]+ g + [/b]_
                                      " FROM dBASETable GROUP BY dBASETable.DATE, dBASETable.STORE"

                                  И чего сразу не допер 8) , единственное смущает, что так и не понятно как по дате выбирать (если она не строкового типа а тип даты имеет).

                                  Спасибо всем. Пожалуй, все. Тему можно закрыть.



                                  Вернуться в VBA

                                  Кто сейчас на конференции

                                  Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

                                  0 0 голоса
                                  Рейтинг статьи
                                  Подписаться
                                  Уведомить о
                                  guest

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

                                  А вот еще интересные материалы:

                                • Яшка сломя голову остановился исправьте ошибки
                                • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
                                • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
                                • Delphi ошибка unsatisfied forward or external declaration
                                • Delphi ошибка stack overflow