Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2018, 08:30   #1
Etsareva
Форумчанин
 
Регистрация: 26.01.2018
Сообщений: 180
По умолчанию странное обновление в cxCombobox

доброе утро! помогите решить такой вопрос: есть форма, на ней cxCombobox. в нем отображаются некоторые данные из БД (свойства). при выборе какого-либо свойства в NextGrid отображаются значения. у каждого свойства свои значения.
но вот в чем затык, если свойства имеют одинаковое название, то данные в NextGrid как-то странно обновляются: выбираешь одно из одинаковых свойств - в гриде отображаются одни значения, другое - данные те же самые (хотя на самом деле разные). ID в бд у них разные.
если выбираешь между одинаковыми свойствами какое-то другое, то данные в NexGrid меняются. с другими свойствами все нормально.
Код:
procedure ShowVals(ID:string);
begin
  FormAddField.GridValues.ClearRows;
  with StdMainForm.ADOQuery do begin
    Sql.Clear;
    SQL.Add('Select * from ListValues where List_id='+QuotedStr(ID));
    try Open
    except
      //
    end;
  end;
  with StdMainForm.DataSource.DataSet do begin
    //Добавляем значения в таблицу
    FormAddField.GridValues.BeginUpdate;
    FormAddField.GridValues.AddRow(RecordCount);
    while not Eof do begin
      FormAddField.GridValues.Cell[0, RecNo-1].AsString:=FieldByName('Val_ID').AsString;
     FormAddField.GridValues.Cell[1, RecNo-1].AsBoolean:=false;
      FormAddField.GridValues.Cell[2, RecNo-1].AsString:=FieldByName('Value').AsString;
       FormAddField.GridValues.Cell[3, RecNo-1].AsString:=FieldByName('Code').AsString;
      FormAddField.GridValues.Cell[4, RecNo-1].AsString:=FieldByName('Description').AsString;
      Next;
    end;
    FormAddField.GridValues.EndUpdate;
  end;
end;
Etsareva вне форума Ответить с цитированием
Старый 31.05.2018, 08:47   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
но вот в чем затык, если свойства имеют одинаковое название, то данные в NextGrid как-то странно обновляются: выбираешь одно из одинаковых свойств - в гриде отображаются одни значения, другое - данные те же самые (хотя на самом деле разные). ID в бд у них разные.
если выбираешь между одинаковыми свойствами какое-то другое, то данные в NexGrid меняются.
А давайте Вы попробуете описать по шагам и с примерами, а то непонятно ничего.


Цитата:
Сообщение от Etsareva Посмотреть сообщение
Код:
try Open
    except
      //
    end;
так себе конструкция. Если не собираетесь обрабатывать исключения - незачем и try городить.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 31.05.2018, 08:56   #3
Etsareva
Форумчанин
 
Регистрация: 26.01.2018
Сообщений: 180
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
А давайте Вы попробуете описать по шагам и с примерами, а то непонятно ничего.
например: два разынх свойства с названием "Тип соединителя". у этих свойств разные значения, у первого, например: 1, 5, 6; у второго - 8, 10, 12. в БД у них разные ID. если я выбираю в combo первое свойство, в NexGrid
появляются значения 1, 5, 6; если я выбираю второе свойство, то значения не обновляются, то есть они так же и остались 1, 5, 6, хотя должны быть 8, 10, 12. Если между их выбором выбрать свойство с другим названием, но данные будут меняться в NextGrid. надеюсь, более понятней.
Etsareva вне форума Ответить с цитированием
Старый 31.05.2018, 09:02   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Смотри как ID передаешь в процедуру
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.05.2018, 09:12   #5
Etsareva
Форумчанин
 
Регистрация: 26.01.2018
Сообщений: 180
По умолчанию

Код:
ID:=MasID[cmbEnumeration.ItemIndex];
Etsareva вне форума Ответить с цитированием
Старый 31.05.2018, 09:16   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну, а как MasID формируется, может там не тот ID. Есть отладчик, поставь бряки и смотри значение чего передаешь
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.05.2018, 09:38   #7
Etsareva
Форумчанин
 
Регистрация: 26.01.2018
Сообщений: 180
По умолчанию

Аватар, ID первого из одинаковых свойств передаются правильно, а второго свойства вообще не передается

Последний раз редактировалось Etsareva; 31.05.2018 в 09:51.
Etsareva вне форума Ответить с цитированием
Старый 31.05.2018, 09:47   #8
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Etsareva Посмотреть сообщение
надеюсь, более понятней.
Намного более.

Можете привести целиком код обработки выбора наименования свойства в комбобоксе?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 31.05.2018, 09:56   #9
Etsareva
Форумчанин
 
Регистрация: 26.01.2018
Сообщений: 180
По умолчанию

Аватар, в-общем, как-то странно: если я выбираю при отладке первое из свойств, у второго ID не передается, если я выбираю, второе - у первого ID не передается....
Etsareva вне форума Ответить с цитированием
Старый 31.05.2018, 09:58   #10
Etsareva
Форумчанин
 
Регистрация: 26.01.2018
Сообщений: 180
По умолчанию

Sciv,
Код:
procedure TFormAddField.cmbEnumerationPropertiesChange(Sender:TObject);
var
  ID:string;
begin
  if (cmbEnumeration.Text='')or(chkNominalRow.Checked and(grpValuesType.ItemIndex=1)) then exit;
  GridValues.ClearRows;
  ID:=MasID[cmbEnumeration.ItemIndex];
  ShowVals(ID);
end;

procedure ShowVals(ID:string);
begin
  FormAddField.GridValues.ClearRows;
  with StdMainForm.ADOQuery do begin
    Sql.Clear;
    SQL.Add('Select * from ListValues where List_id='+QuotedStr(ID));
    try Open
    except
      //
    end;
  end;
  with StdMainForm.DataSource.DataSet do begin
    //Добавляем значения в таблицу
    FormAddField.GridValues.BeginUpdate;
    FormAddField.GridValues.AddRow(RecordCount);
    while not Eof do begin
      FormAddField.GridValues.Cell[0, RecNo-1].AsString:=FieldByName('Val_ID').AsString;
     FormAddField.GridValues.Cell[1, RecNo-1].AsBoolean:=false; //По умолчанию отмечены все значения!!!
      FormAddField.GridValues.Cell[2, RecNo-1].AsString:=FieldByName('Value').AsString;
       FormAddField.GridValues.Cell[3, RecNo-1].AsString:=FieldByName('Code').AsString;
      FormAddField.GridValues.Cell[4, RecNo-1].AsString:=FieldByName('Description').AsString;
      Next;
    end;
    FormAddField.GridValues.EndUpdate;
  end;
end;
Etsareva вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странное повидение Rockot Общие вопросы Delphi 5 08.02.2014 11:17
Странное условие... Илья Дикушин Паскаль, Turbo Pascal, PascalABC.NET 2 03.08.2013 20:32
Странное отоброжение MaRKer.nsk HTML и CSS 1 31.03.2012 18:00
Че-то странное .... ~Brilliant~ Безопасность, Шифрование 9 27.04.2009 13:57
Странное закрытие joker Win Api 18 29.03.2008 07:45