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

Ваш аккаунт

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

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

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

Sql запросы при работе с базами данных

5.0K
21 сентября 2005 года
__pH
41 / / 21.09.2005
Делаю форму: DataSourse1,Table1,Query1,DBComboBox1,DBEdit1.
Есть база в ней 5 полей. Необходимо вытащить тока значения одного поля(pole1) которой состоит из 5 элементов(н-р):2005,2006,2005,2006,2006.
Значения надо запихать в DBComboBox1.
Если их вытаскивать с помощью:
DBComboBox1->Items->Add(Table1->FieldByName("pole1")->AsString);
то в комбобоксе появляются они все! А необходимо чтобы туда записались тока неповторяющееся элементы,т.е. 2005,2006 .
С помощью SQL это делается:
SELECT DISTINCT pole1 FROM "database.DB" database
Но я не знаю как его связать с комбобоксом.

ПРОШУ совета!
362
22 сентября 2005 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by __pH
Делаю форму: DataSourse1,Table1,Query1,DBComboBox1,DBEdit1.
Есть база в ней 5 полей. Необходимо вытащить тока значения одного поля(pole1) которой состоит из 5 элементов(н-р):2005,2006,2005,2006,2006.
Значения надо запихать в DBComboBox1.
Если их вытаскивать с помощью:
DBComboBox1->Items->Add(Table1->FieldByName("pole1")->AsString);
то в комбобоксе появляются они все! А необходимо чтобы туда записались тока неповторяющееся элементы,т.е. 2005,2006 .
С помощью SQL это делается:
SELECT DISTINCT pole1 FROM "database.DB" database
Но я не знаю как его связать с комбобоксом.

ПРОШУ совета!



Сформулируйте поточнее пожалуйста: если строка "2005,2006,2005,2006,2006" находится в одной записи, насколько я могу судить по
DBComboBox1->Items->Add(Table1->FieldByName("pole1")->AsString);
то тут DISTINCT тебе не поможет

5.0K
22 сентября 2005 года
__pH
41 / / 21.09.2005
Цитата:
Originally posted by _kolyan
Сформулируйте поточнее пожалуйста: если строка "2005,2006,2005,2006,2006" находится в одной записи, насколько я могу судить по
DBComboBox1->Items->Add(Table1->FieldByName("pole1")->AsString);
то тут DISTINCT тебе не поможет


Нет виноват не так написал! То есть база например имеет 5 полей:pole1,pole2,pole3,pole4,pole5 .
Первое поле содержит вот эти данные:2005,2006 ..
Это не одна строка-это 5 различных элементов:
pole1 pole2 pole3 pole4 pole5
2005 raz ... .... данные
2006 dva ... .... данные
2005 tri ... .... данные
2006 4etire ... .... данные
2006 p9t ... .... данные

Вот примерно такая ситуация!!
Жду совета, очень надо, заранее благодарен!

362
22 сентября 2005 года
_kolyan
339 / / 03.12.2002
Ну тогда можно взять, например, TQuery, выполнить в нем запрос с DISTINCT и точно также привязать к DBComboBox при помощи DataSource.
У DataSource указываешь в качестве DataSet этот Query и все.
488
22 сентября 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by _kolyan
Ну тогда можно взять, например, TQuery, выполнить в нем запрос с DISTINCT и точно также привязать к DBComboBox при помощи DataSource.
У DataSource указываешь в качестве DataSet этот Query и все.

Я так помню, что список выбора DBComboBox-a заполняется вручную. Что-то типа

 
Код:
Query1->SQL = "SELECT DISTINCT pole1 FROM 'database.DB' database";
Query1->Open();
while(!Query1->Eof)
{
  DBComboBox1->Items->Add(Query1->Fields->Fields[0]->AsString;
  Query1->Next();
}
или без Query
 
Код:
Table1->First();
  DBComboBox1->Items->Clear();
  while(!Table1->Eof)
  {
    if(DBComboBox1->Items->IndexOf(Table1->Fields->Fields[0]->AsString)<0)
      DBComboBox1->Items->Add(Table1->Fields->Fields[0]->AsString);
    Table1->Next();
  }
259
22 сентября 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by __pH
Нет виноват не так написал! То есть база например имеет 5 полей:pole1,pole2,pole3,pole4,pole5 .
Первое поле содержит вот эти данные:2005,2006 ..
Это не одна строка-это 5 различных элементов:
pole1 pole2 pole3 pole4 pole5
2005 raz ... .... данные
2006 dva ... .... данные
2005 tri ... .... данные
2006 4etire ... .... данные
2006 p9t ... .... данные

Вот примерно такая ситуация!!
Жду совета, очень надо, заранее благодарен!


Гораздо правильней преобразовать это к двум табличкам:
Table1:
Pole1_id Pole1
1 2005
2 2006
Table2:
p1_id pole2 pole3 pole4 pole5
1 raz ... .... данные
2 dva ... .... данные
1 tri ... .... данные
2 4etire ... .... данные
2 p9t ... .... данные
Сделать relation по pole1_id и в combobox подставлять значения из table1.

362
22 сентября 2005 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by Mоngооsе
Я так помню, что список выбора DBComboBox-a заполняется вручную.



Да, точно. Это я с LoockupComboBox спутал.

5.0K
22 сентября 2005 года
__pH
41 / / 21.09.2005
Всем большое спасибо-узнал много нового! Я просто поставил элемент DBLookupCombox вместо обычного. Там всё нормально, за исключением того что когда он запускаеться "первая строка" пустая, а потом идут мои данные.
Говорят надо DBLookupComboBox2->KeyValue=1; поставить, но чё то не помогает, может не там ставлю!??
362
22 сентября 2005 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by __pH
Всем большое спасибо-узнал много нового! Я просто поставил элемент DBLookupCombox вместо обычного. Там всё нормально, за исключением того что когда он запускаеться "первая строка" пустая, а потом идут мои данные.
Говорят надо DBLookupComboBox2->KeyValue=1; поставить, но чё то не помогает, может не там ставлю!??



Это смотря что у тебя в качестве KeyField фигурирует. Если в таблице нет записи, у которой значение этого поля равно 1, тогда конечно не поможет. :)

5.0K
22 сентября 2005 года
__pH
41 / / 21.09.2005
А ещё хотелось бы узнать?!
Вот получил я в DBLookupComboBox1 значения(неповторяющееся). А как мне теперь при выборе одного из них сделать запрос и получить остальные данные по этому значению.
А делаю:
 
Код:
void __fastcall TForm1::DBLookupComboBox1Click(TObject *Sender)
{
Form1->DataSource1->DataSet=Form1->Query1;
Form1->Query1->Close();
Form1->Query1->Active=true;
Form1->Query1->SQL->Clear();
Form1->Query1->SQL->Add("SELECT * FROM 'database.DB' database WHERE pole='DBLookupComboBox1->ItemIndex' ");
Form1->Query1->Open();
}

Ничего не выходит. Возможно не правильно получаю значения DBLookupComboBox1->ItemIndex (а как?)
И как можно поступить Если в моём случаи например по значению 2005 существует 3 записи как их выводить(или как их выведет бирланд)?

Делал так чтобы все поля работали через Query1 (а не через Table1, как раньше делал(кроме DBLookupComboBox1) . Всё нормально работает выводяться все поля в соотвествии с моим полем(годом), но проблема в том что если н-р 3 совпавших записи(а если больше) то они все выводятся(выделенным цветом), что не не удобно. Хотелось бы чтобы была одна запись и потом н-р с помощью DBNavigatora можно было их просматривать!

Наверно я просто заморачиваюсь, но я пока не знаю как ещё сделать этот просмотрщик! Если кто-ниб может помочь, то буду ОЧЕНЬ рад выслушать!!!
5.0K
22 сентября 2005 года
__pH
41 / / 21.09.2005
То есть всё таже база данных и н-р 3 поля DBEdit,
DBComboBox(или DBLookupComboBox -что более подходит) и DBNavigator . Вот получил я данные из базы. Н-р хочю посмотреть записи по метке 2005 ( но их 3 штуки) если с помощью DBLookupComboBox получаем в комбобоксе 3 выделенных записи соответсвующих разным полям но одинаковым у всех полем равным 2005. Если будет появляться 3 одинаковы записи в комбобоксе, то это не удобно!
В DBComboBox получилось избавиться от "лишних", но не знаю как давать запрос.

И вот хотел бы узнать возможно ли как с помощью навигатора просматривать тока те записи которые прошли по запросу??

Заранее благодарен!
259
23 сентября 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by __pH
А ещё хотелось бы узнать?!
Вот получил я в DBLookupComboBox1 значения(неповторяющееся). А как мне теперь при выборе одного из них сделать запрос и получить остальные данные по этому значению.
А делаю:
 
Код:
void __fastcall TForm1::DBLookupComboBox1Click(TObject *Sender)
{
Form1->DataSource1->DataSet=Form1->Query1;
Form1->Query1->Close();
Form1->Query1->Active=true;
Form1->Query1->SQL->Clear();
Form1->Query1->SQL->Add("SELECT * FROM 'database.DB' database WHERE pole='DBLookupComboBox1->ItemIndex' ");
Form1->Query1->Open();
}

Ничего не выходит. Возможно не правильно получаю значения DBLookupComboBox1->ItemIndex (а как?)
И как можно поступить Если в моём случаи например по значению 2005 существует 3 записи как их выводить(или как их выведет бирланд)?

Делал так чтобы все поля работали через Query1 (а не через Table1, как раньше делал(кроме DBLookupComboBox1) . Всё нормально работает выводяться все поля в соотвествии с моим полем(годом), но проблема в том что если н-р 3 совпавших записи(а если больше) то они все выводятся(выделенным цветом), что не не удобно. Хотелось бы чтобы была одна запись и потом н-р с помощью DBNavigatora можно было их просматривать!

Наверно я просто заморачиваюсь, но я пока не знаю как ещё сделать этот просмотрщик! Если кто-ниб может помочь, то буду ОЧЕНЬ рад выслушать!!!


Настоятельно рекомендую внимательно прочитаь мой предыдущий пост.

ЗЫ: Все проблемы проистекают из того, что Ваша база не представлена в нормальной форме и чем больше вы будете пытаться с ней что либо сделать, тем больших извращений на это понадобится. Проще и правильней перепроектировать базу или хотя бы привести ее к подобию нормального вида.

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