|
Вопрос # 2 290/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!Помогите решить проблему! есть две идентичные базы (dbf) с разными именами полей, нужно спомощью SQL запроса перебросить все данные из одной в другую. Пробую QUERY1.SQL.Add('insert into am_ksum.dbf select * from osnbas.dbf'); так, но никакого результата нужная база пустая. Подскажите как быть!!!
 |
Вопрос задал: grom_rk (статус: Посетитель)
Вопрос отправлен: 10 января 2009, 13:43
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: ANBsoft
Здравствуйте, grom_rk!
В данном случае даже писать программу не нужно.
Запустите SQL Explorer и введите в нем примерно следующее:
insert into Table1 (Field1a, Field2a, Field3a) select Field1b, Field2b, Field3b from Table2
или
insert into "Table1.dbf" (Field1a, Field2a, Field3a) select Field1b, Field2b, Field3b from "Table2.dbf"
где Table1 и Table2 - имена таблиц, а Field.. - имена полей в этих таблицах
 |
Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 10 января 2009, 17:44
Оценка за ответ: 5
Комментарий к оценке: есть ли знания в области Interbase 7.1?
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 10 января 2009, 18:32; участников в обсуждении: 4.
|
Вадим К (статус: Академик), 10 января 2009, 14:27 [#1]:
Ваш сиквел запрос неверный. он не соответствует синтаксису. В данном случае над о брать один TTable и один TQuery (Если уж вы решили связаться с BDE). И по одной записи перебрасывать.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Мережников Андрей (статус: Абитуриент), 10 января 2009, 15:02 [#2]:
во-первых, добавление строки запроса в query1 не значит выполнение этого запроса. Необходимо после этого выполнить query1.ExecSQL. Но на Ваш запрос обругается уже BDE. Символ точки допускается использовать только для разделения имени таблицы и имени поля.
|
|
Вадим К (статус: Академик), 10 января 2009, 16:50 [#3]:
До автора вопроса по поводу "-1 в репутацию". А никто не обещал, что программирование - это легко. Это тяжелый умственный труд. Если у ваших двух баз разные поля, то как делфи должна догадаться, что куда слать.
Перекидывать по одной записи - это нормально в общем случае, если базы разные. А то что вам лень писать - это другое дело. Можно конечно (и во многих случаях это будет более красивое решение) - сделать например через cvs. Многие базы данных поддерживают загрузку/выгрузку в этот формат. А если поля не совпадают, то можно и ручками отредактировать - благое дело, этот формат текстовый.
Да, BDE поддерживает так называемые гетерогенные запросы, но это его особенность. Но вот беда - здесь не этот случай объясняю.
Нравиться мне одно выражение в вопросе. Базы идентичны, но поля разные. Две ошибки сразу. Во первых, то что в вопросе - это таблицы, если лежат в одной папке, то это одна база, а не две... так что даже проблем нет. А во вторых, если таблицы (а не базы) идентичны, то они одинаковы как минимум в названии и описании полей. Прочитав, что нужно перебросить с базы в базу и зная, что сиквел запрос такого не может сделать - он работает в пределах одной базы - я и написал свою предыдущую реплику. Но Вам же это не нравиться, это лично Ваши проблемы.
Но так как в нашем случае это одна база и мы имеем дело с двумя таблицами, то дело не так безнадёжно. Если есть строгое соответствие перевода полей и все поля можно заполнить, то почему бы и нет. Надо просто указать эти поля... Ну где то так
insert into am_ksum.dbf select pole3, pole1, pole2 from osnbas.dbf и в таком духе дальше.
Почему же я всё таки за переброску либо по записям, либо через cvs (или подобное)? завтра Вам захочется перебросить с MySQL в SyBase или ещё что нибудь подобное. и будете снова задавать вопрос.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
grom_rk (статус: Посетитель), 10 января 2009, 17:41 [#4]:
-1 это за то что было сказано что запрос не верный, хотя да с моей стороны была ошибка в неправильной трактовке вопроса (может быть), но ошибка оказалась в самой структуре баз, помимо правильности типа поле оказывается нужно чтобы и размер типов полей были одинаковые. И запрос дал нужный результат!
|
|
Вадим К (статус: Академик), 10 января 2009, 17:55 [#5]:
А запрос действительно был неверный. Если бы он был верный, то он выполнял поставленную задачу.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
ANBsoft (статус: Студент), 10 января 2009, 18:32 [#6]:
Ответ на коментарий:
Знания то в принципе есть, но от Interbase отказался давным давно,
Firebird намного приятнее (хотябы бесплатностью и открытыми кодами).
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|