Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.03.2011, 11:45
X-Must X-Must вне форума
Прохожий
 
Регистрация: 19.02.2011
Сообщения: 28
Репутация: 10
По умолчанию Объединение одинаковых таблиц с помощью SQL

Вот у меня есть три таблицы, с одинаковой структурой но разными значениями. Мне нужно все эти данных занести в одну таблицу, с помощью sql запроса. Вот один компонент table, загружает первую таблицу, затем с помощью запроса данные из table копируются в tquery, затем table загружает вторую таблицу, в query снова добавляются данные. И так всего три раза. Просто у меня три таблицы и данные в них за три смены, а мне нужно все эти данные о трех сменах сделать в одну таблицу. Я написал вот то:

Код:
table1.tablename:='1.dbf';
query1.close;
query1.sql.text:='insert 3smeni values (select * from table1)
query1.open
и такой код три раза, меняется только table1,table2,table3.
Ну а после всего этого, я выведу данные в dbgrid

query1.sql.text:='select * from 3smeni'

Но все это не работает.

Ругается на эту строку - query1.sql.text:='insert 3smeni values (select * from table1).

Помогите.
Ответить с цитированием
  #2  
Старый 14.03.2011, 13:15
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

Какое субд?Может так?
Код:
INSERT INTO TABLE_ALL (field1,field2,field3) VALUES 
(
SELECT field1,field2,field3 FROM TABLE1
UNION ALL
SELECT field1,field2,field3 FROM TABLE2
UNION ALL
SELECT field1,field2,field3 FROM TABLE3
)
__________________
Последний раз редактировалось Admin, Сегодня в 10:32.
Ответить с цитированием
  #3  
Старый 14.03.2011, 13:27
X-Must X-Must вне форума
Прохожий
 
Регистрация: 19.02.2011
Сообщения: 28
Репутация: 10
По умолчанию

Delphi 7 у меня.
Ответить с цитированием
  #4  
Старый 14.03.2011, 15:00
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию


СУБД - система управления базами данных......
В общем с какой базой работаешь? Oracle, MySQL,MS SQL.... ?

Код:
query1.sql.text:='INSERT INTO TABLE_ALL (field1,field2,field3) VALUES 
(
SELECT field1,field2,field3 FROM TABLE1
UNION ALL
SELECT field1,field2,field3 FROM TABLE2
UNION ALL
SELECT field1,field2,field3 FROM TABLE3
)'
query1.execsql
что-то такое
__________________
Последний раз редактировалось Admin, Сегодня в 10:32.
Ответить с цитированием
  #5  
Старый 14.03.2011, 15:07
X-Must X-Must вне форума
Прохожий
 
Регистрация: 19.02.2011
Сообщения: 28
Репутация: 10
По умолчанию

ни с какой. Мне в Delphi нужно сделать программу которая загружает локальные базы данных и делает с ними определенные вещи. SQL я хочу использовать для удобства.
Ответить с цитированием
  #6  
Старый 14.03.2011, 16:07
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

может так?
Код:
procedure TForm1.Button2Click(Sender: TObject);
var tablelist:TStringList;
    i:integer;
    table_priemnik:string;
begin
table_priemnik:='TABLE_A.DBF'; //таблица в которую пишем
tablelist:=TStringList.Create;
tablelist.Add('TABLE1.DBF');  //список таблиц которые надо прочитать
tablelist.Add('TABLE2.DBF');
FOR I:=0 TO tablelist.Count-1 do  //запускаем цикл по таблицам
begin
Query1.SQL.Text:='SELECT field1,field2 from '+tablelist[i]; //формируем запрос на получение данных из таблицы
Query1.Open;

Query2.sql.Text:='INSERT INTO '+table_priemnik+' (field1,field2) VALUES (:field1,:field2)'; //формируем запрос на вставку данных в таблицу приемника

while not(Query1.Eof) do
begin
Query2.ParamByName('field1').Value:=Query1.FieldByName('field1').AsString;  //устанавливаем значение параметрам
Query2.ParamByName('field2').Value:=Query1.FieldByName('field2').AsString;
Query2.ExecSQL; //выполняем запрос на вставку
Query1.Next;
end;
Query1.Close;
Query2.Close;
end;

end;
__________________
Последний раз редактировалось Admin, Сегодня в 10:32.
Ответить с цитированием
  #7  
Старый 14.03.2011, 16:11
X-Must X-Must вне форума
Прохожий
 
Регистрация: 19.02.2011
Сообщения: 28
Репутация: 10
По умолчанию

Цитата:
Сообщение от friz
может так?
Код:
Query2.ParamByName('field1').Value:=Query1.FieldByName('field1').AsString;  
Query2.ParamByName('field2').Value:=Query1.FieldByName('field2').AsString;

А зачем это?
Ответить с цитированием
  #8  
Старый 14.03.2011, 16:29
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

в запросе мы используем параметры :field1 и :field2..
данными строками мы присваиваем параметрам значения
__________________
Последний раз редактировалось Admin, Сегодня в 10:32.
Ответить с цитированием
  #9  
Старый 14.03.2011, 16:44
X-Must X-Must вне форума
Прохожий
 
Регистрация: 19.02.2011
Сообщения: 28
Репутация: 10
По умолчанию

Спасибо! Помогло.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:17.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter