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


Автор: TVA 7.8.2005, 23:13
Вроде тут все просто а не получается smile

Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
WorkQuery->Active=False;
WorkQuery->SQL->Clear();
WorkQuery->SQL->Add("SELECT max(TOVAR_KOD), min(TOVAR_KOD) FROM 'mb.db'");
WorkQuery->ExecSQL();

 Max_Value=WorkQuery->FieldByName("MAX OF TOVAR_KOD")->AsInteger;
 Min_Value=WorkQuery->FieldByName("MIN OF TOVAR_KOD")->AsInteger;



 ProgressBar1->Min=Min_Value;
 ProgressBar1->Max=Max_Value;
 ProgressBar1->Step=1;

  for (i=Min_Value; i<Max_Value; i++) 
   {

   

    WorkQuery->Active=False;
    WorkQuery->SQL->Clear();
    WorkQuery->SQL->Add("SELECT * FROM 'mb.db' WHERE KOD_TOVARA LIKE '"+i+"' ");
    WorkQuery->Active=True;

    double Cena=WorkQuery->FieldByName("CENA")->AsFloat;
    AnsiString Mg=WorkQuery->FieldByName("SKIDKA")->AsString;  

 

    WorkQuery->Active=False;
    WorkQuery->SQL->Clear();
    WorkQuery->SQL->Add("SELECT * FROM 'mbd.db' WHERE KOEF_SK LIKE '"+Mg+"' ");
    WorkQuery->Active=True;

    double Koeficent=WorkQuery->FieldByName("KOEF_SK")->AsFloat;  



    double Zakupka=Cena*Koeficent;


   

    WorkQuery->Active=False;
    WorkQuery->SQL->Clear();
    WorkQuery->SQL->Add("UPDATE 'mb.db' SET NEW_CENA = '"+Zakupka+"' WHERE TOVAR_KOD = '"+i+"' ");
    WorkQuery->ExecSQL();

  

    ProgressBar1->StepIt();
   }


Доходит до строки
Код

 WorkQuery->SQL->Add("SELECT * FROM 'mb.db' WHERE KOD_TOVARA LIKE '"+i+"' ");


И пишет [C++ Error] main.cpp(64): E2085 Invalid pointer addition

Max_Value, Min_Value, i - глобальные переменные integer.

Стыдно наверно задавать такие вопросы но поверьте с циклами вообще еще не разу не приходилось работать smile

Автор: chaos 8.8.2005, 07:13
я бы на твоем месте сделал так:
Код

WorkQuery->SQL->Text = "SELECT * FROM 'mb.db' WHERE KOD_TOVARA = :kod");
WorkQuery->Prepare();

for (i=Min_Value; i<Max_Value; i++) 
{
    WorkQuery->Parameters->ParamByName("kod")->Value = i;

    WorkQuery->Active=True;

    double Cena=WorkQuery->FieldByName("CENA")->AsFloat;
    AnsiString Mg=WorkQuery->FieldByName("SKIDKA")->AsString;  
    //........
    WorkQuery->Active=False;
    //........
}


Автор: TVA 8.8.2005, 07:28
Спасибо, сегодня попробую, будем надеятся что усе получится smile

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