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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2009, 20:07   #1
EugeneIsmatulin
Пользователь
 
Аватар для EugeneIsmatulin
 
Регистрация: 24.05.2009
Сообщений: 64
Счастье 48 DBLookupComboBox-сов

Есть 48 DBLookupComboBox-сов все берутся из обной таблицы, как можно сделать проверку на повторяющиеся записи. Например выбрали "ЗАПИСЬ" в трех DBLookupComboBox-сах из 48 он выдает собщение и записывает в переменную что "ЗАПИСЬ"=3; или если запись одна из 48 то присваевает "ЗАПИСЬ"=1, а записей в таблице может быть много...

Подскажите а то сам не могу додуматься.
EugeneIsmatulin вне форума Ответить с цитированием
Старый 16.06.2009, 23:03   #2
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

У DBLookupComboBox'а, как и у каждого потомка ComboBox'а есть событие OnCloseUp, которое происходит при закрытии выпадающего списка.
Код:
procedure TForm1.cbox_1CloseUp(Sender: TObject);
var
 i: integer;
 N: byte;
 Mess: string;
begin
 N := 1;
 for i := ComponentCount - 1 downto 1 do
  if (Components[i] is TDBLookupComboBox) and
     (Components[i].Name <> (Sender as TDBLookupComboBox).Name) then
       if (Components[i] as TDBLookupComboBox).Text =
         (Sender as TDBLookupComboBox).Text then inc(N);

 Mess := Format('%s = %d', [(Sender as TDBLookupComboBox).Text, N]);
 ShowMessage(Mess);
end;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 17.06.2009, 11:20   #3
EugeneIsmatulin
Пользователь
 
Аватар для EugeneIsmatulin
 
Регистрация: 24.05.2009
Сообщений: 64
По умолчанию

а как потом при нажати на кнопку он мне выдавал что увас и записывал в переменную
ЗАПИСЬ1 = 5
ЗАПИСЬ2 = 7
ЗАПИСЬ3 = 1
и т.д.
и чтобы с каждой переменной можно было работать отдельно

Последний раз редактировалось EugeneIsmatulin; 17.06.2009 в 12:46.
EugeneIsmatulin вне форума Ответить с цитированием
Старый 17.06.2009, 14:29   #4
EugeneIsmatulin
Пользователь
 
Аватар для EugeneIsmatulin
 
Регистрация: 24.05.2009
Сообщений: 64
По умолчанию

или сохранять в массив и работать потом сним, подскажите а то очень надо
EugeneIsmatulin вне форума Ответить с цитированием
Старый 17.06.2009, 15:00   #5
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Вот сочинил алгоритм:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 i, j: integer;
 a: array of string;   //Вот сам заполняющийся массив
 Cap: string;           //Текст в элементе массива (то что перед знаком '=')
 x: integer;             //Число в элементе массива (то что после знака '=')
 Mess: string;         //Строка, со всеми элементами массива (для вывода сообщения)
 Exists: boolean;     //Найдено ли значение в массиве, если нет, то добавляем в массив, а если найдено, то увеличиваем число
begin
 for i := ComponentCount - 1 downto 0 do
 begin
  if (Components[i] is TComboBox) then
  begin
   if Length(a) <> 0 then
   begin
    for j := 0 to Length(a) - 1 do
    begin
     Exists := false;
     Cap := Copy(a[j], 1, Pos('=', a[j]) - 1);
     if (Components[i] as TComboBox).Text = Cap then
     begin
      x := StrToInt(Copy(a[j], Pos('=', a[j]) + 1, Length(a[j])));
      inc(x);
      a[j] := Format('%s=%d', [(Components[i] as TComboBox).Text, x]);
      Exists := true;
      Break;
     end;
    end;
    if not Exists then
    begin
     SetLength(a, Length(a) + 1);
     a[Length(a) - 1] := Format('%s=%d', [(Components[i] as TComboBox).Text, 1]);
    end;
   end
   else
   begin
    SetLength(a, Length(a) + 1);
    a[Length(a) - 1] := Format('%s=%d', [(Components[i] as TComboBox).Text, 1]);
   end;
  end;
 end;
 for i := 0 to Length(a) - 1 do
  Mess := Mess + #13#10 + a[i];
 ShowMessage(Mess);
end;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.

Последний раз редактировалось Neeter; 17.06.2009 в 15:03.
Neeter вне форума Ответить с цитированием
Старый 17.06.2009, 15:10   #6
EugeneIsmatulin
Пользователь
 
Аватар для EugeneIsmatulin
 
Регистрация: 24.05.2009
Сообщений: 64
По умолчанию

Нажимаю на кнопку он выдает пустое сообщение хотя записи в DBLookupComboBox'сах выбраны

всё разобрался просто я маленько невнимателен

Подскажите как можно очистить DBLookupComboBox
когда я выполняю
Цитата:
DBLookupComboBox1.KeyValue := DBLookupComboBox1.ListSource.DataSe t.FieldByName(DBLookupComboBox1.Key Field).Value;
он при запуске программы выводит выбранную запись примеру "ЗАПИСЬ1" а когда мы выбираем "ЗАПИСЬ2" и нам надо чтобы он вывел "ЗАПИСЬ2" он выводит "ЗАПИСЬ1" как можно очистить его как при запуске программы

Последний раз редактировалось Stilet; 18.06.2009 в 12:07.
EugeneIsmatulin вне форума Ответить с цитированием
Старый 17.06.2009, 15:37   #7
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Код:
всё разобрался просто я маленько невнимателен
Дада я просто не ставил на форму DBLookupComboBox'ы, а просто ComboBox'ы)
Еще - научитесь пользоваться правкой сообщений, а то три поста подряд не смотрятся...

С другим вопросом я немного не понял... Поподробней, где вы выполняете тот код и что значит "очистить" - это вывести первую запись или пустой текст?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 17.06.2009, 15:43   #8
EugeneIsmatulin
Пользователь
 
Аватар для EugeneIsmatulin
 
Регистрация: 24.05.2009
Сообщений: 64
По умолчанию

Есть таблица в ней записи добалены из другой таблицы с помощью DBLookupComboBox'а есть кнопка редактировать мы выбираем запись для редактирвания в DBGrid и нажимаем на кнопку с помощью кода
Код:
DBLookupComboBox1.KeyValue := DBLookupComboBox1.ListSource.DataSe t.FieldByName(DBLookupComboBox1.Key Field).Value;
выбраная запись в ставляется DBLookupComboBox правельно но это только когда запустили программу а потом выбираем другую запись а она остается предедущей.
EugeneIsmatulin вне форума Ответить с цитированием
Старый 17.06.2009, 16:08   #9
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

У меня все работает
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 17.06.2009, 18:07   #10
EugeneIsmatulin
Пользователь
 
Аватар для EugeneIsmatulin
 
Регистрация: 24.05.2009
Сообщений: 64
По умолчанию

Спасибо за помощь..

Последний раз редактировалось EugeneIsmatulin; 17.06.2009 в 20:44.
EugeneIsmatulin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DBLookupComboBox SunKnight Компоненты Delphi 6 25.02.2012 08:55
DBLOOKUPCOmbobox!!! pr0b3l Компоненты Delphi 1 02.06.2009 04:51
DBLookupComboBox Sergius X БД в Delphi 6 08.05.2009 17:08
DBLookupComboBox andirock2112 БД в Delphi 4 22.04.2009 14:40
DBLookupCombobox??? Alexcandr Компоненты Delphi 2 05.04.2007 16:46