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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2014, 11:30   #1
HelloExp
Пользователь
 
Регистрация: 06.03.2013
Сообщений: 12
По умолчанию Перенос из одной БД Access в другую БД Access.

Доброго времени суток, возникла меленькая проблема с реализацией проекта. Суть проблемы:
Не могу перенести данные из tab2, которая находится в БД notebook2.mdb в таблицу tab1, которая находится в БД notebook.mdb
На форме есть ADOConnection, ADODataSet, DataSource, DBGrid и ADOQuery.
ADOConnection подключен к notebook2.mdb

ADODataSet имеет SELECT * FROM tab2 ORDER BY Name, подключен к ADOConnection

DataSource подключена к ADODataSet

DBGrid к DataSource

ADOQuery подключен к ADOConnection и DataSource1.
В нем я писал различные запросы на копирование данных

SELECT tab2.Number, tab2.Name FROM tab2 IN 'notebook2.mdb'
UNION ALL SELECT tab1.Number, tab1.Name FROM tab1 IN 'notebook.mdb';


INSERT INTO "notebook2.mdb" (tab2.Number, tab2.Name)
VALUES SELECT tab1.Number, tab1.Name FROM tab1 IN 'notebook.mdb'





INSERT INTO "notebook2.mdb" (tab2.Number, tab2.Name)
VALUES SELECT tab1.Number, tab1.Name FROM "notebook.mdb"

Ни один из этих запросов не работает, выдает ошибку,что в синтаксисе INSERT INTO ошибка и всякую чушь.

Как правильно сделать копирование данных?
HelloExp вне форума Ответить с цитированием
Старый 27.02.2014, 11:38   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

В запросе на добавление после insert into указывается имя таблицы, а не файла БД. То же самое касается предложения from в запросах на выборку (select).
Можно в Access в одной БД настроить запрос к другой, и потом обращаться к этому запросу. Но тогда путь к одной БД будет жестко прописан в другой. Его же можно передавать параметром.
Streletz вне форума Ответить с цитированием
Старый 27.02.2014, 16:43   #3
HelloExp
Пользователь
 
Регистрация: 06.03.2013
Сообщений: 12
По умолчанию

А поподробнее можно, не могу понять. Допустим я считаю из первой БД notebook2, но как программа поймет,что нужно именно в notebook записать эти данные.
HelloExp вне форума Ответить с цитированием
Старый 27.02.2014, 17:00   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Создаёте в 1й базе запрос ко 2й. В запросе на добавление делаете выборку из него.
Цитата:
Допустим я считаю из первой БД notebook2, но как программа поймет,что нужно именно в notebook записать эти данные.
Если делаете через программу то для обеих БД делаете полную цепочку компонентов до DataSet. И дальше работаете с DataSet'ами.
Streletz вне форума Ответить с цитированием
Старый 28.02.2014, 10:28   #5
HelloExp
Пользователь
 
Регистрация: 06.03.2013
Сообщений: 12
По умолчанию

Сделал то что хотел. Запрос такой INSERT INTO Таблица_0_Ответственный_за_ЭССАД in 'notebook2.mdb'
SELECT *
FROM Таблица_0_Ответственный_за_ЭССАД in 'notebook.mdb';

Теперь проблема в другом.

в некоторых таблицах есть ключевые поля и связи. Пишет:
Изменения не были успешно внесены из-за повторяющихся значений в индексе ключевых полях или связях. Измените данные в поле или полях, содержащих повторяющиеся значения, удалите индекс или переопредилите его и повторите попытку!


Как избавиться? Прикреплю проект свой, может кто-нибудь поможет)

Если сделать конечно
ADOQuery1.ExecSQL;
ADOQuery2.ExecSQL;
//ADOQuery3.ExecSQL;
//ADOQuery4.ExecSQL;
//ADOQuery5.ExecSQL;
//ADOQuery6.ExecSQL;
//ADOQuery7.ExecSQL;
//ADOQuery8.ExecSQL;
//ADOQuery9.ExecSQL;
//ADOQuery10.ExecSQL;
//ADOQuery11.ExecSQL;
//ADOQuery12.ExecSQL;
//ADOQuery13.ExecSQL;
//ADOQuery14.ExecSQL;
//ADOQuery15.ExecSQL;
То работает. Если убрать удалить комментарии у кода, то вылетает ошибка, которую я написал выше.
Может как-нибудь можно только значения перенести из таблиц, а не всю строку с запросами и т.д
Закиньте файлы из архива БД в папку с проектом.
Вложения
Тип файла: rar БД.rar (243.0 Кб, 16 просмотров)
Тип файла: rar Перенос данных из одной бд в другую.rar (268.5 Кб, 20 просмотров)
HelloExp вне форума Ответить с цитированием
Старый 28.02.2014, 10:41   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Как избавиться?
Написать запросы на обновление с учетом как ключевых полей, так и внешних ссылок. И в нужной последовательности
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.02.2014, 10:51   #7
HelloExp
Пользователь
 
Регистрация: 06.03.2013
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Написать запросы на обновление с учетом как ключевых полей, так и внешних ссылок. И в нужной последовательности
Не откажусь от помощи. Не очень силен в запросах, но сейчас почитаю, возможно что-нибудь получится самому сделать, но помощь все равно не помешает =)
HelloExp вне форума Ответить с цитированием
Старый 03.03.2014, 08:51   #8
HelloExp
Пользователь
 
Регистрация: 06.03.2013
Сообщений: 12
По умолчанию

Доброго времени суток, немного помучился и разобрался, но как всегда появилась маленькая проблема, а именно не работает один ADOQuery. Уже по всякому делал,ничего не получается. Может я чего-нибудь не замечаю =( В коде я его закомментил, посмотрите пожалуйста. Файлы из архива БД, перекиньте в папку с проектом.
Вложения
Тип файла: rar БД.rar (239.0 Кб, 14 просмотров)
Тип файла: rar Перенос данных.rar (269.5 Кб, 25 просмотров)
HelloExp вне форума Ответить с цитированием
Старый 03.03.2014, 12:50   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

а вы почистили таблицы ПЕРЕД переносом.
Все ранее данные рекомендации предполагают абсолютно пустую БД приемник.

Структура БД неудовлетворительная.
никогда не делайте ключом наименование которое должен вводить пользователь.
Если у вас есть таблица наименований (OУ), то ключом в ней должно быть поле типа счетчик(!) целое число. (обычное имя для такого поля ID)
Все таблицы которые должны иметь информацию, к какому наименованию из ОУ относится та или иная их запись, должны в свою очередь иметь поле имеют поле вида целое, в котором хранится целое =ID того наименования к которому относится данная запись. (обычно оно называется OU_ID) OU подсказывает в какой таблице следует искать само наименование.
Код:
select oy.naimenovanie, t.*
from t
inner join oy on oy.id=t.ou_id
почему
Цитата:
никогда не делайте ключом
?
1. размер (число 4 байта, а наименование м.б.>100)
2. с числами БД (не человеку) работать удобнее.
3. главная причина!
если человек обнаружит ошибку в наименовании то ее будет легко исправить.
она существует в единственном месте! в ОУ!

чтобы что-то исправить обычно надо знать какая ошибка была.
except
on e:Exception do begin
MessageDlg('owubka' +e.Message ,mtError,[mbOk],0);
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 03.03.2014 в 12:57.
evg_m вне форума Ответить с цитированием
Старый 24.02.2020, 20:09   #10
osanovt
Новичок
Джуниор
 
Регистрация: 18.01.2013
Сообщений: 1
По умолчанию

HelloExp Спасибо большое!!! Выручил очень!!!!
osanovt вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как скопировать таблицу из одной базы данных Access в другую Dux БД в Delphi 9 16.10.2013 11:07
Delphi.БД Access.как сделать вставку в поле из одной таблицы в другую? JuliaKiK Помощь студентам 1 02.05.2013 01:12
Перенос данных из одной БД в другую demiancz БД в Delphi 1 11.03.2012 18:53
Как открыть из БД Access другую Бд Access? Ribun Microsoft Office Access 8 10.03.2012 05:44
Как скопировать данные таблицы из одной базы access в другую? AK BULLETS БД в Delphi 2 31.03.2010 13:09