Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.11.2011, 01:19
Chinvad Chinvad вне форума
Прохожий
 
Регистрация: 23.11.2011
Сообщения: 23
Репутация: 10
По умолчанию DBLookupComboBox ослеп

Здравствуйте, уважаемые! Очень нужна помощь.
DBLookupComboBox выводит из таблицы Access некоторые виды услуг (по категориям... типа Женский, Мужской зал и т.п.) в некоторой парикмахерской. Но так как возможности салона постоянно расширяются, появляется потребность в добавлении нового вида услуг... Для этого в таблице есть запись "ДРУГОЕ", которая также отражается в DBLookupComboBox. Так вот при клике на эту запись происходит редактирование таблицы, в результате которого вместо "ДРУГОЕ" появляется введенная пользователем запись. А уже потом к таблице добавляется очередная безликая запись "ДРУГОЕ"... все это для того чтобы она была в списке последней (для удобства просмотра и осознания необходимости добавления новой услуги). Код я приведу чуть ниже... Так вот в чем же проблема! Один раз я это дело протестировала... Добавилась к таблице моя новая запись, а ниже ее нарисовалось и то самое "ДРУГОЕ". Все это отразилось вот прямо как надо в DBLookupComboBox. НО! Второй раз я это проделать не могу.
PHP код:
if (DBLookupComboBox3.Text='ДРУГОЕ'then
   begin
   
if DM.Uslugi.Locate('категория;услуга',VarArrayOf([ComboBox1.Text,DBLookupCombobox3.Text]),[]) then
      begin
      
//На место записи с пометкой "Другое" вставляем запись с новой услугой
      
DM.Uslugi.Edit;
      
DM.Uslugi.FieldByName('услуга').AsString:=InputBox('Запись','Введите описание оказанной услуги.','');
      
DM.Uslugi.FieldByName('стоимость_услуги').AsFloat:=StrToFloat(InputBox('Запись','Введите стоимость оказанной услуги.',''));
      
DM.Uslugi.Post;

      
//Выводим на форму
      
DBLookupCombobox3.KeyValue := DM.Uslugi.FieldByName('услуга').AsString;
      
Edit1.Text:=FloatToStr(DM.Uslugi.FieldByName('стоимость_услуги').AsFloat);

      
//Заново создаем запись с пометкой "Другое" (чтобы она была в списке последней)
      
DM.Uslugi.Insert;
      
DM.Uslugi.FieldByName('категория').AsString:=ComboBox1.Text;
      
DM.Uslugi.FieldByName('услуга').AsString:='ДРУГОЕ';
      
DM.Uslugi.Post;
      
end;
   
end
Вхожу на F7 в процедуру и наблюдаю следующее:
Доходит до строчки
PHP код:
if (DBLookupComboBox3.Text='ДРУГОЕ'then 
и не принимая мой добросовестный клик на "ДРУГОЕ" благополучно скачет на end;
Я в тупике, господа... Помогите, пожалуйста!!! ))
Ответить с цитированием
  #2  
Старый 23.11.2011, 08:27
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Перед строчкой
Код:
if (DBLookupComboBox3.Text='ДРУГОЕ') then
допишите строчку
Код:
ShowMessage(DBLookupComboBox3.Text);
что будет выводиться в первом и втором случае.
__________________
Google в помощь
Ответить с цитированием
  #3  
Старый 23.11.2011, 10:56
Chinvad Chinvad вне форума
Прохожий
 
Регистрация: 23.11.2011
Сообщения: 23
Репутация: 10
По умолчанию

PHP код:
ShowMessage(DBLookupComboBox3.Text); 
Выводит строчку перед "ДРУГОЕ"...
Ответить с цитированием
  #4  
Старый 23.11.2011, 11:03
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Вы несколько неверно сделали. Делается следующее. Источником данных для вашего лукапа формируется запрос вида:
Код:
select Код,Услуга from Услуги
union
select -1,'другое'
Т.е. Другое - это не реальная запись в БД, а дополнительная строка в наборе данных. Теперь при выборе значения из лукапа вам останется только проверить значение кода на -1 т.е. несуществующее значение в справочнике.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 23.11.2011, 11:38
Chinvad Chinvad вне форума
Прохожий
 
Регистрация: 23.11.2011
Сообщения: 23
Репутация: 10
По умолчанию

Я тоже так подумала сначала... Но как же так... Открываю БД в Access, а там все мои записи, вот именно так, как я их вводила. Они и отражаются в DBLookupComboBox3.Text. Что я делаю принципиально не так???
Ответить с цитированием
  #6  
Старый 23.11.2011, 11:53
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Попробуйте после строчки
Код:
DM.Uslugi.Post; 
Написать следующее:
Код:
DBLookupComboBox3.ListSource.DataSet.Close;
DBLookupComboBox3.ListSource.DataSet.Open;
__________________
Google в помощь
Ответить с цитированием
  #7  
Старый 23.11.2011, 12:40
Chinvad Chinvad вне форума
Прохожий
 
Регистрация: 23.11.2011
Сообщения: 23
Репутация: 10
По умолчанию

Не помогает. Он даже в условие if не заходит, просто не видит эту строчку. Переделала все в самой БД. Открываю-закрываю наборы данных, бестолку. Страдалецъ прав... но я не понимаю почему я не могу делать так, как сделала )

Последний раз редактировалось Chinvad, 23.11.2011 в 12:48.
Ответить с цитированием
  #8  
Старый 23.11.2011, 15:10
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Если отбросить элемент мистики, то сделайте следующее:
1. Сделайте точку останова на
if (DBLookupComboBox3.Text='ДРУГОЕ') then
2. Вызовите окошко Evaluate/Modify по Ctrl+F7
3. Вычислите выражение DBLookupComboBox3.Text='ДРУГОЕ'
Если значение в DBLookupComboBox3.Text = 'ДРУГОЕ' а результат вычисление все-же False то либо Дельфи баганулся и тут перезагрузка компа может помочь, либо что более вероятно, у вас действительно 'ДРУГОЕ' <> 'ДРУГОЕ', а тут может быть например подмена буковок:

'ДPУГОЕ' <> 'ДРУГОЕ'
'ДРУГOЕ' <> 'ДРУГОЕ'
'ДРУГОE' <> 'ДРУГОЕ'

Все три приведенных неравенства истинны
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 23.11.2011, 19:44
Chinvad Chinvad вне форума
Прохожий
 
Регистрация: 23.11.2011
Сообщения: 23
Репутация: 10
По умолчанию

Вопрос закрыт ) Слава Ildar-tsrУ )) Если кому-то интересно, то DBLookupCombobox3.Text везде нужно заменить на DBLookupComboBox3.KeyValue.

Последний раз редактировалось Chinvad, 23.11.2011 в 21:40.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter