Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Внешнее соединение баз данных mdb 
:(
    Опции темы
addet
Дата 7.2.2008, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 25.12.2007

Репутация: нет
Всего: нет



Доброе утро,господа программисты.Возникла небольшая проблемка.Необходимо слить базы mdb в одну (добавить записи, а не заменить).Все таблицы и поля в базах идентичны, за исключением внесенных данных.Подскажите пожалуйста как правильно написать запрос(с sql не очень дружу).Делаю в delphi на отдельной форме Выбор даты и кнопку Объединить все базы.Ислользую ADO smile 
PM MAIL   Вверх
Rodman
Дата 7.2.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



посмотри
в твоем случае у тебя будет 2 конекшина... с одно данные будешь брать, а при помощи второго добавлять...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
ASGDeveloper
Дата 9.2.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 1.4.2006

Репутация: нет
Всего: 1



ИМХО проще сделать так:
1) выбираем из первой таблицы все данные запросом вроде select * from имя_таблицы
2) запускаем цикл перебирающий все выбранные элементы и формируем скрипт вроде INSERT ... (тут перечисляем имена полей и значения)
3) выполняем сформированный в пункте 2 скрипт
4) берем следующую таблицу и дальше продолжаем с пункта 1
PM MAIL   Вверх
addet
Дата 16.4.2008, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 25.12.2007

Репутация: нет
Всего: нет



Ребята не обижайтесь, на мою туповатость.А можно конкретный примерчик,
ASGDeveloper, ?
PM MAIL   Вверх
Rodman
Дата 16.4.2008, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Код

Query1.Close;// подключен к одной базе, из которой тянуть будем
Query2.Close;// подключен к другой базе, в которую писать будем
Query1.SQL.Clear;
Query1.SQL.Add('select Field1, Field2, Field3, Field4 from имя_таблицы');
Query1.Open;
Query2.SQL.Clear;
Query2.SQL.Add('INSERT INTO новая_таблица (Field1, Field2, Field3, Field4) VALUES (:prm1, :Prm2, :Prm3, :Prm4);');
while not Query1.eof do
begin
    Query2.Parameters.ParamByName('Prm1').Value:=Query1. Fields.Fields[0].AsString; 
    Query2.Parameters.ParamByName('Prm2').Value:=Query1. Fields.Fields[1].AsString; 
    Query2.Parameters.ParamByName('Prm3').Value:=Query1. Fields.Fields[2].AsString; 
    Query2.Parameters.ParamByName('Prm4').Value:=Query1. Fields.Fields[3].AsString; 
    Query2.ExecSQL;
    Query1.Next;
end;
так понятнее??
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Frees
Дата 16.4.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



вот есть такая функция которая переберет все таблицы и запишет значение из одной базы в другую

но тут надо осторожно с уникальнастями и первичными ключами
Код

procedure TfmMain.AddDestFromSouurce();
var
  I: Integer;
  TableList: TStringList;
  FieldList: TStringList;
  Table, Field, IsertString: String;
  j: Integer;
begin
  ADOConnectionSource.Connected := true;
  ADOConnectionDest.Connected := true;
  TableList := TStringList.Create;
  FieldList := TStringList.Create;
  ADOConnectionSource.GetTableNames(TableList, false);
  for I := 0 to TableList.Count - 1 do begin //Цикл по всем таблицам
    Table :=  TableList.Strings[I];
    ADOQuerySource.Close;
    ADOQuerySource.SQL.Clear;
    ADOQuerySource.SQL.Add('SELECT * FROM ' + Table);
    ADOQuerySource.Open;
    ADOQuerySource.First;
    ADOConnectionSource.GetFieldNames(Table, FieldList);
    //Готовим запрос для вставки
    IsertString := 'INSERT INTO ' + Table + '( ';
    //Заполняем поля
    for j := 1 to FieldList.Count - 1 do begin //первое поле не беру там инкремент
      Field := FieldList.Strings[j];
      if j =  FieldList.Count - 1 then
        IsertString := IsertString + Field + ') VALUES ('
      else
        IsertString := IsertString + Field + ','
    end;
    //Заполняем параметры
    for j := 1 to FieldList.Count - 1 do begin //первое поле не беру там инкремент
      Field := FieldList.Strings[j];
      if j =  FieldList.Count - 1 then
        IsertString := IsertString + ':' + Field + ');'
      else
        IsertString := IsertString + ':' + Field + ','
    end;
    ADOQueryDest.Close;
    ADOQueryDest.SQL.Clear;
    ADOQueryDest.SQL.Add(IsertString);

    while not ADOQuerySource.eof do begin //перебераем исходные записи
      //Заполняем параметры знамчениями
      ADOQueryDest.Close;
      for j := 1 to FieldList.Count - 1 do begin //первое поле не беру там инкремент
        Field := FieldList.Strings[j];
        ADOQueryDest.Parameters.ParamByName(Field).Value :=
            ADOQuerySource.FieldByName(Field).Value;
      end;
      try
        ADOQueryDest.ExecSQL;
      except
      end;
      ADOQuerySource.next;
    end;
  end;
  TableList.Free;
  FieldList.Free;
  ADOConnectionSource.Connected := false;
  ADOConnectionDest.Connected := false;
end;


особо не проверял но вроде работала


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Savek
Дата 16.4.2008, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



Если структуры одинаковы, то можно перегнать одним запросом:
Код

insert into InnerTable select * from OuterTable in "Путь к внешней базе"

заодно и скорость имеем на несколько порядков выше   smile 
PM MAIL   Вверх
addet
Дата 16.4.2008, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 25.12.2007

Репутация: нет
Всего: нет



Frees, огромное спасибо за помощь. Пытаюсь сейчас немного переделать, чтоб не прописывать коннетк каждый раз, т..к. баз много.Что получится, отпишусь. smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0498 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.