Страница 1 из 1

Подскажите как правильно передать значение в запрос

Добавлено: 07 апр 2006, 13:37
ART
Текст

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

function GetID(ComboBox: TComboBox): integer;
begin
  Result := -1;
  if ComboBox.ItemIndex = -1 then Exit;
  Result := Integer(ComboBox.Items.Objects[ComboBox.ItemIndex]);
end;

procedure LoadComboBox(ComboBox: TComboBox; Data: TIBSQL);
begin
  with ComboBox, Data do
  begin
    Transaction.StartTransaction;
    Clear;
    try
      ExecQuery;
      if RecordCount > 0 then
      repeat
        Items.AddObject(Fields[1].AsString, TObject(Fields[0].asInteger));
        Next;
      until Eof;
      Close;
      ItemIndex := 0;
      Transaction.Commit;
    except
      Transaction.Rollback;
    end;
  end;
end;

procedure TFSotrudnik.BitBtn3Click(Sender: TObject);
begin
 Close;
end;

procedure TFSotrudnik.FormCreate(Sender: TObject);
begin
  GET_S.SQL.Text:='Select ID, NAME from SOTRUDNIK';
  LoadComboBox(ComboBox3,GET_S); 

  GET_S.SQL.Text:='Select ID, NAME from FILIAL where ID=:Res1';
  //Проблема
  GET_S.ParamByName(Res1).AsString:=IntToStr(GetID(ComboBox3)); 
  LoadComboBox(ComboBox1,GET_S);    
end;
end.
Пытаюсь передать значение Res1:
GET_S.ParamByName(Res1).AsString:=IntToStr(GetID(ComboBox3));
Все компилируется на УРА, но при запуске программы пишет Transaction not active
Если передаю значение вот так GET_S.SQL.Text:='Select ID, NAME from FILIAL where ID='+IntToStr(GetID(ComboBox3)); То все работет без проблем. Что я делаю не так в первом случае ????

Добавлено: 07 апр 2006, 13:46
kdv
Что я делаю не так в первом случае ????
у тебя же в LoadComboBox транзакция завершается, соответственно дальше - транзакция неактивна.
вообще не делай так. т.е. не надо в вычитку значений для комбобокса транзакции пихать. Сделай ОДНУ транзакцию read-only, и через нее вычитывай справочники. Она может бесконечно работать, если, конечно, ты используешь FB 1.x/IB 7.x и выше.
www.ibase.ru/devinfo/ibtrans.htm