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

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
ART
Сообщения: 1
Зарегистрирован: 07 апр 2006, 13:07

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

Сообщение ART » 07 апр 2006, 13:37

Текст

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

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)); То все работет без проблем. Что я делаю не так в первом случае ????

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 07 апр 2006, 13:46

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

Ответить