powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Поиск по составной таблице
13 сообщений из 13, страница 1 из 1
Поиск по составной таблице
    #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
Поиск по составной таблице
    #38950487
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg34А вот как обратиться по полю family к таблице, созданной запросом выше?
Абсолютно так же. В чём проблема-то?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поиск по составной таблице
    #38950495
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg34,

1. В запросах в которых участвует больше одной таблицы к полям надо обращаться по полному имени, т.е. <имя таблицы>.<имя поля>
2. Используй параметры
3. Открой для себя STARTING WITH и CONTAINING
...
Рейтинг: 0 / 0
Поиск по составной таблице
    #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
Поиск по составной таблице
    #38950498
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg34order by где, что хз..
...
Рейтинг: 0 / 0
Поиск по составной таблице
    #38950499
Oleg34
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В запросах в которых участвует больше одной таблицы к полям надо обращаться по полному имени, т.е. <имя таблицы>.<имя поля>
Я понял, но у меня нет имени этой таблицы. Она составная из запроса. В самой БД ее нет.
...
Рейтинг: 0 / 0
Поиск по составной таблице
    #38950500
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg34,

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

издеваешься? Ладно будем жевать personal.family. personal это что?
...
Рейтинг: 0 / 0
Поиск по составной таблице
    #38950503
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg34Dynamik SQL Error
SQL Error code =-104
Это только половина текста ошибки, да и та перевранная. Не умеешь пользоваться Ctrl-C?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поиск по составной таблице
    #38950504
Oleg34
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, конечно же это лишнее!!! Но все равно запрос не обрабатывает(
...
Рейтинг: 0 / 0
Поиск по составной таблице
    #38950506
Oleg34
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
personal это таблица. personal.family это поле в этой таблице.
Про запрос, я просто не стал все копировать. Но общий смысл, что не правильное обращение к where.
...
Рейтинг: 0 / 0
Поиск по составной таблице
    #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
Поиск по составной таблице
    #38950515
Oleg34
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все! Понял! Получилось! Спасибо всем огромное!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Поиск по составной таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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