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

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

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

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

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

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

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

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

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

22
554 / 484 / 191
Регистрация: 11.12.2013
Сообщений: 2,507
01.04.2018, 20:15
Я бы создал в access таблицы с такой же структурой как в исходной бд, а потом обычным insert'ом залил данные.
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
01.04.2018, 22:39  [ТС]
Да, я в общем то и пытаюсь подобное сделать. Но не могу, так как при составлении sql запроса происходит ошибка чтения исходной бпзы данных, так как она другого формата. Может можно как то прочитать то, что я смог выложить в grid, чтобы не обращаться к БД напрямую?
0
554 / 484 / 191
Регистрация: 11.12.2013
Сообщений: 2,507
01.04.2018, 22:44
а как вы читаете данные из absolutedb? может никаких запросов и не надо, т.к. результаты запроса отображаются в DBGrid (он только отображает данные, а не извлекает их из бд)?
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
02.04.2018, 07:19  [ТС]
Из absolutedb я читаю данные с помощью SQL запроса в ABSQuery. ABSQuery не может контактировать в базой данных *.mdb(для неё отдельно ADOQuery), здесь и проблема.
0
5968 / 4544 / 1094
Регистрация: 29.08.2013
Сообщений: 28,165
Записей в блоге: 3
02.04.2018, 07:37
нет никакой проблемы

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

-обойти циклом ABSQuery?
-сформировать строку запрос?
-выполнить ее в ADOQuery?
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
02.04.2018, 11:29  [ТС]
Ну из этих трёх пунктов больше всего не понятно про "обойти циклом ABSQuery"
0
554 / 484 / 191
Регистрация: 11.12.2013
Сообщений: 2,507
02.04.2018, 11:37
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  [ТС]
Извиняюсь за нубовство, Алексей. Не могу все равно понять этот процесс.

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
554 / 484 / 191
Регистрация: 11.12.2013
Сообщений: 2,507
02.04.2018, 23:08
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  [ТС]
Спасибо, так стало намного понятнее.
Если под структурой подразумевается таблицы и поля, то они полностью совпадают с первой БД. Но при этом ни одной записи там нет.
Интересует теперь такой вопрос: мы считали данные из одной таблицы, по одной записи за цикл. Где они хранятся, чтобы присвоить их в ADOQuery и заполнить? Точнее, что именно мне присваивать? Не снова же SQL запрос писать...
0
5968 / 4544 / 1094
Регистрация: 29.08.2013
Сообщений: 28,165
Записей в блоге: 3
03.04.2018, 06:59
Цитата Сообщение от 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  [ТС]
вы вообще с БД работали?
Нет, буквально недавно с этим столкнулся...

Если я правильно понял, вид запроса должен быть таков?
Delphi
1
ADOQuery1.SQL.Add('INSERT INTO Grup(ID, Enum, Name) VALUES(???)');
где Grup и ее поля это такая же таблица, записи которой мы считываем. Только куда обращаться в "Values"?
0
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,399
Записей в блоге: 3
03.04.2018, 07:46
pilot01, а типы полей можете озвучить?
0
5968 / 4544 / 1094
Регистрация: 29.08.2013
Сообщений: 28,165
Записей в блоге: 3
03.04.2018, 07:49
Цитата Сообщение от pilot01 Посмотреть сообщение
Только куда обращаться в "Values"
а Values это те поля которые вы выбрали из ABSQuery и перебираете в цикле
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 19
03.04.2018, 08:57  [ТС]
pilot01, а типы полей можете озвучить?
В таблице Grup все поля текстовые, кроме ID, он ключевой, кстати я наверно зря его указал в запросе.
Но есть другие таблицы, там целочисленные и текстовые поля, но есть воднойтаблице поле BLOB, хранящее в себе немного текста.

а Values это те поля которые вы выбрали из ABSQuery и перебираете в цикле
Да, это я понял, но как их там указать? Можете, пожалуйста написать пример, у меня именно в этом месте всегда и появлялись проблемы, как это записать...
0
5968 / 4544 / 1094
Регистрация: 29.08.2013
Сообщений: 28,165
Записей в блоге: 3
03.04.2018, 09:15
Лучший ответ Сообщение было отмечено 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  [ТС]
Спасибо, стало намного понятнее, думаю, теперь я это осилю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.04.2018, 09:20
Помогаю со студенческими работами здесь

Копирование данных из одной таблицы в другую в пределах одной базы. Не работает счетчик
Делаю копирование данных из одной таблицы в другую в пределах одной базы. procedure TForm16.Button2Click(Sender: TObject); var ...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru