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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
procedure TSpravka2.Button7Click(Sender: TObject);
 
var a,b: tdate;
begin
DM_B.ADOQuery_PrCr.SQL.Clear;
DM_B.ADOQuery_PrCr.SQL.Add('SELECT * ');
DM_B.ADOQuery_PrCr.SQL.Add('FROM Predostavlennie_crediti');
DM_B.ADOQuery_PrCr.SQL.Add('Where Data_predostavleniya BETWEEN :a');
DM_B.ADOQuery_PrCr.SQL.Add('and:b');
DM_B.ADOQuery_PrCr.Parameters.ParamByName('a').Value:=datetostr(DateTimePicker1.date);
DM_B.ADOQuery_PrCr.Parameters.ParamByName('b').Value:=datetostr(DateTimePicker2.date);
DM_B.ADOQuery_PrCr.Active:=True;
with DM_B.Q1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT Clienti.Familiya,clienti.imya,clienti.otchestvo,Predostavlennie_crediti.symma,Predostavlennie_crediti.data_predostavleniya,Predostavlennie_crediti.data_zakritiya');
SQL.Add('FROM clienti,Predostavlennie_crediti');
SQL.Add('WHERE Predostavlennie_crediti.id_kl=clienti.id_kl');
Open;
end;
end;
 
procedure TSpravka2.Button10Click(Sender: TObject);
var z:real;
a,a1,b,g,h,k,j,y,x1,y1,ve_1,ve_2,ve_3,ve_4,a0,dt:string; v,x:real;
XL, Cell1, Cell2, ArrayData: Variant;
RowCount: integer;
BeginCol, BeginRow,i,ColCount:byte;
ob_1,ob_2,Sheet,BigRange: OLEVariant;
//dt:TDate;
 
begin
BeginCol := 1;
BeginRow := 2;
RowCount := DM_B.Q1.RecordCount+2; //Количество записей в таблице, которую будем передавать в Excel
ColCount := 4; //Количество столбцов
XL := CreateOleObject('Excel.Application'); //создаем Excel
XL.Application.EnableEvents := false; // Отключаем реакцию Excel на события (позволяет ускорить вывод информации)
XL.WorkBooks.Add; // Добавляем книгу
XL.Range['A1:D1'].Select;
XL.Selection.MergeCells:=True;
XL.Range['A2:D2'].Select;
XL.Selection.MergeCells:=True;
 
XL.Rows.Rows[2].HorizontalAlignment := 3;//Устанавливаем горизонтальное выравнивание по центру
XL.Rows.Rows[2].VerticalAlignment := 2;//Устанавливаем вертикальное выравнивание по центру
 
XL.Rows.Rows[3].HorizontalAlignment := 3;//Устанавливаем горизонтальное выравнивание по центру
XL.Rows.Rows[3].VerticalAlignment := 2;//Устанавливаем вертикальное выравнивание по центру
 
XL.Rows.Rows[4].HorizontalAlignment := 3;//Устанавливаем горизонтальное выравнивание по центру
XL.Rows.Rows[4].VerticalAlignment := 2;//Устанавливаем вертикальное выравнивание по центру
 
XL.Rows.Rows[5].HorizontalAlignment := 3;//Устанавливаем горизонтальное выравнивание по центру
XL.Rows.Rows[5].VerticalAlignment := 2;//Устанавливаем вертикальное выравнивание по центру
 
XL.Rows.Rows[6].HorizontalAlignment := 3;//Устанавливаем горизонтальное выравнивание по центру
XL.Rows.Rows[6].VerticalAlignment := 2;//Устанавливаем вертикальное выравнивание по центру
 
XL.Rows.Rows[1].HorizontalAlignment := 3;//Устанавливаем горизонтальное выравнивание по центру
XL.Rows.Rows[1].VerticalAlignment := 2;//Устанавливаем вертикальное выравнивание по центру
XL.Rows.Rows[1].Font.Bold:=true; //Делаем жирный шрифт в шапке таблицы
XL.Rows.Rows[1].Font.Size:=16; //Устанавливаем размер шрифта
XL.Cells[1,1]:='Справка №___________________';
 
XL.Columns.Columns[1].ColumnWidth:=20;//устанавливаем ширину столбцов
XL.Columns.Columns[2].ColumnWidth:=20;
XL.Columns.Columns[3].ColumnWidth:=20;
XL.Columns.Columns[4].ColumnWidth:=20;
 
Xl.Range[Xl.Cells[RowCount+2,1], Xl.Cells[RowCount+2, 4]].Select;
XL.Selection.MergeCells:=True;
Xl.Range[Xl.Cells[RowCount+3,1], Xl.Cells[RowCount+3, 4]].Select;
XL.Selection.MergeCells:=True;
 
ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant); // задаем вариантный массив, который будем заполнять данными из DataModule2.Q1
 
DM_B.q1.First;//заполняем массив значениями из DataModule2
 
for i := 3 to RowCount do
begin
ArrayData[i,1] := DM_B.Q1['Familiya'];
ArrayData[i,2] := DM_B.q1['imya'];
ArrayData[i,3] := DM_B.Q1['otchestvo'];
ArrayData[i,4] := DM_B.Q1['symma'];
 
DM_B.Q1.Next;
end;
ArrayData[1,1]:='Банк предоставил кредит следующим лицам за период с ' + DateToStr(DateTimePicker1.Date) + ' по ' + DateToStr(DateTimePicker2.Date);
ArrayData[2,1]:='Фамилия';
ArrayData[2,2]:='Имя';
ArrayData[2,3]:='Отчество';
ArrayData[2,4]:='Cумма';
XL.Cells[RowCount+2,1]:='Глава отдела кредитования:___________________________';
XL.Cells[RowCount+3,1]:='Зам. главы отдела кредитования:______________________';
XL.Cells[RowCount+4,1]:='Дата предоставления справки:______________________';
 
Cell1 := XL.Cells[BeginRow-1, BeginCol]; // левая верхняя ячейка области в которую будем выводить данные
Cell2 := XL.Cells[BeginRow+RowCount-1, BeginCol + ColCount-1];//правая нижняя ячейка области куда будем выводить данные
XL.Range[XL.Cells[BeginRow, BeginCol], Cell2].Value := ArrayData; //заполняем книгу нашими данными
XL.Range[Cell1, Cell2].Borders.LineStyle := 1;
XL.Visible := true;//делаем Excel видимым   }
end;

 
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,0371 ]   [ 16 queries used ]   [ Generated: 21.06.23, 19:18 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, в случае если делитель — константное выражение.

                                  У меня проблема с моей операцией mysql.

                                  в основном код отлично работает при вставке, но как только переменная addnew= false и она переключается на обновление, она дает мне ошибку, которую я не могу решить.

                                  Код:

                                  procedure Tadddomain.BitBtn2Click(Sender: TObject);
                                  Var
                                  PrevSql:String;
                                  ID:String;
                                  begin
                                  With Datalive.domains Do
                                   Begin
                                    id:=fieldbyname('id').AsString;
                                    Active:=False;
                                    prevsql:=sql.Text;
                                    Sql.Clear;
                                    Params.Clear;
                                    Addparam(Datalive.domains,'client_id',ftinteger,datalive.clients.FieldByName('id').AsString);
                                    Addparam(Datalive.domains,'domain_name',ftString,Edit1.Text);
                                    Addparam(Datalive.domains,'register_date',ftdate,DateTimePicker1.Date);
                                    Addparam(Datalive.domains,'registered_until',ftdate,DateTimePicker2.Date);
                                    if addnew=true then
                                      Sql.Text:='Insert into domains (client_id,domain_name,register_date,registered_until) VALUES (:client_id,:domain_name,:register_date,:registered_until)'
                                    Else if addnew=False then
                                      Sql.Text:='Update domains (domain_name=:domain_name, register_date=:register_date, registered_until=:registered_until) where id='''+id+'''';
                                    Showmessage(sql.text);
                                    execsql;
                                    sleep(100);
                                    sql.Text:=prevsql;
                                    active:=True;
                                    done:=True;
                                    adddomain.Close;
                                   End;
                                  end;
                                  

                                  Ошибка:

                                  Project project1.exe повышает класс исключений EZSQLException с сообщением «Ошибка SQL: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера mysql, для правильного синтаксиса для использования рядом с ‘(domain_name =’ asd ‘, register_date =’ 2014-11-09 ‘, registered_until =’ 2015-11-09 ‘) w’ в строке 1 «.

                                  Любая помощь была бы замечательной, я искал и искал и не мог найти ошибку.


                                  Обновить:

                                  Я изменил код редактирования, как предложено ниже, и теперь никаких ошибок не видно, что так было. Но и ничего не происходит. Он не редактирует запись.

                                  if addnew=true then
                                      Sql.Text:='Insert into domains (client_id,domain_name,register_date,registered_until) VALUES (:client_id,:domain_name,:register_date,:registered_until)'
                                    Else if addnew=False then
                                     Begin
                                      sql.Add('Update domains');
                                      sql.Add('set domain_name=:domain_name,');
                                      sql.Add('register_date=:register_date,');
                                      sql.Add('registered_until=:registered_until');
                                      sql.Add('where id=:id');
                                     End;
                                  

                                • Delphi ошибка unsatisfied forward or external declaration
                                • Delphi ошибка stack overflow
                                • Delphi ошибка list index out of bounds 0
                                • Delphi ошибка for loop control variable must be simple local variable
                                • Delphi ошибка e2033 types of actual and formal var parameters must be identical