Показать сообщение отдельно
  #7  
Старый 27.04.2011, 07:36
Vocabulary Vocabulary вне форума
Новичок
 
Регистрация: 17.09.2009
Сообщения: 85
Репутация: 9
По умолчанию

Один из вариантов решения задачки.
Нет нужды применять два комбобокса (один для текста, другой для идентификатора). ID может храниться в том же комбобоксе что и текст.
Код:
procedure TFormPacient.OblastChange(Sender: TObject);
var IDObl:Integer;
begin
  IDOblast.itemIndex:=Oblast.ItemIndex;
  IDObl:=StrToInt(IDOblast.Text);
  PacientCity.Open;
  City.clear;
  PacientCity.First;
  while not PacientCity.Eof do begin
    City.AddItem(PacientCity.FieldValues['NCity'],
                     TObject(PacientCity.FieldValues['IDCity']));
    PacientCity.next;
  end;
  City.itemindex:=0;
  PacientCity.Close;
end;
//получения сохраненного значения ID:
//  if City.ItemIndex > -1 then
//    IDCity := Integer(City.Items.Objects[City.ItemIndex]);
Если IDObl переменная целого типа (Integer), то ее значение в запросе необходимо конвертировать в строку (SQL запрос - это текст)
Код:
'where IDOblast='+IntToStr(IDObl)
Если запрос сформирован в редакторе, то IDObl должен быть параметром:
Код:
select IDCity,IDOblast, NCity
from City
where IDOblast = :IDObl
order by NCity
И перед открытием датасета нужно присвоить этому параметру значение:
Код:
  DS.ParamByName('IDObl').Value := IDObl; //имена параметров и переменных не обязательно должны совпадать
Ответить с цитированием