| 
| 
 | Вопрос # 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 намного приятнее (хотябы бесплатностью и открытыми кодами).
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |