Поиск:

Ответ в темуСоздание новой темы Создание опроса
> добавление записей через AdoQuery, пропущен символ (;) в конце инструкции 
V
    Опции темы
neweraser
Дата 1.12.2009, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем привет
Код

  DataModule1.ADOQuery.Close;
  DataModule1.ADOQuery.SQL.Clear;
  for i:= 0 to ObjGuardList2.Count - 1 do
  DataModule1.ADOQuery.SQL.Add('Insert into ' + TableName + ' (EmplName) Values("' + ObjGuardList2.Items[i] + '")');
  DataModule1.ADOQuery.SQL.Add('Insert into ' + TableName + ' (GenDir) Values("' + Datamodule1.RequisTable.FieldByName('GenDir').AsString + '")');
  DataModule1.ADOQuery.SQL.Add('Insert into ' + TableName + ' (FullName) Values("' + Datamodule1.RequisTable.FieldByName('FullName').AsString + '")');
  DataModule1.ADOQuery.SQL.Add('Insert into ' + TableName + ' (ObjName) Values("' + ObjChoose.DataField + '")');
  DataModule1.ADOQuery.ExecSQL;

добавляю много строк и выдается такая ошибка
Цитата

пропущен символ (;) в конце инструкции SQL

пробовал так
Код

DataModule1.ADOQuery.Close;
  DataModule1.ADOQuery.SQL.Clear;
  for i:= 0 to ObjGuardList2.Count - 1 do
  begin
    DataModule1.ADOQuery.SQL.Clear;
    DataModule1.ADOQuery.SQL.Add('Insert into ' + TableName + ' (EmplName) Values("' + ObjGuardList2.Items[i] + '")');
    DataModule1.ADOQuery.ExecSQL;
  end;
  DataModule1.ADOQuery.SQL.Clear;
  DataModule1.ADOQuery.SQL.Add('Insert into ' + TableName + ' (GenDir) Values("' + Datamodule1.RequisTable.FieldByName('GenDir').AsString + '")');
  DataModule1.ADOQuery.ExecSQL;
  DataModule1.ADOQuery.SQL.Clear;
  DataModule1.ADOQuery.SQL.Add('Insert into ' + TableName + ' (FullName) Values("' + Datamodule1.RequisTable.FieldByName('FullName').AsString + '")');
  DataModule1.ADOQuery.ExecSQL;
  DataModule1.ADOQuery.SQL.Clear;
  DataModule1.ADOQuery.SQL.Add('Insert into ' + TableName + ' (ObjName) Values("' + ObjChoose.DataField + '")');
  DataModule1.ADOQuery.ExecSQL;

добавляет но криво и в середине вываливается ошибка
и даже после каждой 
 DataModule1.ADOQuery.SQL.Clear; (после цикла) добавлял
DataModule1.ADOQuery.First;  smile 
в сети ничего кроме
Цитата

Access не поддерживает конструкцию оператора INSERT для множественной вставки.
Для множественной вставки используйте цикл, где на каждой итерации производите вставку 1 строки
Но, используя Delphi можно обойтись гораздо проще, не использовать оператор INSERT SQL..
а просто InsertRecord
например..

Код:
var i:integer;
begin
  for i := 0 to Memo1.Lines.Count-1 do
   ADOTable1.InsertRecord([Memo1.Lines[i]]);
end;

больше ничего не нашел, может есть какой-то еще вариант решения проблемы? не хочется ADOTable использовать, и так на форме куча компонентов



--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Данкинг
Дата 1.12.2009, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(neweraser @  1.12.2009,  01:22 Найти цитируемый пост)
добавляет но криво и в середине вываливается ошибка

Почему криво, какая ошибка? Вообще перед каждым .Clear делай .Close 
Код

DataModule1.ADOQuery.Close;
DataModule1.ADOQuery.SQL.Clear;


Добавлено через 41 секунду
Цитата(neweraser @  1.12.2009,  01:22 Найти цитируемый пост)
DataModule1.ADOQuery.First; 

Это явно ни при чём. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Teleport
Дата 1.12.2009, 03:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

пропущен символ (;) в конце инструкции SQL


В тексте SQL-запроса в конце перед самой ' нужно ставить ;



Код

ADOQ1.Active:= false;
ADOQ1.SQL.Clear;
ADOQ1.SQL.Add('INSERT INTO my_table1 VALUES("' +my_str_value1+'","' + my_str_value2+'", "' + my_str_value3 + '","' + my_str_value4 + '");');
ADOQ1.ExecSQL;



Видишь - у меня ; перед '  smile 
Немного не по теме - ты всегда пишешь на каждой строке  DataModule1.ADOQuery? 
with -  вообще не пользуешься? Это я на всякий случай. 3-4 строчки еще без него, а более - уже с ним, как-то удобнее.


Это сообщение отредактировал(а) Teleport - 1.12.2009, 03:17


--------------------
user posted image
user posted image 
PM MAIL   Вверх
neweraser
Дата 1.12.2009, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Данкинг @  1.12.2009,  01:42 Найти цитируемый пост)
какая ошибка?

он с ObjguardList2 добавляет как нужно, потом добавляет запись в 3-4 строку (в зависимости от ObjguardList2.Count), хотя мне надо в 1-ю строку в поле 'GenDir',  а потом ошибка (какая не помню (я не дома) smile
Код

 DataModule1.ADOQuery.SQL.Add('Insert into ' + TableName + ' (GenDir) Values("' + Datamodule1.RequisTable.FieldByName('GenDir').AsString + '")');

Цитата(Teleport @  1.12.2009,  03:07 Найти цитируемый пост)
with -  вообще не пользуешься?

пользовался, но потом посчитал это некрасивым  smile , т.к. у меня сначала with, потом if условия, goto и др... а потом опять добавление  smile могу код скинуть  smile только вечером

Цитата(Teleport @  1.12.2009,  03:07 Найти цитируемый пост)
В тексте SQL-запроса в конце перед самой ' нужно ставить ;

я пробовал, все равно та же ошибка :((


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Frees
Дата 1.12.2009, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

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



может 
поле Datamodule1.RequisTable.FieldByName('FullName').AsString или другие поля имеют значение null? asstring тогда вернет пустоту и запрос у тебя криво соберется



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Данкинг
Дата 1.12.2009, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(neweraser @  1.12.2009,  10:10 Найти цитируемый пост)
потом добавляет запись в 3-4 строку (в зависимости от ObjguardList2.Count), хотя мне надо в 1-ю строку в поле 'GenDir',  

Если надо вставлять в конкретную строку, то используется не Insert, а Update с условием Where. smile 
И вообще, что значит "третья" строка? Конечно, в трёх записях не запутаешься, но когда добавишь 1000-ю запись, далеко не факт, что в таблице она и физически будет именно 1000-й. smile 

Это сообщение отредактировал(а) Данкинг - 1.12.2009, 12:19


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
neweraser
Дата 1.12.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Frees @  1.12.2009,  10:19 Найти цитируемый пост)
поле Datamodule1.RequisTable.FieldByName('FullName').AsString или другие поля имеют значение null?

может да, я не знаю к какой строке он конкретно обращается, мне нужна первая, хотя больше их там и не должно быть, в той таблице всегда одна строка
Цитата(Данкинг @  1.12.2009,  12:01 Найти цитируемый пост)
Update с условием Where

как это?


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Данкинг
Дата 1.12.2009, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(neweraser @  1.12.2009,  18:56 Найти цитируемый пост)
как это? 

При наличии ключевого (к примеру) поля:
Код

update TABLE set pole1='3' where id=3

В данном случае в pole1 будет занесено значение "3" для тех записей, у которых поле id имеет значение 3.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Teleport
Дата 1.12.2009, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2 neweraser - главное определиться - тебе нужно ИЗМЕНИТЬ (ОБНОВИТЬ) значения в существующей записи (строке) или же ДОБАВИТЬ НОВУЮ запись (строку) в таблицу.


--------------------
user posted image
user posted image 
PM MAIL   Вверх
neweraser
Дата 1.12.2009, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



все равно не доходит до меня :(
ipicture не грузится, поэтому так присоеденил на всякий случай.
в поле EmplName у меня добавляется несколько записей
в остальные по одной записи из лругой таблицы
изначально код выглядел вот так 
Код

DataModule1.ADOQuery.Close;
  DataModule1.ADOQuery.SQL.Clear;
  for i:= 0 to ObjGuardList2.Count - 1 do
  DataModule1.ADOQuery.SQL.Add('Insert into ' + TableName + ' (EmplName) Values("' + ObjGuardList2.Items[i] + '")');
  DataModule1.ADOQuery.SQL.Add('Insert into ' + TableName + ' (GenDir) Values("' + Datamodule1.RequisTable.FieldByName('GenDir').AsString + '")');
  DataModule1.ADOQuery.SQL.Add('Insert into ' + TableName + ' (FullName) Values("' + Datamodule1.RequisTable.FieldByName('FullName').AsString + '")');
  DataModule1.ADOQuery.SQL.Add('Insert into ' + TableName + ' (ObjName) Values("' + ObjChoose.DataField + '");');
  DataModule1.ADOQuery.ExecSQL;

 smile 

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  123.jpg 15,44 Kb


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
neweraser
Дата 1.12.2009, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Teleport, я добавляю новые записи в только что созданную таблицу

Присоединённый файл ( Кол-во скачиваний: 16 )
Присоединённый файл  123.jpg 15,44 Kb


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Данкинг
Дата 1.12.2009, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



neweraser, хочешь сказать, этот код заполняет первую строку таблицы? smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
neweraser
Дата 1.12.2009, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



нееет, он должен заполнять только ЕмплНаме, допустим 4 поля сверху, остальные 3 поля только на первой строке, а остальные поля потом будут заполняться

Добавлено через 1 минуту и 25 секунд
 smile фигня какая-то, вирус? английские буквы в русские переключаются, делпхи  smile  (было написано на англ. раскладке)


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Данкинг
Дата 1.12.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(neweraser @  1.12.2009,  19:44 Найти цитируемый пост)
остальные 3 поля только на первой строке, а остальные поля потом будут заполняться

Вот для этого каждая строка и должна иметь уникальный номер (например, ID). Вначале заполняем 4 строки ЕмплНаме с помощью insert, а потом уже - 3 столбца первой строки с помощью update... where ID=1... smile 

Цитата(neweraser @  1.12.2009,  19:44 Найти цитируемый пост)
фигня какая-то, вирус? английские буквы в русские переключаются, делпхи 

Это не вирус, это ПунтоСвитчер. smile


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
neweraser
Дата 1.12.2009, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а можно без ид? например where ('поле GenDir - первая строка') smile
пс это не пунто свичер, а что-то с форумом или моей оперой smile

Добавлено через 1 минуту и 40 секунд
т.к. в блокноте нормально все )) скопировал - вставил в окошко сообщения - вроде нормально


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


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

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

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


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

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


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

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


 




[ Время генерации скрипта: 0.0602 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.