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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.08.2011, 23:22
Аватар для Homo-Fantasmus
Homo-Fantasmus Homo-Fantasmus вне форума
Прохожий
 
Регистрация: 23.08.2011
Адрес: МО
Сообщения: 46
Версия Delphi: Delphi, Lazarus
Репутация: 10
По умолчанию Как выбрать нужную запись из БД ?

Доброго времени суток.
Подскажите люди добрые.
Имеется:
1)Таблица БД Acces c полями <Тип>, <Модель>, <Чувствительность>, <Мощность>.
2)Форма с объектами БД ADOConnection1, DataSource1, ADOQuery1, DBLookupComboBox1 и несколько Edit (Edit1...Edit6).

В результате некоторого действия (не суть какого) из таблицы БД в DBLookupComboBox1 добавляется поле (столбец) <Модели>.

Я хочу чтобы при выборе из DBLookupComboBox1 конкретной записи (модели), в Edit5 добавлялась соответствующая выбранной модели запись из поля <Чувствительность> БД.

Подскажите как это можно реализовать.

edit5.Text := ???

Пробовал так:
Код:
procedure TForm1.DBLookupComboBox1Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT модель, чувствительность FROM Speaker WHERE модель = DBLookupComboBox1.Text');
ADOQuery1.Open;
edit5.Text := ADOQuery1.FieldByName('чувствительность').AsString;
end;
Админ: Пользуемся тегами для оформления кода!

В результате после запуска проги как только я кликаю на нужную запись в DBLookupComboBox1 появляется сообщение об ошибке следующего содержания - <... параметр чувствительность не имеет значения по умолчанию.>

Последний раз редактировалось Admin, 26.08.2011 в 10:02.
Ответить с цитированием
  #2  
Старый 26.08.2011, 06:03
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Поставь в свойстве комбобокса KeyField поле <Чувствительность>.
Обрабатывать правильнее событие onCloseUp:
Код:
procedure TForm1.DBLookupComboBox1CloseUp(Sender: TObject);
begin
  Edit5.Text:= DBLookupComboBox1.KeyValue;
end; 
Если поле Чувствительность числовое то используй IntToStr при присвоении.
Код:
  Edit5.Text:= inttostr(DBLookupComboBox1.KeyValue);
__________________
Google в помощь

Последний раз редактировалось Ildar-tsr, 26.08.2011 в 07:48.
Ответить с цитированием
  #3  
Старый 27.08.2011, 22:48
Аватар для Homo-Fantasmus
Homo-Fantasmus Homo-Fantasmus вне форума
Прохожий
 
Регистрация: 23.08.2011
Адрес: МО
Сообщения: 46
Версия Delphi: Delphi, Lazarus
Репутация: 10
По умолчанию

Увы появляется всё таже ошибка - <... параметр чувствительность не имеет значения по умолчанию.> И в Edit5 ни чего не появлятся

У меня на форме имеется ещё два переключателя в зависимости от того какой из них активен устанавливается то или иное значение по умолчанию (при загрузке формы)

Код HTML:
procedure TForm1.RadioButton1Click(Sender: TObject); begin if radiobutton1.Checked = true then begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT Speaker.[Код], Speaker.[Тип], Speaker.[Модель], Speaker.[Чувствительность (ДБ)], Speaker.[Мощностные режимы], Speaker.[Формула] FROM Speaker WHERE (((Speaker.[Тип])="потолочный"))'); ADOQuery1.Open; DBLookupComboBox1.KeyValue := DBLookupComboBox1.ListSource.DataSet.FieldByName(DBLookupComboBox1.KeyField).Value; //Установление значения по умолчанию DBLookupComboBox1.Refresh; end; end; procedure TForm1.RadioButton2Click(Sender: TObject); begin if radiobutton2.Checked = true then begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT Speaker.[Код], Speaker.[Тип], Speaker.[Модель], Speaker.[Чувствительность (ДБ)], Speaker.[Мощностные режимы], Speaker.[Формула]FROM Speaker WHERE (((Speaker.[Тип])="настенный"))'); ADOQuery1.Open; DBLookupComboBox1.KeyValue := DBLookupComboBox1.ListSource.DataSet.FieldByName(DBLookupComboBox1.KeyField).Value; //Установление значения по умолчанию DBLookupComboBox1.Refresh; end;

a2.jpg
Ответить с цитированием
  #4  
Старый 29.08.2011, 11:28
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Код:
procedure TForm1.DBLookupComboBox1Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT модель, чувствительность FROM Speaker WHERE модель = DBLookupComboBox1.Text');
ADOQuery1.Open;
edit5.Text := ADOQuery1.FieldByName('чувствительность').AsString;
end;
Какая- то фигня получается. Откуда в DBLookupComboBox1.Text будет значение, если вы только что закрыли dataset. DBLookupComboBox сам ставит указатель в нужное место.

Код:
procedure TForm1.DBLookupComboBox1OnChange(Sender: TObject);
begin
edit5.Text := ADOQuery1.FieldByName('чувствительность').AsString;
end;
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 29.08.2011 в 11:37.
Ответить с цитированием
  #5  
Старый 29.08.2011, 14:21
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

У тебя короче в каком то из запросов ошибка синтаксиса. Придется тебе их все просмотреть.
Вот пример ошибочного запроса:
Код:
ADOQuery1.SQL.Add('SELECT модель, чувствительность FROM Speaker WHERE модель = DBLookupComboBox1.Text');
В чем же ошибка? Дело в том что поле модель у тебя текстовое и условие запроса должно выглядит следующим образом:
Код:
where модель = 'название_модели'
Обрати внимание на то, что в твоем запросе кавычек попросту нет. Если же запрос составляется из делфи (как в твоем случаи), то кавычки обозначаются как '' (это не двойная кавычка, а одинарная два раза подряд), т.е. будет вот так:
Код:
ADOQuery1.SQL.Add('SELECT модель, чувствительность FROM Speaker WHERE модель = ''' + DBLookupComboBox1.Text + '''');
Просмотри все запросы составленные тобою и аналогично исправь по данному примеру.

P.S. А вообще здорово было бы если б ты базу данных и прогу свою скинул на всеобщее обозрение, а то мы так до пенсии косяки вылавливать будем.
__________________
Google в помощь

Последний раз редактировалось Ildar-tsr, 29.08.2011 в 14:24.
Ответить с цитированием
  #6  
Старый 29.08.2011, 17:33
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Уважаемый Ildar-tsr вы видимо не читали мой предыдущий пост, или не поняли, поэтому поясняю: все действия с базой надо производить не в событии onclick а в событии onchange, после того как компонент DBLookupComboBox закончит "свои" действия с базой, а поскольку DBLookupComboBox сидит на том же датасете, с которого берутся данные для edit5, всё что помечено красным на*** не нужно
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 29.08.2011 в 17:36.
Ответить с цитированием
  #7  
Старый 29.08.2011, 18:24
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Уважаемый Viajero, пост предназначался не Вам.
Плюс мне действительно интересно, как Вы повесите данное действие на onChange компонента DBLookupComboBox... В данном случае onCloseUp (как я и писал выше).
Давайте дождемся когда автор темы предоставит исходники.

P.S. По выложенным скриншотам уже понятно, что автор скорее всего использует несколько запросов. Конкретно указанный Вами действительно лишний, но и в остальных по его примеру наверняка присутствуют подобные ошибки.
__________________
Google в помощь

Последний раз редактировалось Ildar-tsr, 30.08.2011 в 09:38.
Ответить с цитированием
  #8  
Старый 30.08.2011, 10:58
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Как видно из предыдущих постов
Цитата:
2)1)Таблица БД Acces c полями <Тип>, <Модель>, <Чувствительность>, <Мощность>.
2)Форма с объектами БД ADOConnection1, DataSource1, ADOQuery1, DBLookupComboBox1 и несколько Edit (Edit1...Edit6).
датасет всё таки один.
Да я совершил ошибку: в DBLookupComboBox нету onchange, но я имел ввиду DBComboBox, т к DBLookupComboBox здесь повидимости тоже на*** не нужен.
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 30.08.2011 в 11:01.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter