Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Поиск по составной таблице / 13 сообщений из 13, страница 1 из 1
02.05.2015, 10:42
    #38950475
Oleg34
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по составной таблице
Здравствуйте! У меня есть две таблицы-справочника: personal , smena ,и одна рабочая таблица tabel . В рабочей таблице хранятся ссылки (FK) на таблицы справочники. Для пользовательской визуализации делаю следующий запрос SQL:

select
tabel.id,
tabel.date_tabel,
tabel.id_tab_number,
personal.family,
personal.name,
smena.name_smena,
personal.tab_number
from personal
inner join tabel on (personal.tab_number = tabel.id_tab_number)
inner join smena on (personal.id_smena = smena.id)

В DBGrid на форме прекрасно отображаются не индексы, а названия. Теперь пытаюсь через TEdid организовать поиск (фильтр). Если обращаться непосредственно в реальную таблицу БД personal , то вроде фильтрует. А вот как обратиться по полю family к таблице, созданной запросом выше? Для таблицы personal делаю так:

void __fastcall TFormMain::ChBFiltrPersonalClick(TObject *Sender) {
// фильтр по полю
try {
try {
// определение имени поля по которому следует искать
String _find = DBGridPersonal->SelectedField->FieldName;
DM->QueryPersonal->Transaction->Commit();
DM->QueryPersonal->SQL->Clear();
// выбираю данные из таблицы
DM->QueryPersonal->SQL->Add("select *from personal ");

if ((ChBFiltrPersonal->Checked) && (EdPersonalFilter != "")) {
// если поднят флажок в чекбоксе и есть образец для поиска, то
DM->QueryPersonal->SQL->Add
("where family like '" + EdPersonalFilter->Text + "%'");
DM->QueryPersonal->Active = true;
}
}
catch (EDatabaseError& E) {
CatchDBMess(E.Message);
}
}
catch (Exception& E) {
CatchExceptionMess(E.Message);
}

}
...
Рейтинг: 0 / 0
02.05.2015, 11:35
    #38950487
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по составной таблице
Oleg34А вот как обратиться по полю family к таблице, созданной запросом выше?
Абсолютно так же. В чём проблема-то?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.05.2015, 12:23
    #38950495
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по составной таблице
Oleg34,

1. В запросах в которых участвует больше одной таблицы к полям надо обращаться по полному имени, т.е. <имя таблицы>.<имя поля>
2. Используй параметры
3. Открой для себя STARTING WITH и CONTAINING
...
Рейтинг: 0 / 0
02.05.2015, 12:23
    #38950496
Oleg34
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по составной таблице
Я пытался, но выдает ошибку:

void __fastcall TFormMain::ChBTabelFilterClick(TObject *Sender) {
// фильтр по полю
try {
// определение имени поля по которому следует искать
_find = DBGridPersonalVisio->SelectedField->FieldName;
DM->QueryTabelWork->Transaction->Commit();
DM->QueryTabelWork->Close();
DM->QueryTabelWork->SQL->Clear();
// выбираю данные из таблицы
String SQLQuryTabel =
"select tabel.id, tabel.date_tabel, tabel.id_tab_number, personal.family, personal.name, smena.name_smena, personal.tab_number from personal inner join tabel on (personal.tab_number = tabel.id_tab_number) inner join smena on (personal.id_smena = smena.id) order by ";
DM->QueryTabelWork->SQL->Add(SQLQuryTabel);
if ((ChBTabelFilter->Checked) && (EdTabelFiltr != "")) {
// если поднят флажок в чекбоксе и есть образец для поиска, то
DM->QueryTabelWork->SQL->Add("where family like '" +
EdTabelFiltr->Text + "%'");
DM->QueryTabelWork->Active = true;
}
}
catch (EDatabaseError& E) {
CatchDBMess(E.Message);
}
}

Ошибка при обращении к базе данных!
Dynamik SQL Error
SQL Error code =-104
То есть начиная с "where ..." вываливается.
...
Рейтинг: 0 / 0
02.05.2015, 12:26
    #38950498
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по составной таблице
Oleg34order by где, что хз..
...
Рейтинг: 0 / 0
02.05.2015, 12:26
    #38950499
Oleg34
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по составной таблице
В запросах в которых участвует больше одной таблицы к полям надо обращаться по полному имени, т.е. <имя таблицы>.<имя поля>
Я понял, но у меня нет имени этой таблицы. Она составная из запроса. В самой БД ее нет.
...
Рейтинг: 0 / 0
02.05.2015, 12:27
    #38950500
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по составной таблице
Oleg34,

да и вообще ORDER BY должен быть после WHERE
...
Рейтинг: 0 / 0
02.05.2015, 12:29
    #38950501
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по составной таблице
Oleg34,

издеваешься? Ладно будем жевать personal.family. personal это что?
...
Рейтинг: 0 / 0
02.05.2015, 12:37
    #38950503
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по составной таблице
Oleg34Dynamik SQL Error
SQL Error code =-104
Это только половина текста ошибки, да и та перевранная. Не умеешь пользоваться Ctrl-C?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.05.2015, 12:37
    #38950504
Oleg34
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по составной таблице
Да, конечно же это лишнее!!! Но все равно запрос не обрабатывает(
...
Рейтинг: 0 / 0
02.05.2015, 12:42
    #38950506
Oleg34
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по составной таблице
personal это таблица. personal.family это поле в этой таблице.
Про запрос, я просто не стал все копировать. Но общий смысл, что не правильное обращение к where.
...
Рейтинг: 0 / 0
02.05.2015, 12:42
    #38950507
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по составной таблице
Oleg34select
tabel.id,
tabel.date_tabel,
tabel.id_tab_number,
personal.family,
personal.name,
smena.name_smena,
personal.tab_number
from personal
inner join tabel on (personal.tab_number = tabel.id_tab_number)
inner join smena on (personal.id_smena = smena.id)

В DBGrid на форме прекрасно отображаются не индексы, а названия. Теперь пытаюсь через TEdid организовать поиск (фильтр). Если обращаться непосредственно в реальную таблицу БД personal , то вроде фильтрует. А вот как обратиться по полю family к таблице, созданной запросом выше? Для таблицы personal делаю так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
    tabel.id,
    tabel.date_tabel,
    tabel.id_tab_number,
    personal.family,
    personal.name,
    smena.name_smena,
    personal.tab_number
from personal
   inner join tabel on personal.tab_number = tabel.id_tab_number
   inner join smena on personal.id_smena = smena.id
where personal.family = 'Иванов'
...
Рейтинг: 0 / 0
02.05.2015, 13:06
    #38950515
Oleg34
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по составной таблице
Все! Понял! Получилось! Спасибо всем огромное!
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Поиск по составной таблице / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]