Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > SQL запрос в CB6


Автор: b44 14.4.2008, 08:14
Привет всем! Задали на практику написать прогу  "информационная система принтеры". 
На отдельной форме должно быть сравнение принтеров. на форме четыре комбобокса и стринггрид.
В первом и во втором Комбо выбирается фирма принтеров которые будут сравниваться.

Код

void __fastcall TfSrav::FormShow(TObject *Sender)
{
    ComboBox1->Clear();
    ComboBox2->Clear();
    dData->qTemp->Close();
    dData->qTemp->SQL->Text="select NAIM from t_naim ORDER BY NAIM";
    dData->qTemp->Open();
    if (!dData->qTemp->IsEmpty())
     {
     dData->qTemp->First();
     while (!dData->qTemp->Eof)
      {
      if (!VarIsNull(dData->qTemp->FieldValues["NAIM"]))
      {
      ComboBox1->Items->Add(dData->qTemp->FieldByName("NAIM")->AsString);
      ComboBox2->Items->Add(dData->qTemp->FieldByName("NAIM")->AsString);
      dData->qTemp->Next();
      }
      }
  }
  dData->qTemp->Close();
}


в 3 и 4 будут записываться модели принтеров.

Помогите кодом, надо сделать чтоб при выборе фирмы в комбо1, автоматически заполнялся комбо 3 моделями принтеров выбраной фирмы в комбо1.

DData это датамодуль
qTemp это AdoQuery
поле Naim это название фирмы.
t_naim состоит из поля счетчика и фирмы
t_opis состоит из числового поля, модели, и тд. Связано все через счетчик и числовое поле, тип связи "один ко многим"

Автор: orthrus 14.4.2008, 12:16
Код

ComboBox3->Clear();
dData->qTemp->Close();
dData->qTemp->SQL->Text="SELECT t_opis.naim FROM t_naim,t_opis WHERE t_naim.id = t_opis.id_naim ORDER BY t_opis.naim";
dData->qTemp->Open();
if (!dData->qTemp->IsEmpty())
  {
     dData->qTemp->First();
     while (!dData->qTemp->Eof)
      {
         if (!VarIsNull(dData->qTemp->FieldValues["NAIM"]))
           {
             ComboBox3->Items->Add(dData->qTemp->FieldByName("NAIM")->AsString);
             dData->qTemp->Next();
           }
      }
  }
dData->qTemp->Close();


Вот примерно так, все это вставляешь в ComboBox1::OnChange()

P.S. Вообще то надо было привести структуру таблиц.

Автор: b44 14.4.2008, 14:13
Что то не понял по полям, пожалуйста сделайте с этими полями!

таблица t_name
Nname - счетчик ключевое поле
Name - фирма принтера

Таблица t_opis
Nname - числовой
Model - модель принтера 
.....

Автор: dix75 14.4.2008, 18:01
Цитата(b44 @ 14.4.2008,  14:13)
Что то не понял по полям, пожалуйста сделайте с этими полями!

таблица t_name
Nname - счетчик ключевое поле
Name - фирма принтера

Таблица t_opis
Nname - числовой
Model - модель принтера 
.....

 smile  smile  smile 

а какже ты тогда пишешь если не можешь сам перевести  smile 

Автор: b44 14.4.2008, 21:25
Сделан запрос на подобии но он выводит не все модели. Пожалуйста добейте этот запрос!
все находится на форме fsrav. При выборе фирмы, должны забиваться модели.
в стринггриде должны отображаться значения двух выбраных моделей принтеров.

Автор: orthrus 15.4.2008, 04:04
Код

void __fastcall TfSrav::ComboBox1Change(TObject *Sender) {
    ComboBox3->Clear();
    dData->qTemp->Close();
    dData->qTemp->SQL->Text = "SELECT * FROM (SELECT NNaim FROM t_naim WHERE Naim ='" +
                              ComboBox1->Text +"') AS a, t_opis WHERE t_opis.NNaim = a.NNaim \
                              ORDER BY t_opis.NNaim";
    dData->qTemp->Open();
    if (!dData->qTemp->IsEmpty())
      {
         dData->qTemp->First();
         while (!dData->qTemp->Eof)
          {
             if (!VarIsNull(dData->qTemp->FieldValues["Model"]))
               {
                 ComboBox3->Items->Add(dData->qTemp->FieldByName("Model")->AsString);
                 dData->qTemp->Next();
               }
          }
      }
    dData->qTemp->Close();
}


Это код для ComboBox1, для второго сам сделаешь.

Автор: b44 15.4.2008, 04:30
orthrus  огромное спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)