Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Проблема с MySQL


Автор: ChihPih 24.11.2007, 17:19
Привет всем!
Мне нужно, что бы программа восстанавливала базу данных, если она повреждена. Для этого яделаю проверку целостности табиц. Если проверка не прошла, то восстанавливаю базу!

А восстанавливаю так:

Код

bool RepairBD()
{
  bool check = false;
  FILE *f = fopen("C:\\repair_bd.sql", "r");
  int f_size = filesize(f);
  char *buf = new char[f_size + 1];
  
  fread(buf, 1, f_size, f);
  int res = mysql_query(con, buf);
  if (res == 0){ check = true; }
  delete[] buf;
  fclose(f);
  return check;
}


Проблема следующая:
Этот запрос не выполняется, говорит типа, что в строчке №... находится символ ' и он здесь не уместен!
Хотя такого символа в файле нет, и даже когда я выводил содержимого файла через MessageBox, такого символа там тоже небыло!
Файл "repair_bd.sql" содержит команды на создание таблиц и всего прочего! Все запросы я проверял, они написаны правильно!

Почему так получается? 

Автор: Anark1 24.11.2007, 20:46
ChihPih, так выложи эту самую строчку.

Автор: ChihPih 25.11.2007, 11:33
Почему-то всегда он кричит на 1,2 или 3-тию строчку!
Вот отрывок текста запроса:

Код

CREATE TABLE `class_man` (
  `id` int(11) NOT NULL auto_increment,
  `dist` int(11) default NULL,
  ...
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=cp1251;


Ошибку выдает такую:

Ошибка в синтаксисе..., а именно:
`dist`', строка 3 символ ';

Автор: Anark1 25.11.2007, 13:42
Так сложно сказать в чем ошибка. Попробуй удалить третью строку и посмотреть что получится.

Автор: ChihPih 25.11.2007, 21:54
Ха, щас я пробовол снова выполнить запрос и он у меня ругался уже на другую строчку, в которой выполняется запрос: INSERT INTO ...!
И опять же он показывал, что не уместен здесь знак: ' ! Хотя в файле его нет!
Еще я заметил, что он дописывает в конце переменной buf какие-то кривые символы(ненужные)!
Вот функция filesize, которой я определял размер файла:

Код

long filesize(FILE *stream)
{
   long curpos, length;

   fseek(stream, 0L, SEEK_END);
   length = ftell(stream);
   rewind(stream);
   return length;
}


Я перепробовал, кучу способ считывания файла, ни один не помог, все таже проблема!
Я просто незнаю уже, что можно сделать!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)