|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Перенос записи из одной таблицы в другую
Здравствуйте, курсовая, суть такова:
База, в базе две таблицы, идентичные друг другу. Форма, с поиском данных по SN номеру определенной вещи по событию onchange Edit-a. А также на форме два DBGrid-a, отображающие первую и вторую таблицы соответственно. Но теперь проблема, никак не могу найти нужную литературу, или источник, чтобы построить запрос на перенос найденной по значению из Edit1 записи из одной таблицы в другую. В sql не силен. Прошу помочь Код:
procedure TfMain.Edit1Change(Sender: TObject); begin fdm.ADOQuery1.SQL.Clear; fdm.ADOQuery1.SQL.Add('SELECT * FROM device WHERE sn LIKE '''+Edit1.Text+''''); fdm.ADOQuery1.SQL.Add('INSERT INTO devicerev SELECT * FROM device WHERE sn LIKE '''+Edit1.Text+''''); fdm.ADOQuery1.Active:=True; fdm.ADOQuery2.SQL.Clear; fdm.ADOQuery2.SQL.Add('SELECT * FROM devicerev'); fdm.ADOQuery2.Active:=True; end; В чем синтаксическая ошибка INSERT-a? Последний раз редактировалось Admin, 05.12.2012 в 09:24. |
#2
|
||||
|
||||
Цитата:
Цитата:
Хотя нет. Посмотрел в справке, так можно только для создания новых таблиц. Если же нужно добавить в уже существующую таблицу, то остаётся "INSERT INTO". Синтаксических ошибок в твоём коде я не вижу, единственное только убери эту строку: Код:
fdm.ADOQuery1.SQL.Add('SELECT * FROM device WHERE sn LIKE '''+Edit1.Text+''''); Последний раз редактировалось poli-smen, 05.12.2012 в 07:44. |
#3
|
|||
|
|||
1
|
#4
|
||||
|
||||
Цитата:
Верни назад INSERT INTO и убери строку: Цитата:
|
#5
|
|||
|
|||
такая ошибка при таком коде: Код:
procedure TfMain.Edit1Change(Sender: TObject); begin fdm.ADOQuery1.SQL.Clear; fdm.ADOQuery1.SQL.Add('INSERT INTO devicerev SELECT * FROM device WHERE sn LIKE '''+Edit1.Text+''''); fdm.ADOQuery1.Active:=True; fdm.ADOQuery2.SQL.Clear; fdm.ADOQuery2.SQL.Add('SELECT * FROM devicerev'); fdm.ADOQuery2.Active:=True; end; Почему то еще указатель ошибки показывает на Код:
fdm.ADOQuery2.SQL.Clear; |
#6
|
||||
|
||||
А у тебя есть уникальное автоинкрементное поле в таблицах? Если есть (а оно в правильных таблицах должно быть) то в запросе вместо звёздочки перечисли через запятую поля кроме автоинкрементного.
|
#7
|
|||
|
|||
Сделал как Вы сказали, но теперь жалуется на синтаксис INSERT-a
Код:
procedure TfMain.Edit1Change(Sender: TObject); begin fdm.ADOQuery1.SQL.Clear; fdm.ADOQuery1.SQL.Add('INSERT INTO devicerev(id_type, model, sn, in, data_schet, number_schet, price, date_prihod,date_ystanovki, id_personal, garant_do, olduser)'); fdm.ADOQuery1.SQL.Add('SELECT id_type, model, sn, in, data_schet, number_schet, price, date_prihod,date_ystanovki, id_personal, garant_do, olduser FROM device WHERE sn LIKE '''+Edit1.Text+''''); fdm.ADOQuery1.Active:=True; fdm.ADOQuery2.SQL.Clear; fdm.ADOQuery2.SQL.Add('SELECT * FROM devicerev'); fdm.ADOQuery2.Active:=True; end; |
#8
|
||||
|
||||
insert into TABLENAME(fieldnames) values(fieldvalues)
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#9
|
|||
|
|||
Цитата:
но ведь я также и сделал, за исключением того что не указал параметр values в виду того что не могу знать их заранее. Я произвожу поиск по записям и добавляю найденные по определенному sn значения. Код:
fdm.ADOQuery1.SQL.Add('INSERT INTO devicerev(id_type, model, sn, in, data_schet, number_schet, price, date_prihod,date_ystanovki, id_personal, garant_do, olduser)'); fdm.ADOQuery1.SQL.Add('SELECT id_type, model, sn, in, data_schet, number_schet, price, date_prihod,date_ystanovki, id_personal, garant_do, olduser FROM device WHERE sn LIKE '''+Edit1.Text+''''); это одна строка, я разделил на две в коде, потому что он начал жаловаться на то что строка превысила 255 символов. Последний раз редактировалось masterhex, 05.12.2012 в 08:44. |
#10
|
||||
|
||||
Цитата:
Вот один из примеров из справки по MSSQL: PHP код:
|
#11
|
|||
|
|||
Цитата:
|
#12
|
||||
|
||||
Цитата:
Попробуй в условии уточнить из какой таблицы поле. Т.е. вместо: PHP код:
PHP код:
PHP код:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
masterhex (05.12.2012)
|
#13
|
|||
|
|||
Все перепробовал, уже не знаю что делать, вопрос остается в силе
Вот последний вариант: Код:
procedure TfMain.Edit1Change(Sender: TObject); begin fdm.ADOQuery1.SQL.Clear; fdm.ADOQuery1.SQL.Add('INSERT INTO devicerev(id_type, model, sn, in, data_schet, number_schet, price, date_prihod,date_ystanovki, id_personal, garant_do, olduser)'); fdm.ADOQuery1.SQL.Add('SELECT d.id_type, d.model, d.sn, d.in, d.data_schet, d.number_schet, d.price, d.date_prihod,date_ystanovki, d.id_personal, d.garant_do, d.olduser FROM device AS d WHERE d.sn LIKE '''+Edit1.Text+''''); fdm.ADOQuery1.Active:=True; fdm.ADOQuery2.SQL.Clear; fdm.ADOQuery2.SQL.Add('SELECT * FROM devicerev'); fdm.ADOQuery2.Active:=True; end; среди перечисленных полей нет автоинкремента |
#14
|
|||
|
|||
Разобрался, для тех кто столкнулся с такой же задачей :
Код:
procedure TfMain.Edit1Change(Sender: TObject); begin try fdm.ADOQuery1.SQL.Clear; fdm.ADOQuery1.SQL.Add('INSERT INTO devicerev SELECT * FROM device AS d WHERE d.sn LIKE '''+Edit1.Text+''''); fdm.ADOQuery1.ExecSQL; fdm.ADOQuery2.SQL.Clear; fdm.ADOQuery2.SQL.Add('SELECT * FROM devicerev'); fdm.ADOQuery2.Active:=True; except on e:Exception do end; end; Дело в том что для ВВОДА данных (INSERT) нельзя указывать - Код:
fdm.ADOQuery1.Active:=True; а надо именно исполнение - Код:
fdm.ADOQuery1.ExecSQL; Спасибо всем за внимание! |
#15
|
||||
|
||||
Цитата:
|