Перекидка баз MyDamp неполучается.

Обсуждение возникших проблем, предложений и ошибок MyDAC компонентов
imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Перекидка баз MyDamp неполучается.

Сообщение imobile » Пт 18 янв 2013 18:35

Здравствуйте.
Есть два компьютера с одинаковыми названиями БД. надо на первом востонавить БД из другого компьютера под другим названием бд.Я на одном сохраняю через майдамп->savetofile. А на другом выбираю в коннекте другое название бд, в дампе указываю на это соединение и вызываю ресторе. Дамп в результате затирает основную бд, а то что я указал остается чистой. Как сделать правильно?

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: Перекидка баз MyDamp неполучается.

Сообщение imobile » Пн 21 янв 2013 09:40

Вот код

Код: Выделить всё

int TForm2::writes()
{
if (FolderDialog1->Execute())
{
  Form2->MyConnection2->Close();
  Form2->MyConnection2->Options->UseUnicode = false; // перед дампом выключаем UseUnicode
  Form2->MyConnection2->Options->Charset = "utf8"; // и устанавливаем Charset в utf8
  Form2->MyConnection2->Open();
  MyDump1->Connection = Form2->MyConnection2;
  MyDump1->Connection->Close();

MyDump1->TableNames="";
AnsiString fn=FolderDialog1->Directory+"\\conv.bin";
 ProgressBar1->Position=0;
MyDump1->BackupToFile(fn);
MyDump1->Connection->Close();
  Form2->MyConnection2->Options->UseUnicode = true;
ProgressBar1->Position=0;

}
}
//-----------------------------------------------------------------
if (Form2->OpenDialog1->Execute()) {
  Form2->MyConnection2->Close();
  Form2->MyConnection2->Database=AdvComboBox2->Text;//<<<------------НЕ Влияет
  Form2->MyConnection2->Options->UseUnicode = false; // перед дампом выключаем UseUnicode
  Form2->MyConnection2->Options->Charset = "utf8"; // и устанавливаем Charset в utf8
  Form2->MyConnection2->Open();
 Form2->MyDump1->Connection = Form2->MyConnection2;
   Form2->MyDump1->Connection->Close();

Form2->MyDump1->TableNames="";
AnsiString fn=Form2->OpenDialog1->FileName;
 //ProgressBar1->Position=0;
Form2->MyDump1->RestoreFromFile(fn);
  Form2->MyConnection2->Close();
  Form2->MyConnection2->Database=AdvComboBox1->Text;
  Form2->MyConnection2->Options->UseUnicode = true; // перед дампом выключаем UseUnicode
  Form2->MyConnection2->Options->Charset = "utf8"; // и устанавливаем Charset в utf8
  Form2->MyConnection2->Open();
  Form2->MyDump1->Connection = Form2->MyConnection2;
//ProgressBar1->Position=0;
}

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Перекидка баз MyDamp неполучается.

Сообщение AndreyZ » Пн 21 янв 2013 10:36

Здравствуйте,

Для решения проблемы Вам следует убрать значение doDatabase из свойства TMyDump.Objects.

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: Перекидка баз MyDamp неполучается.

Сообщение imobile » Пн 21 янв 2013 12:08

А у меня false стоит.

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: Перекидка баз MyDamp неполучается.

Сообщение imobile » Пн 21 янв 2013 16:06

галочки стоят только doTables и doData

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Перекидка баз MyDamp неполучается.

Сообщение AndreyZ » Пн 21 янв 2013 16:40

Я не могу повторить данную проблему. Я использовал следующий код:

Код: Выделить всё

{
  TMyConnection *con = new TMyConnection(NULL);
  TMyDump *dm = new TMyDump(NULL);
  try
  {
      con->Server = "server";
      con->Port = 3306;
      con->Username = "username";
      con->Password = "password";
      con->Database = "database1";
      con->LoginPrompt = False;
      dm->Connection = con;
      dm->BackupToFile("C:\\bk.bk");
      con->Close();
      con->Database = "database2";
      dm->RestoreFromFile("C:\\bk.bk");
  }
  __finally
  {
      dm->Free();
      con->Free();
  }
}
Измените пожалуйста данный код так чтобы он демонстрировал проблему. Если проблема возникает при использовании данного кода, сообщите пожалуйста следующую информацию:
- точную версию MyDAC. Вы можете найти ее на закладке About редактора TMyConnection;
- точную версию Вашей IDE.

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: Перекидка баз MyDamp неполучается.

Сообщение imobile » Вт 22 янв 2013 09:52

Все нашел. У меня стоит логин промт.
Я изменяю название БД динамически в программе, но при операции восстановления выскакивает окно соединения с БД. Я думая, что БД изменилась и в окошке правильная стоит жму коннект не смотря. А там старая БД. Логин я наверное уберу при старте, но кажется, что не совсем правильно показывать не активную БД.

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Перекидка баз MyDamp неполучается.

Сообщение AndreyZ » Вт 22 янв 2013 12:42

Для решения данной проблемы, Вам следует выполнить следующие шаги:
- кинуть на форму компонент TMyConnectDialog (если Вы его еще не используете);
- установить свойство TMyConnection->ConnectDialog в TMyConnectDialog;
- установить свойство TMyConnectDialog->StoreLogInfo в False.
Например:

Код: Выделить всё

MyConnection1->ConnectDialog = MyConnectDialog1;
MyConnectDialog1->StoreLogInfo = False;
MyConnection1->Database = "database";
MyConnection1->Open();
Вы можете найти описание опции StoreLogInfo в документации MyDAC.

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: Перекидка баз MyDamp неполучается.

Сообщение imobile » Вт 29 янв 2013 13:05

А почему если сохранить бд через mydamp с одним параметром doData она не восстонавливается? Пишет, количество колонок разная?

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: Перекидка баз MyDamp неполучается.

Сообщение imobile » Вт 29 янв 2013 13:31

И если можно поподробнее про дамп. Мне надо сделать два вида бэкапа:
1.с сохранением структуры(т.е при восстоновлении структура таблицы восстаналиваются в прежнем виде.
2 без сохранения структуры, т.е. при восстонавлении структура таблицы не восстанавливается, а восстанавливаются только данные.(вроде insert into mytable(id,name,val) values(1,"sdfg",33)
Я думал, что за это отвечают dodata,dotable.

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Перекидка баз MyDamp неполучается.

Сообщение AndreyZ » Вт 29 янв 2013 16:30

А почему если сохранить бд через mydamp с одним параметром doData она не восстонавливается? Пишет, количество колонок разная?
Если Вы используете опцию doData без doTables, TMyDump выгружает в файл только данные. При таком использовании Вам необходимо контролировать что таблица в которую Вы хотите восстановить данные имеет такое же количество столбцов как и исходная таблица.

Для того чтобы выполнить бэкап с сохранением структуры, необходимо установить обе опции doData и doTables.
Для того чтобы выполнить бэкап без сохранения структуры, необходимо установить только опцию doData.

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: Перекидка баз MyDamp неполучается.

Сообщение imobile » Вт 29 янв 2013 18:18

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

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Перекидка баз MyDamp неполучается.

Сообщение AndreyZ » Ср 30 янв 2013 09:33

Для получения только данных с указанием столбцов, Вам следует установить свойство TMyDump.Objects в doData и свойство TMyDump.Options.CompleteInsert в True.

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: Перекидка баз MyDamp неполучается.

Сообщение imobile » Чт 31 янв 2013 06:07

Спасибо.

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: Перекидка баз MyDamp неполучается.

Сообщение imobile » Чт 31 янв 2013 15:18

Извините, но у меня еще вопрос.
doData=true;
doTable=true;
При сохранении на диск, а затем восстановлении часть данных исчезло без предупреждений.
Открыл скрипт, который сгенерировал дамп
а там удалить таблицу такую-то
создать таблицу такую-то
А дальше дамп для такой-то таблицы. И часть таблиц пустые. Как такое могдло произойти? Данные там точно есть, просматриваю на исходном компьютере.

Закрыто