Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
1
Delphi 6-7

Перенос данных из одной базы данных в другую

01.04.2018, 19:40. Показов 5706. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, форумчане!

Есть одна БД (Absolute Database *.abs), подключил её к Delphi с помощью специальный инструментов ABSQurey вместо ADOQuery и т.д. Отображается в Гриде, отлично.
Создал БД в MS Access в формате *.mdb пустую, и теперь хочу первую базу скопировать во вторую.

Итого: имеется ABSQuery и ADOQuery, по сути одинаковые, но каждый понимает только свою БД.
Мои попытки создать сложный SQL запрос не увенчались успехом, так как задавать приходится в одном из двух Query, и на не свою БД ругаются оба.
Я не слишком силен в работе с БД в принципе, и выхода не вижу из сложившейся ситуации, буду благодарен за советы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2018, 19:40
Ответы с готовыми решениями:

Перенос данных из одной базы в другую
Всем салам! Проблема такая, надо чтобы при нажатии на кнопку удаление из dbgrida удалялся нужный...

Перенос строки из одной таблицы базы данных в другую посредством Delphi
Есть база в Access две таблицы, управляется из Delphi через Adotable,DataSource нужно по нажатию...

Перенос данных из одной БД в другую
Есть 2 формы на обоих формах есть DBGrid. Нужно что бы при нажатии в контекстном меню на...

Копирование данных из одной таблицы в другую в пределах одной базы. Не работает счетчик
Делаю копирование данных из одной таблицы в другую в пределах одной базы. procedure...

22
548 / 479 / 190
Регистрация: 11.12.2013
Сообщений: 2,494
01.04.2018, 20:15 2
Я бы создал в access таблицы с такой же структурой как в исходной бд, а потом обычным insert'ом залил данные.
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
01.04.2018, 22:39  [ТС] 3
Да, я в общем то и пытаюсь подобное сделать. Но не могу, так как при составлении sql запроса происходит ошибка чтения исходной бпзы данных, так как она другого формата. Может можно как то прочитать то, что я смог выложить в grid, чтобы не обращаться к БД напрямую?
0
548 / 479 / 190
Регистрация: 11.12.2013
Сообщений: 2,494
01.04.2018, 22:44 4
а как вы читаете данные из absolutedb? может никаких запросов и не надо, т.к. результаты запроса отображаются в DBGrid (он только отображает данные, а не извлекает их из бд)?
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
02.04.2018, 07:19  [ТС] 5
Из absolutedb я читаю данные с помощью SQL запроса в ABSQuery. ABSQuery не может контактировать в базой данных *.mdb(для неё отдельно ADOQuery), здесь и проблема.
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
02.04.2018, 07:37 6
нет никакой проблемы

обходи циклом ABSQuery, формируй строку запроса и делай INSERT в аксесс с помощью ADOQuery
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
02.04.2018, 09:44  [ТС] 7
А можно здесь пожалуйста подробнее? Не совсем представляю как именно это сделать...
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
02.04.2018, 09:47 8
Цитата Сообщение от pilot01 Посмотреть сообщение
как именно это сделать.
что именно сделать?

-обойти циклом ABSQuery?
-сформировать строку запрос?
-выполнить ее в ADOQuery?
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
02.04.2018, 11:29  [ТС] 9
Ну из этих трёх пунктов больше всего не понятно про "обойти циклом ABSQuery"
0
548 / 479 / 190
Регистрация: 11.12.2013
Сообщений: 2,494
02.04.2018, 11:37 10
Delphi
1
2
3
4
5
6
7
8
9
with ABSQuery do try
  Open;
  while not eof do begin
//здесь читаете запись, формируете запрос на добавление и добавляете данные в access     
     Next;
  end;
finally 
  Close;
end;
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
02.04.2018, 21:59  [ТС] 11
Извиняюсь за нубовство, Алексей. Не могу все равно понять этот процесс.

Delphi
1
2
3
with ABSQuery do try
  Open;
  while not eof do begin
В этом участке кода, мы будем опрашивать каждую запись той таблицы которую вызвали до этого в грид? или всех таблиц всей БД?
Можете, пожалуйста, разжевать, что писать внутри цикла, у меня в этом полный провал...

Пробовал на месте этого:
Delphi
1
//здесь читаете запись, формируете запрос на добавление и добавляете данные в access
писать SQL запросы различные, такие как :
Delphi
1
2
3
SQL.Clear;
SQL.Add('SELECT Enum FROM Grup where ID <= 3');
ABSQuery1.Active:=True;
- цикл не заканчивается.

Я понимаю, что это выглядит как полный бред, я не понимаю что делаю, ибо с Delphi не знаком совсем, как, собственно и с SQL, но надо эту БД перевести в другой формат и дальше с ней работать...

Подскажите, как создать SQL запрос правильно, используя оба Query, буду очень благодарен...
0
548 / 479 / 190
Регистрация: 11.12.2013
Сообщений: 2,494
02.04.2018, 23:08 12
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
with ABSQuery do try
  SQL.Text:='select * from имя таблицы'; //замените "имя таблицы" на реальное название таблицы
//открываем запрос (читаем данные из исходной таблицы)
  Open;
//считываем данные пока не достигнем конца таблицы
  while not eof do begin
//здесь читаете запись, формируете запрос на добавление и добавляете данные в access     
 
//переходим на следующую запись в исходной таблице
     Next;
  end;
finally 
  Close;
end;
с запросом на добавление в таблицу access сложнее, необходимо знать ее структуру
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
03.04.2018, 06:53  [ТС] 13
Спасибо, так стало намного понятнее.
Если под структурой подразумевается таблицы и поля, то они полностью совпадают с первой БД. Но при этом ни одной записи там нет.
Интересует теперь такой вопрос: мы считали данные из одной таблицы, по одной записи за цикл. Где они хранятся, чтобы присвоить их в ADOQuery и заполнить? Точнее, что именно мне присваивать? Не снова же SQL запрос писать...
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
03.04.2018, 06:59 14
Цитата Сообщение от pilot01 Посмотреть сообщение
Где они хранятся, чтобы присвоить их в ADOQuery и заполнить?
вы вообще с БД работали?

Цитата Сообщение от pilot01 Посмотреть сообщение
Где они хранятся, чтобы присвоить их в ADOQuery и заполнить?
когда вы выполняете запрос в СУБД, то потом вам в Query приходят данные
массив Query.Fields[i] - сколько полей у вас в запросе, столько колонок и будет

Цитата Сообщение от pilot01 Посмотреть сообщение
Не снова же SQL запрос писать...
конечно снова SQL запрос
вы считали 1 строку из ABSQuery и теперь ее надо вставить в запрос INSERT для ADOQuery
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
03.04.2018, 07:25  [ТС] 15
вы вообще с БД работали?
Нет, буквально недавно с этим столкнулся...

Если я правильно понял, вид запроса должен быть таков?
Delphi
1
ADOQuery1.SQL.Add('INSERT INTO Grup(ID, Enum, Name) VALUES(???)');
где Grup и ее поля это такая же таблица, записи которой мы считываем. Только куда обращаться в "Values"?
0
Модератор
9267 / 6045 / 2380
Регистрация: 21.01.2014
Сообщений: 25,821
Записей в блоге: 3
03.04.2018, 07:46 16
pilot01, а типы полей можете озвучить?
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
03.04.2018, 07:49 17
Цитата Сообщение от pilot01 Посмотреть сообщение
Только куда обращаться в "Values"
а Values это те поля которые вы выбрали из ABSQuery и перебираете в цикле
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
03.04.2018, 08:57  [ТС] 18
pilot01, а типы полей можете озвучить?
В таблице Grup все поля текстовые, кроме ID, он ключевой, кстати я наверно зря его указал в запросе.
Но есть другие таблицы, там целочисленные и текстовые поля, но есть воднойтаблице поле BLOB, хранящее в себе немного текста.

а Values это те поля которые вы выбрали из ABSQuery и перебираете в цикле
Да, это я понял, но как их там указать? Можете, пожалуйста написать пример, у меня именно в этом месте всегда и появлялись проблемы, как это записать...
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
03.04.2018, 09:15 19
Лучший ответ Сообщение было отмечено pilot01 как решение

Решение

Delphi
1
2
3
4
5
ADOQuery1.SQL.Text:='INSERT INTO Grup(ID, Enum, Name) VALUES(:p1,:p2,:p3)';
ADOQuery1.Parameters.ParamByNmae('p1').asInteger:=ABSQuery.Fields[0].asInteger;
ADOQuery1.Parameters.ParamByNmae('p2').asString:=ABSQuery.Fields[1].asString;
ADOQuery1.Parameters.ParamByNmae('p3').asString:=ABSQuery.Fields[2].asString;
ADOQuery1.ExecSQL;
1
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
03.04.2018, 09:20  [ТС] 20
Спасибо, стало намного понятнее, думаю, теперь я это осилю
0
03.04.2018, 09:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2018, 09:20
Помогаю со студенческими работами здесь

Перенос данных из одной таблицы в другую
Как перенести строку из одной таблице в другую бд акцесс делфи, кнопкой в делфи без запуска...

Перенос данных из одной таблицы в другую
День добрый всем. У меня возник вопрос, возможно ли при переносе данных из одной таблицы в другую,...

Перенос данных из одной DBGrid в другую
Если так переносится только одна строка DBGrid1 первой формы Form1 в DBGrid1 второй формы Form2: ...

Перенос данных из одной таблицы в другую
У меня проблема. Вношу данные в одну таблицу, потом по нажатию кнопки, эти записи должны...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru