Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2014, 11:19   #1
Streb
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 76
По умолчанию Копирование данных из одной таблицы в другую

Здравствуйте, Уважаемые Форумчане!
У меня есть БД test в sql. В ней 2 таблицы pr_input_mol и mol.
Нужно, чтобы при выделении нужной строки в таблице mol копировались необходимые ячейки из нее в другую таблицу pr_input_mol.
Сейчас использую следующий код:
Код:
begin
qry2.Active:=false;
qry2.SQL.Clear;
qry2.SQL.Add('INSERT INTO test.pr_input_mol (number, input_quant )');
qry2.SQL.Add('SELECT number, input_quant');
qry2.SQL.Add('FROM test.mol');
qry2.ExecSQL;
qry2.SQL.Text:='select * from test.pr_input_mol';
qry2.Active:=true;
end;
Данный код копирует абсолютно все строки.
Как сделать, чтобы копировал только выделенную?
Заранее спасибо!

Последний раз редактировалось Stilet; 24.02.2014 в 09:12.
Streb вне форума Ответить с цитированием
Старый 19.02.2014, 11:22   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А выделенную можно чем-то однозначно идентифицировать? Если можно, то добавить WHERE и условие идентификации. Если нельзя, то не получится так вставить нужное. Тогда INSERT с VALUES
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.02.2014, 11:26   #3
Streb
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 76
По умолчанию

Условие идентификации, к сожалению, добавить нельзя.
Не подскажите, как использовать INSERT с VALUES. Желательно с примером.
Заранее спасибо!
Streb вне форума Ответить с цитированием
Старый 19.02.2014, 11:29   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
INSERT INTO test.pr_input_mol (number, input_quant ) VALUES (1,2)
Вместо 1 и 2 вставить нужное.

Таблицы без идентификации это самое последнее, что можно плохого придумать в устройстве базы. И это будет преследовать на каждом чихе. И ночью в кошмарном сне тоже
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.02.2014, 11:40   #5
Streb
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 76
По умолчанию

Прошу прощения, немного не понял.
Мне нужно, чтобы кнопку нажал, выделенные поля скопировались.
Этот код применим непосредственно к sql БД, минуя Delphi. Как в делфи реализовать этот код?
Streb вне форума Ответить с цитированием
Старый 19.02.2014, 11:52   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
qry2.SQL.Add('INSERT INTO test.pr_input_mol (number, input_quant )');
qr2.SQL.Add('Values(:p1,:p2)';

for //выделенные строчки!!!
begin
  qr2.sql.parametr.Parambyname('p1').Value:=//данные для первого поля
  qr2.sql.parametr.Parambyname('p1').Value:=//данные для второго поля
  qr2.ExecSQL;
end;
Цитата:
Условие идентификации, к сожалению, добавить нельзя.
не верю, человек же как-то сумел выбрать (вероятно по другим полям!)

и потом если есть первичные ключи в таблице всегда можно написать
insert ... select ... from t where <ключ> in (2,5,7,... )
осталось только программно правильно(!) сформировать это самое where ... in ...
по выделенным человеком строчкам.

либо цикл формирования in ... и добавление insert ... select ... from t where ... in ... всех сразу
либо цикл добавления по одной insert ... select ... from t where <ключ>=...
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 19.02.2014 в 12:07.
evg_m вне форума Ответить с цитированием
Старый 19.02.2014, 12:02   #7
Streb
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 76
По умолчанию

Выводит ошибку. Видимо я что-то не понял!

Код:
procedure TForm10.btn1Click(Sender: TObject);
begin
qry2.SQL.Add('INSERT INTO test.pr_input_mol (number, input_quant )');
qry2.SQL.Add('Values(: p1,: p2)');

for
begin
  qry2.sql.parametr.Parambyname('p1').Value:=qry1.sql.parametr.Parambyname('number')
  qry2.sql.parametr.Parambyname('p1').Value:=qry1.sql.parametr.Parambyname('input_quant')
  qry2.ExecSQL;
end;
end;
end;

___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.


Никто не может помочь???

Последний раз редактировалось Stilet; 24.02.2014 в 09:12.
Streb вне форума Ответить с цитированием
Старый 19.02.2014, 14:01   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

извините, но у Вас же много непонятного написано.
например, к чему ключевое слово for ??!

попробуйте так:
Код:
procedure TForm10.btn1Click(Sender: TObject);
begin
qry2.Close; {в общем случае это не нужно, но так, на всякий случай}

qry2.SQL.Clear; {а вот это уже нужно обязательно, раз уж Вы через add добавляете запрос!}

qry2.SQL.Add('INSERT INTO test.pr_input_mol (number, input_quant )');
qry2.SQL.Add('Values (:p1, :p2)');  {обратите внимание, после двоеточия пробела НЕ ДОЛЖНО БЫТЬ!}

  qry2.Parameters.ParamByName('p1').Value:=qry1.FieldByName('number').Value;
  qry2.Parameters.ParamByName('p2').Value:=qry1.FieldByName('input_quant').Value;
  qry2.ExecSQL;
end;

p.s. хотя, нужно менять структуры таблиц, пока ещё не поздно!

Последний раз редактировалось Serge_Bliznykov; 19.02.2014 в 14:04.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.02.2014, 14:29   #9
Streb
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 76
По умолчанию

Serge_Bliznykov, спасибо большое!!!
Строки копируются и это радует!
Единственная проблема состоит в том, чтобы увидеть скопированную строку нужно заново перезапустить программу. В режиме реального времени программа не отображается! Может это как-то можно решить?
И данный способ не передает русские символы!!!

Последний раз редактировалось Streb; 19.02.2014 в 14:34.
Streb вне форума Ответить с цитированием
Старый 19.02.2014, 14:39   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Единственная проблема состоит в том, чтобы увидеть скопированную строку нужно заново перезапустить программу.
нужно перечитать тот датасет, который у Вас связан с таблицей test.pr_input_mol

иногда помогает метод .Refresh;
иногда (в особо запущенных случаях) можно закрыть (метод .Close) и заново открыть (метод .Open) датасет.
При переоткрытии указатель перескочит на первую запись в датасете
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование части данных из одной таблицы в другую ekspert126 Microsoft Office Excel 2 24.08.2013 08:39
MS SQL SERVER 2005 копирование таблицы из ОДНОЙ БД В другую или перенести все строки из одной таблицы в другую reihtmonbern БД в Delphi 4 17.07.2012 23:25
Копирование данных из одной таблицы в другую Arega Microsoft Office Access 0 11.07.2012 17:01
Копирование данных из одной таблицы Paradox в другую Zuzya БД в Delphi 3 16.05.2009 19:11
Копирование данных из одной таблицы в другую! фЁдОр БД в Delphi 18 06.01.2008 19:27