61 / 51 / 25
Регистрация: 17.12.2013
Сообщений: 247

Ошибка синтаксиса в инструкции INSERT INTO

01.09.2014, 15:16. Показов 2682. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Использую Indy. Задача у меня такая, клиентская часть программы высылает на сервер в текстовом виде информацию о компьютере. Сервер проверяет наличие записи о данном компьютере в базе Access и делает новую запись, если ее нет. До того как начал прикручивать базу данных все работало, данные сервер получает. Проверка на наличие записи о компе идет по его имени. Проверка тоже проходит отлично (проверял опытным путем). Добавление записи пытаюсь сделать с помощью ADOCommand. На методе Execute выходит ошибка (скрин во вложении).



Вот код обработчика команды на сервере:

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
procedure TForm_Server.ServerTIdCommandHandler_InfoCommand(
  ASender: TIdCommand);
var
  C, I: Integer;
begin
  Memo_Log.Lines.Add('Получена информация о клиенте.');
  Memo_Log.Lines.Add('Компьютер');
  Memo_Log.Lines.Add('  Процессор: ' + ASender.Params.Strings[3]);
  Memo_Log.Lines.Add('  Оперативная память: ' + ASender.Params.Strings[5] + 'Mb');
  Memo_Log.Lines.Add('Сеть');
  Memo_Log.Lines.Add('  IP адрес: ' + ASender.Params.Strings[0]);
  Memo_Log.Lines.Add('  MAC адрес: ' + ASender.Params.Strings[1]);
  Memo_Log.Lines.Add('  Имя компьютера: ' + ASender.Params.Strings[2]);
  Memo_Log.Lines.Add('Имя пользователя: ' + ASender.Params.Strings[4]);
  Memo_Log.Lines.Add('Подключенные принтера:');
  C := StrToInt(ASender.Params.Strings[6]);
  if C = 0 then begin
    Memo_Log.Lines.Add(' Нет.');
  end else begin
    for I := 0 to C - 1 do begin
      Memo_Log.Lines.Add('  ' + ASender.Params.Strings[7 + I]);
    end;
  end;
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.Add('SELECT * FROM Computers WHERE Computers.Nm=''' +
    ASender.Params.Strings[2] + '''');
  ADOQuery.Open;
  if ADOQuery.RecordCount = 0 then begin
    Memo_Log.Lines.Add('Запись о данном компьютере не найдена.');
    Memo_Log.Lines.Add('Создание новой записи.');
    ADOQuery.Close;
    ADOCommand1.CommandText := 'INSERT INTO Computers (Nm, Proc, RAM, IP, MAC, Usr, Dt) ' +
      'VALUES(:pNm, :pProc, :pRAM, :pIP, :pMAC, :pUsr, :pDt)';
    ADOCommand1.Parameters.ParamByName('pNm').Value := ASender.Params.Strings[2];
    ADOCommand1.Parameters.ParamByName('pProc').Value := ASender.Params.Strings[3];
    ADOCommand1.Parameters.ParamByName('pRAM').Value := StrToInt(ASender.Params.Strings[5]);
    ADOCommand1.Parameters.ParamByName('pIP').Value := ASender.Params.Strings[0];
    ADOCommand1.Parameters.ParamByName('pMAC').Value := ASender.Params.Strings[1];
    ADOCommand1.Parameters.ParamByName('pUsr').Value := ASender.Params.Strings[4];
    ADOCommand1.Parameters.ParamByName('pDt').Value := Now;
    ADOCommand1.Execute; // Тут возникает данная ошибка
  end else begin
    Memo_Log.Lines.Add('Запись о данном компьютере уже есть в базе данных.');
    ADOQuery.Close;
  end;
end;
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.09.2014, 15:16
Ответы с готовыми решениями:

Ошибка синтаксиса в инструкции INSERT TO
begin datamodule2.ADOQuery3.SQL.Clear; datamodule2.ADOQuery3.SQL.Text:='insert into Выписка (Регистрационный номер, ФИО, Адрес, Дата...

Ошибка синтаксиса в инструкции INSERT INTO
procedure TForm16.Button1Click(Sender: TObject); var s:String; begin begin s:='INSERT INTO Заказы (, , , ,, ,) VALUES...

Ошибка синтаксиса в инструкции insert into
Добрый вечер! Пишу код, который должен добавлять данные в базу данных MSAccess. Вроде бы все должно работать но вылазит ошибка...

9
61 / 51 / 25
Регистрация: 17.12.2013
Сообщений: 247
01.09.2014, 15:22  [ТС]
При том пытался формировать CommandText полностью без использования параметров. Вылетает та же ошибка. Добавляю CommandText в Watch. Ставлю брейкпойнт на Execute. Копирую содержимое непосредственно в ацесс, запрос проходит успешно. А в программе выдает ошибку.
0
Native x86
Эксперт Hardware
 Аватар для quwy
6856 / 3789 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
01.09.2014, 15:24
Трудно сказать, но я бы во-первых отказался от .Value при присвоении значений параметрам и использовал вместо этого типизированные свойства типа .AsInteger, .AsString и, особенно это касается последнего параметра, .AsDateTime. Да, и вместо ADOCommand попробуйте ADOQuery.
0
61 / 51 / 25
Регистрация: 17.12.2013
Сообщений: 247
01.09.2014, 15:31  [ТС]
У меня Delphi 7. Среди свойств ParamByName нет AsString и остальных. С Query сейчас попробую. Отпишу.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
01.09.2014, 15:34
Еще с кодировкой могут быть проблемы. Русские символы в запросе есть?
0
61 / 51 / 25
Регистрация: 17.12.2013
Сообщений: 247
01.09.2014, 15:45  [ТС]
У ADOQuery тоже параметры принимаются только через Value. Та же ошибка.

Добавлено через 58 секунд
Русских символов нет, передаются данные собранные программным путем с клиентского компа, по коду видно что это за данные

Добавлено через 8 минут
Сейчас даже попробовал сконфигурировать параметры в визуальном редакторе на стадии разработки. Назначить им имена и типы - та же ошибка
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
01.09.2014, 15:48
Лучший ответ Сообщение было отмечено KMSNasgool как решение

Решение

А если попробовать так?
Delphi
1
2
ADOCommand1.CommandText := 'INSERT INTO [Computers] ([Nm], [Proc], [RAM], [IP], [MAC], [Usr], [Dt]) ' +
      'VALUES(:pNm, :pProc, :pRAM, :pIP, :pMAC, :pUsr, :pDt)';
Хотя вроде нет никаких зарезервированных слов, но кто его знает..
2
61 / 51 / 25
Регистрация: 17.12.2013
Сообщений: 247
01.09.2014, 15:50  [ТС]
Есть русские символы в названии одного из принтеров =)
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
01.09.2014, 15:50
А локально на одном компе тоже ошибку выдает?
И интересно увидеть запрос, получающийся в CommandText в Watch (перед выполнением Execute).
1
61 / 51 / 25
Регистрация: 17.12.2013
Сообщений: 247
01.09.2014, 15:57  [ТС]
FIL, огромное Вам спасибо! Квадратные скобки вокруг названий полей помогли. Все отлично заработало.

Добавлено через 32 секунды
KOPOJI, Извиняюсь, это я к Вам обращялся
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.09.2014, 15:57
Помогаю со студенческими работами здесь

Ошибка синтаксиса в инструкции INSERT INTO
Скажите, пожалуйста, где ошибка. begin if (Edit1.Text <>'') and (Edit2.Text<>'') and (Combobox1.Text<>'') then begin With...

Ошибка синтаксиса в инструкции insert into
procedure TForm3.sButton2Click(Sender: TObject); begin if (sedit1.text <> '') and (sedit2.text <> '') and (sedit3.text <> '') then ...

Ошибка синтаксиса в инструкции Update
Название таблицы и полей правильные 100%. dm.r_bon.SQL.Text:= ' Update user set = '+inttostr(kol_vo)+' where id_user = '+inttostr(us);...

Ошибка синтаксиса в инструкции UPDATE
Если Brutto или Netto ввести меньше 100, выдаёт ошибку. Помогите разобраться, что не так? VES и CENA_BRUTTO_BL глобальные...

Ошибка синтаксиса в инструкции UPDATE
ADOQuery3.SQL.Text:='UPDATE Таблица1 SET () WHERE id_formula = '+Ttext1+' AND id_student ='+ nameText1+' Values(:count)'; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru