Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

поля в DBGrid

9.1K
28 февраля 2006 года
sasha_san
24 / / 01.02.2006
Hello there!
Подскажите пожалуйста как сделать обычный поиск по полям, точнее говоря ситуация такая - есть первое поле - тип данных, второе - название объекта. Если тип скажем "А" - то все его названия (вторые поля) надо запихать в ComboBox.
Пытался это сделать через поиск но как-то не получилось...:D
830
01 марта 2006 года
MVal
76 / / 17.10.2002
Если я тебя правильно понял - то тебе надо на форму положить какой-нибудь Query и вписать ему в SQL что-то типа
 
Код:
select field2 from table1 where field1 =:field1

и потом, по событию AfterScroll первого источника данных (Table или Query, смотря что используешь) сделать примерно так
 
Код:
Query2->Close();
 Query2->ParamByName("field1")->AsVariant=Table1->FieldByName->("field1")->AsVariant;
 Query2->Open();
 ComboBox->Items->Clear();
 where (!Query2->Eof())
  {
    ComboBox->Items->Add(Query2->FieldByName->("field2")->AsString;
  };

Писал руками по памяти, так что может где ошибся, но смысл такой.
9.1K
01 марта 2006 года
sasha_san
24 / / 01.02.2006
Цитата:
Originally posted by MVal
Если я тебя правильно понял - то тебе надо на форму положить какой-нибудь Query и вписать ему в SQL что-то типа
 
Код:
select field2 from table1 where field1 =:field1

и потом, по событию AfterScroll первого источника данных (Table или Query, смотря что используешь) сделать примерно так
 
Код:
Query2->Close();
 Query2->ParamByName("field1")->AsVariant=Table1->FieldByName->("field1")->AsVariant;
 Query2->Open();
 ComboBox->Items->Clear();
 where (!Query2->Eof())
  {
    ComboBox->Items->Add(Query2->FieldByName->("field2")->AsString;
  };

Писал руками по памяти, так что может где ошибся, но смысл такой.



Да не, видимо объяснил непонятно.
Во-первых, БД локальная, на моем компе.
Во-вторых - все гораздо проще, надо запустить цикл типа

for(int i = 0; i < Table1->FieldsCount; i++)
{
//а тут написать что-то типа
if(Table1->FieldsbyName("Один")->AsString == "1")
{
ComboBox1->Items->Add(Table1->FieldsbyName("Два")->AsString);
}
}

Короче вот так, при том условии, что это не работает :D :D :D

7.9K
01 марта 2006 года
uki_
122 / / 26.01.2006
Код:
ComboBox->Items->Clear();
  Table1->First();
  Table1->DisableControls();
  while(!Table1->Eof)
  {
    if(Table1->Fields->FieldsbyName("Один")->AsString == "1")
    {
      ComboBox1->Items->Add(Table1->FieldsbyName("Два")->AsString);
    }
    Table1->Next();
  }
  Table1->First();
  Table1->EnableControls();
Но даже если БД локальная, можно так сделать как предлагал MVal.
830
01 марта 2006 года
MVal
76 / / 17.10.2002
Цитата:
Originally posted by sasha_san
for(int i = 0; i < Table1->FieldsCount; i++)
{
//а тут написать что-то типа
if(Table1->FieldsbyName("Один")->AsString == "1")
{
ComboBox1->Items->Add(Table1->FieldsbyName("Два")->AsString);
}
}

Короче вот так, при том условии, что это не работает :D :D :D


Естественно не работает. Ты FieldsCount раз считываешь первую запись и с чем-то ее сравниваешь. Table1->Next().
P.S. У тебя поля в базе называются русскими буквами? Если так - то, по моему, это не самая лучшая идея.

9.1K
02 марта 2006 года
sasha_san
24 / / 01.02.2006
Цитата:
Originally posted by MVal
Естественно не работает. Ты FieldsCount раз считываешь первую запись и с чем-то ее сравниваешь. Table1->Next().
P.S. У тебя поля в базе называются русскими буквами? Если так - то, по моему, это не самая лучшая идея.



Спасибо, теперь все работает.
Конечно названия по-русски это только пример, никогда бы не пришло в голову сделать это в реальной БД.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог