Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 290

/ вопрос открыт /

Приветствую, уважаемые эксперты!Помогите решить проблему! есть две идентичные базы (dbf) с разными именами полей, нужно спомощью SQL запроса перебросить все данные из одной в другую. Пробую QUERY1.SQL.Add('insert into am_ksum.dbf select * from osnbas.dbf'); так, но никакого результата нужная база пустая. Подскажите как быть!!!

grom_rk Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

grom_rk (статус: Посетитель), 10 января 2009, 17:41 [#4]:

-1 это за то что было сказано что запрос не верный, хотя да с моей стороны была ошибка в неправильной трактовке вопроса (может быть), но ошибка оказалась в самой структуре баз, помимо правильности типа поле оказывается нужно чтобы и размер типов полей были одинаковые. И запрос дал нужный результат!
Вадим К

Вадим К (статус: Академик), 10 января 2009, 17:55 [#5]:

А запрос действительно был неверный. Если бы он был верный, то он выполнял поставленную задачу.
Галочка "подтверждения прочтения" - вселенское зло.
ANBsoft

ANBsoft (статус: Студент), 10 января 2009, 18:32 [#6]:

Ответ на коментарий:
Знания то в принципе есть, но от Interbase отказался давным давно,
Firebird намного приятнее (хотябы бесплатностью и открытыми кодами).

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:33
Выполнено за 0.02 сек.