![]() |
|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
![]() |
#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
|
|||
|
|||
![]() Разобрался, для тех кто столкнулся с такой же задачей :
Код:
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; Спасибо всем за внимание! ![]() |
#8
|
||||
|
||||
![]() Цитата:
![]() |
#9
|
|||
|
|||
![]() Еще раз здрасьте! решил запилить, условие при котором вообще должно выполняться вся процедура.
Т.е. если мы уже вбивали номер предмета, и он внесся в таблицу devicerev, и мы еще раз сканируем - должно вывести сообщение что мы уже сканировали. Но он выводит сообщение при любом действии) Код:
procedure TfMain.Edit1Change(Sender: TObject); begin fdm.ADOQuery3.SQL.Clear; fdm.ADOQuery3.SQL.Text:=('SELECT * FROM devicerev WHERE sn = '''+Edit1.Text+''''); fdm.ADOQuery3.Active:=True; s:=0; s:= fdm.ADOQuery3.RecordCount; if s>0 then begin fdm.ADOQuery1.SQL.Clear; fdm.ADOQuery1.SQL.Add('INSERT INTO devicerev SELECT * FROM device AS d WHERE d.sn = '''+Edit1.Text+''''); fdm.ADOQuery1.ExecSQL; fdm.ADOQuery2.SQL.Clear; fdm.ADOQuery2.SQL.Add('SELECT * FROM devicerev'); fdm.ADOQuery2.Active:=True; end else ShowMessage('Вы уже это сканировали'); end; Подскажите в каком месте я облажался с построением условия? Извините, разобрался : вместо Код:
if s>0 then надо Код:
if s=0 then Последний раз редактировалось masterhex, 05.12.2012 в 14:55. |
#10
|
|||
|
|||
![]() Здравствуйте!
Попробовала сделать как вы перенос строки в другую таблицу и ничего вообще!!! У меня две таблицы Contain u Containers u Bay. Есть поле Edit. Принцип такой. Это погрузка бея контейнерного судна Беру с таблицы Contain один контейнер и ложу его в таблицу Bay. Чтоб знать какой контейнер считываю активную ячейку в Edit и по изменению Edit надо перебросить все поле того выделенного контейнер ав тблицу Containers. делаю так Код:
procedure TForm6.Edit7Change(Sender: TObject); begin try Query1.SQL.Clear; Query1.SQL.Add('INSERT INTO Containers SELECT * FROM Contain AS Container WHERE Container LIKE '''+Edit7.Text+''''); Query1.ExecSQL; Query2.SQL.Clear; Query2.SQL.Add('SELECT * FROM Containers'); Query2.Active:=True; except on e:Exception do end; end; Я уже все офрму перечитала и так толкового ответа не нашла как сделать переброс поля в другую таблицу!!! Буду очень благодарна за помощь! |
#11
|
||||
|
||||
![]() не прошло и года
советую открыть новую тему и описать там что не получается, желательно со структурой таблиц Я за здоровый экстрим! Спасибо за "спасибо") |