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


Автор: Lim4 30.12.2008, 16:56
Подскажите пожалуйста возможную причину невыполнения некоторых запросов. Подсоединение делалось http://forum.codenet.ru/showthread.php?t=29026.  Все манипуляции с таблицей 'prazdniki' у меня работают. Вот они:
Код

   if (Con){
         AnsiString  query4ist_Prazd = "truncate table `my1_db`.`prazdniki`;";
         mysql_real_query(Con,query4ist_Prazd.c_str(),query4ist_Prazd.Length());   // 4istim tablicu prazdnikov

   for(int i=0; i<total_days + 1; i++){
         AnsiString  queryProm = "INSERT INTO `my1_db`.`prazdniki` (`date_p`) VALUES ('"+ IncDay(dat1,i)+"'); "; 
         mysql_real_query(Con,queryProm.c_str(),queryProm.Length());          }
    for(int j=0; j<Memo1->Lines->Count; j++ ){
         AnsiString  queryUpdPrazdn = "UPDATE  `my1_db`.`prazdniki` SET `priznak`= '1' WHERE `prazdniki`.`date_p`='" +Memo1->Lines->Strings[j]+ "';";
         mysql_real_query(Con,queryUpdPrazdn.c_str(),queryUpdPrazdn.Length());
    }
 }


А похожие с таблицей 'kurs' - нет. Только выполняется(!) очистка таблицы, а другие запросы на вставку и обновление не выполняются, хотя  цикл проходит, что доказывает выдача сообщений. Пробовала писать полный путь к полям, тоже не помогает. 
Код

 if (Con){
       
      AnsiString  query4ist_Kurs = "truncate table `my1_db`.`kurs`;";
      mysql_real_query(Con,query4ist_Kurs.c_str(),query4ist_Kurs.Length());   // 4istim tablicu kursov valyut

   for(int i = 1; i<StrGrKurs->RowCount; i++){
      AnsiString  queryPromK = "INSERT INTO `my1_db`.`kurs` (`dayv`) VALUES (' "+ StrGrKurs->Cells[0][i] +" '); "; 
      mysql_real_query(Con,queryPromK.c_str(),queryPromK.Length());

        AnsiString  queryKurs = "INSERT INTO  `my1_db`.`kurs` (`griven_za`) VALUES (' "+ StrGrKurs->Cells[0][i] +" ');";
        mysql_real_query(Con,queryKurs.c_str(),queryKurs.Length());
       // ShowMessage("Ya zdes'!");
                                             }
        AnsiString  queryKurss = "UPDATE  `my1_db`.`kurs`  SET `griven_za_dollar` = `griven_za`/`kol` ;";
        mysql_real_query(Con,queryKurss.c_str(),queryKurss.Length());
          }




Если вставлять не стринггриды, а любые цифры, тоже не делает. В базе чистая таблица :(.... Почему же программа её чистит, а вставлять ну ничего не хочет? smile 

Автор: Mpak 30.12.2008, 19:18
Никогда не использовал этот метдо (если честно никогда не получалось прикрутить мускуль к борману smile)
Попробую лишь предположить:
Цитата(Lim4 @  30.12.2008,  19:56 Найти цитируемый пост)
INSERT INTO `my1_db`.`kurs` (`dayv`) VALUES (' "+ StrGrKurs->Cells[0][i] +" '); 

Может проблема в лишнем первом пробеле значения в ячейку `dayv`?

P.S. StrGrKurs - это TStringGrid?

Автор: mrbrooks 31.12.2008, 08:40
Lim4, а отчего ты не хочешь использовать инструментарий поставляемый в самом Бормане, либо сторонними разработчиками. Работа с API мускула дело геморное и достаточно не благодарное.

Автор: Бонифаций 1.1.2009, 16:03
а почему вы не проверяете результат выполнения mysql запроса?

Вместо 
Код

 mysql_real_query(Con,queryPromK.c_str(),queryPromK.Length());


должно быьт что то типа
Код

if (mysql_real_query(Con,queryPromK.c_str(),queryPromK.Length()) != 0) {
  ShowMessage(mysql_error(Con));
}



Автор: Lim4 5.1.2009, 15:26
 smile  Ваши советы оказались полезны, спасибо. Во-первых, действительно, пробелы там лишние, а во-вторых, кааааааак посыпались ошибки запросов smile , когда я поставила, чтобы они выводились. Запросы не соответствовали настройкам полей таблицы.  mrbrooks,  не то чтобы "не хочу", просто не было практики, какой способ первый нашла, таким и пользуюсь.  smile    Всё исправила, всё работает. Виват, Винград!

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