Форум для программистов - задавайте интересные вопросы - получайте квалифицированные ответы
Не работает UPDATE
  • streetwalkerstreetwalker June 2011
    Есть 3 таблицы на форме и в базе, которые нужно обновить. После выполнения следующего кода на форме остаются 3 таблицы, которые превращаются каждая в одну единственную пустую ячейку.
    Что я делаю не так? Я в первый раз работаю с базами, поэтому ищу самые простые варианты.
    Код:

    procedure change_db(t_l:string; t_f, t_b, s_q:integer);
    {t_l - название материала t_f - новое значение в ячейке таблицы tank_f t_b - новое значение в ячейке таблицы tank_b s_q - номер записи, совпадает во всех 3-х таблицах}
    var i,j,g:string;
    begin {ADOQuery3 отображает на форме таблицу, которую надо обновить ADOQuery3 - select * from tank_f; }
    i:='UPDATE tank_f SET tank_f.free = :t_f WHERE (((tank_f.tank)=:s_q))';
    form1.ADOQuery3.SQL.Text:=i;
    Form1.ADOQuery3.ExecSQL; {ADOQuery5 отображает на форме таблицу, которую надо обновить ADOQuery5 - select * from tank_b; }
    j:='UPDATE tank_b SET tank_b.busy = :t_b WHERE (((tank_b.tank)=:s_q))';
    3form1.ADOQuery5.SQL.Text:=j;
    form1.ADOQuery5.ExecSQL;
    {ADOQuery4 отображает на форме таблицу, которую надо обновить ADOQuery4 - select * from tank_liquid; } g:= 'UPDATE tank_liquid SET tank_liquid.liquid = :t_l WHERE (((tank_liquid.tank)=:s_q))'; form1.ADOQuery4.SQL.Text:=g; form1.ADOQuery4.ExecSQL; end; procedure add_to_H1(x:integer);
    var i:integer;
    begin
    for i:=low(tank_f) to high(tank_f)
    do begin if (x>0) and (tank_b[i]=0) and (tank_f[i]=50) then
    begin
    x:=x-tank_f[i];
    tank_b[i]:=tank_f[i];
    t_b:=tank_b[i];
    tank_f[i]:=0; t_f:=tank_f[i];
    sq:=i; change_db(material,t_f,t_b,sq); //material - глобальная переменная
    end;
    end;
    end;

  • RECursorRECursor June 2011
    ADOQuery3,4,5 - эти компоненты у вас отображают таблицы через SELECT, но когда вы заменяете SELECT на UPDATE, то естественно таблицы пропадают, обновляйте компонентом ADOCommand из вкладки ADO:

    Код:

    ADOCommand1.CommandText := 'UPDATE таблица1 SET поле=значение WHERE поле=значение'; ADOCommand1.Execute; ADOCommand1.CommandText := 'UPDATE таблица2 SET поле=значение WHERE поле=значение'; ADOCommand1.Execute; // и т.д.

Webparadox - разработка мобильных приложений под iOS и Android.