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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2010, 23:38   #1
LeX2009
 
Регистрация: 29.04.2009
Сообщений: 9
По умолчанию В зависимости от значения в ComboBox1 выводить значения в ComboBox2

Существует две таблицы (MS Access): 1. Специальности; 2. Факультеты

Поля таблицы "Факультеты":
1. КФакультета (ключевое поле)
2. Факультет

Поля таблицы "Специальности":
1. КСпециальности (ключевое поле)
2. Специальность
3. КФакультета (вторичный ключ)

Использовала такие компоненты как: ADOConnection, ADOTable и DataSource.
На форме 2 ComboBox`а. В ComboBox1 вывожу данные из таблицы Факультеты, поле Факультет. По событию ComboBox1Change необходимо в ComboBox2 вывести все специальности, которые привязаны именно к тому факультету, который был выбран в ComboBox1.

P.S.: по поиску честно искала, есть похожее немного, но я в этом новичок и то, что я нашла не смогла применить(( Я так понимаю, это будет sql-запрос. Помогите пожалуйста.
LeX2009 вне форума Ответить с цитированием
Старый 19.05.2010, 23:53   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Код:
with TADOQuery.create(self) do
begin
try
Connection:=ADOConnection1;// нужно указать ваш компонент TADOConnection или вместо этого можно сформировать строку подключения
sql.Text:=
'SELECT Специальность as sp '+
'FROM Специальности Right Join Факультеты on ' +
' Специальности.КФакультета=Факультеты.КФакультета' +
' WHERE Факультет=' + Combobox1.text;
open;
if not IsEmpty then
    begin
 ComboBox2.Clear;
   while not Eof do
       begin
ComboBox2.Items.Add(FieldByName('sp').AsString);   
       next;
       end;
    end;
 finally
  Free;
end;
end;

Последний раз редактировалось vovk; 20.05.2010 в 01:53. Причина: подправил
vovk вне форума Ответить с цитированием
Старый 20.05.2010, 00:13   #3
LeX2009
 
Регистрация: 29.04.2009
Сообщений: 9
По умолчанию

Спасибо большое, что откликнулись)
Только при компиляции почему-то ругается на первую строчку, говорит:
Not enough actual parameters.
LeX2009 вне форума Ответить с цитированием
Старый 20.05.2010, 00:20   #4
LeX2009
 
Регистрация: 29.04.2009
Сообщений: 9
По умолчанию

Исправила) Написала:
var
qry1: TADOQuery;
И заменила with TADOQuery.create do на with qry1 do

Теперь программа запускается, только почему-то при выборе факультета, она вылетает с ошибкой на строке: Connection:=ADOConnection1;
Ошибка связана с чтением по адресу... что-то вроди этого.
LeX2009 вне форума Ответить с цитированием
Старый 20.05.2010, 00:33   #5
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

а ну да, тут писал забыл, надо было так
Код:
with TADOQuery.create(self) do
Цитата:
Использовала такие компоненты как: ADOConnection, ADOTable и DataSource.
предполагалось что тут укажите свой компонент ADOConnection, яже не знаю где он у вас расположен, и какое у него имя

Последний раз редактировалось vovk; 20.05.2010 в 00:50.
vovk вне форума Ответить с цитированием
Старый 20.05.2010, 00:59   #6
LeX2009
 
Регистрация: 29.04.2009
Сообщений: 9
По умолчанию

Как же плохо быть глупой...((
Теперь оно ругается так: Выбираю Факультет "ФИР", программа вылетает с ошибкой -> Параметр ФИР не имеет значения по умолчанию(( И так с любой записью, которую я выбираю..
Вы не подскажите в чём тут проблема...

Последний раз редактировалось LeX2009; 20.05.2010 в 01:06.
LeX2009 вне форума Ответить с цитированием
Старый 20.05.2010, 01:05   #7
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

хмм, а комбобокс в котором факультеты как заполняете?. лучше выложите тут проект, так быстрее будет
А вылетает где ? на open? если да можно
Код:
sql.Text:=
'SELECT Специальность as sp '+
'FROM Специальности Right Join Факультеты on ' +
' Специальности.КФакультета=Факультеты.КФакультета' +
' WHERE Факультет=:fct'; 
Parameters.ParamByName('fct').Value:=combobox1.Text;
open;

Последний раз редактировалось vovk; 20.05.2010 в 01:35.
vovk вне форума Ответить с цитированием
Старый 20.05.2010, 01:34   #8
LeX2009
 
Регистрация: 29.04.2009
Сообщений: 9
Радость

Только не обращайте внимания, там творческий беспорядок, но если всё получится, то мне придётся это применять не раз и на многих формах, а на скольких узнаю в процессе разработки))
Выложила без exe, скорость ужасная.. очень долго отправляет((
P.S.: У вас может ещё быть такая проблема: этот проект у меня запускается нормально, а на других компах ругается на Connection... может просто заново придётся прописать путь к базе в ADOConnection
Вложения
Тип файла: rar Проект1.rar (51.2 Кб, 31 просмотров)
LeX2009 вне форума Ответить с цитированием
Старый 20.05.2010, 01:55   #9
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Код:
with TADOQuery.create(self) do
begin
try
Connection:=Form1.ADOConnection1;
sql.Text:=
'SELECT Специальность as sp '+
'FROM Специальности Right Join Факультеты on ' +
' Специальности.КФакультета=Факультеты.КФакультета' +
' WHERE Факультет=:fct';
Parameters.ParamByName('fct').Value:=combobox2.Text;
open;
if not IsEmpty then
    begin
 ComboBox1.Clear;
   while not Eof do
   begin
   ComboBox1.Items.Add(FieldByName('sp').AsString);
   next;
   end;

    end;
 finally
  Free;
end;
Так будет работать, хотя должно было и без параметра, и ещё мне очень стыдно, я там красным выделил то, что забыл до этого (всё таки спать иногда надо), без некста это бесконечный цикл

PS: а чтоб на других компьютерах без проблем работало, легче просто формировать строку подключения

Код:
  ADOConnection1.ConnectionString:=
  'Provider=Microsoft.Jet.OLEDB.4.0; '+
  'Data Source='+ExtractFilePath(ParamStr(0))+'db1.mdb;'+
  'Persist Security Info=False';

Последний раз редактировалось vovk; 20.05.2010 в 02:07.
vovk вне форума Ответить с цитированием
Старый 20.05.2010, 02:06   #10
LeX2009
 
Регистрация: 29.04.2009
Сообщений: 9
По умолчанию

Ничего страшного, я через диспетчер задач сняла процесс))))
А меня давно надо было послать и идти отдыхать, завтра бы домучали эту задачку))
Спасибо вам огромное
ВСЁ работает!!! Моему счастью нет предела)))))
LeX2009 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выпадающий список в зависимости от значения ячейки Tanya2007 Microsoft Office Excel 6 25.03.2010 01:33
В зависимости от интервала как ставить значения Apostolx Microsoft Office Excel 7 20.10.2009 17:21
Окраска ячейки в зависимости от значения Апчхи Microsoft Office Excel 6 16.08.2009 19:31
Как выводить значения отдельных полей таблицы при выборе записи в DBGrid Sinker БД в Delphi 9 25.03.2009 12:28
Окрашивание текста в зависимости от значения art1cool Microsoft Office Excel 2 19.08.2008 12:29