У меня такая проблема.
Есть таблицы
1.Sort
Назначение
Главная таблица — содержит информацию о сотрудниках предприятия
Field Name Коментарий
Id Код сотрудника
AFamR Фамилия русская
AImaR Имя русское
AOtsR Отчество русское
AFamE Фамилия английская
AImaE Имя английское
AOtsE Отчество английское
DDateR Дата рождения
APol Пол
2. GrafN
Назначение
Содержит общую информацию о графиках работы на предприятии Field Name Комментарий
Id Код графика
IdV Код вида графика
SRabS1 Общее количество рабочих дней — при продолжительности месяца 30 день
SRabS2 Общее количество рабочих дней — при продолжительности месяца 31 день
NId1C Код в 1С
ANameR Наименование русское
ANameE Наименование английское
3.VidG
Назначение
Содержит информацию о видах графиков
Field Name Комментарий
Id Код вида графика
ANameR Название русское
ANameE Название английское
4.IGrafSot
Назначение
Содержит периодическую информацию о графиках сотрудника Field Name Комментарий
IdSort Код сотрудника
DDate Дата введения
IdGraf Код графика
Проблема: необходимо отобрать список сотрудников у которых вид графика на дату равен чему либо. Как это сделать?
Каким образом создавать временные запросы? Неужели для каждого промежуточного запроса придется на форме создавать Query и через
QSotr->Close();
QSotr->SQL->Clear();
QSotr->SQL->Add("SELECT DISTINCT D1.Id, D1.AFamR, D1.AImaR ....");
QSotr->Open();
все делать?
Неужели нельзя как в FoxPro выбрать в курсор и его подставить в DataSource DBGrid.
03.12.03 08:49: Перенесено модератором из 'C/C++' — ПК
Здравствуйте, Strauss, Вы писали:
S>Здравствуйте, msm1982, Вы писали:
M>>У меня такая проблема. M>>Есть таблицы S>[...поскипано...]
S>Может стоит в форум Базы Данных этот вопрос отправить?
Я вообще-то еще и по С++ конкретно вопрос задал:
Каким образом создавать временные запросы?
Неужели для каждого промежуточного запроса придется на форме создавать Query и через
QSotr->Close();
QSotr->SQL->Clear();
QSotr->SQL->Add("SELECT DISTINCT D1.Id, D1.AFamR, D1.AImaR ....");
QSotr->Open();
все делать?
Неужели нельзя как в FoxPro выбрать в курсор и его подставить в DataSource DBGrid.
Этот вопрос тоже в базы данных отправлять?
Люди помогите пожалуйста, умираю.
С уважением и заранее спасибо, Москвин Святослав.
Здравствуйте, msm1982, Вы писали:
M>Я вообще-то еще и по С++ конкретно вопрос задал:
M>Каким образом создавать временные запросы? M>Неужели для каждого промежуточного запроса придется на форме создавать Query и через M>QSotr->Close(); M>QSotr->SQL->Clear(); M>QSotr->SQL->Add("SELECT DISTINCT D1.Id, D1.AFamR, D1.AImaR ...."); M>QSotr->Open(); M>все делать? M>Неужели нельзя как в FoxPro выбрать в курсор и его подставить в DataSource DBGrid.
M>Этот вопрос тоже в базы данных отправлять?
Разбить на два и задавать в соответствующих форумах. Пока перебрасываю в "Базы данных". При необходимости, выдели, пожалуйста, вопрос по C++ и задай здесь. -- ПК
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Но если ты собираешься использовать его в DBGrid — то да, лучше все-таки на форме разместить. Вот только за каким хреном тебе понадобилось ему на лету SQL менять? Что-то ты не то делаешь.
... << RSDN@Home 1.1.0 stable >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, msm1982, Вы писали:
M>>Проблема: необходимо отобрать список сотрудников у которых вид графика на дату равен чему либо. Как это сделать? S>
S>select IdSotr from IGrafSot join GrafN on IGrafSot.IdGraf = GrafN.Id where GrafN.IdV = ?
S>
M>>Каким образом создавать временные запросы? Неужели для каждого промежуточного запроса придется на форме создавать Query и через S>Но если ты собираешься использовать его в DBGrid — то да, лучше все-таки на форме разместить. Вот только за каким хреном тебе понадобилось ему на лету SQL менять? Что-то ты не то делаешь.
У меня есть несколько связанных таблиц и я хочу по условию (чеклистам на форме) отфильтровывать список сотрудников, как мне это сделать если не на лету меняя SQL?
В DBGrid я буду использовать только конечный список сотрудников, а вот как мне его собрать не знаю, таблички то нарисовал, а как их сцепить не знаю, если есть время стукни в аську 322568482.
С уважением и заранее спасибо Москвин Святослав
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, msm1982, Вы писали:
M>>Проблема: необходимо отобрать список сотрудников у которых вид графика на дату равен чему либо. Как это сделать? S>
S>select IdSotr from IGrafSot join GrafN on IGrafSot.IdGraf = GrafN.Id where GrafN.IdV = ?
S>
И еще маленькое уточнение IGrafSot это таблица истории графика, и мне для того чтобы отфильтровать список сотрудников по виду графика необходимо взять сотрудника, взять его последний (по дате наибольший) график, найти для этого графика вид и в полученной табличке:
ФИО Вид графика
Петров 1
Иванов 2
Отфильтровать по виду графику.
P.S. Кроме таблицы по графику сотрудника есть еще несколько зависимых таблиц с множеством записей, по которым я тоже буду фильтровать список в DBGRID, а пока
Здравствуйте, msm1982, Вы писали: M>У меня есть несколько связанных таблиц и я хочу по условию (чеклистам на форме) отфильтровывать список сотрудников, как мне это сделать если не на лету меняя SQL?
Использовать параметры запроса. Рекомендую иногда нажимать F1 и читать экзамплы.
... << RSDN@Home 1.1.0 stable >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, msm1982, Вы писали: M>И еще маленькое уточнение IGrafSot это таблица истории графика, и мне для того чтобы отфильтровать список сотрудников по виду графика необходимо взять сотрудника, взять его последний (по дате наибольший) график, найти для этого графика вид и в полученной табличке: M>ФИО Вид графика M>Петров 1 M>Иванов 2 M>Отфильтровать по виду графику.
То есть тебе надо только тех сотрудников, у которых последний график нужного вида? Не надо быть таким скрытным.
1. Берешь последние даты графиков сотрудников:
select idSotr, max(DDate) from IGrafSot
2. Прицепляешь к этому записи из IGrafSot
select IGrafSot.IdGraf from IGrafSot main join (select idSotr, max(DDate) as lastdate from IGrafSot) dm on(dm.idSotr=main.idSotr and dm.lastdate=main.DDate)
3. Прицепляешь к этому графики нужного вида:
select IGrafSot.IdGraf from IGrafSot main join (select idSotr, max(DDate) as lastdate from IGrafSot) dm on(dm.idSotr=main.idSotr and dm.lastdate=main.DDate)
join GrafN on main.IdGraf = GrafN.Id where GrafN.IdV = ?
... << RSDN@Home 1.1.0 stable >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, msm1982, Вы писали: M>>У меня есть несколько связанных таблиц и я хочу по условию (чеклистам на форме) отфильтровывать список сотрудников, как мне это сделать если не на лету меняя SQL? S>Использовать параметры запроса. Рекомендую иногда нажимать F1 и читать экзамплы.
А можно поподробнее?
У меня основной затык в том как выбрать 1 запись из подчиненной таблицы-истории, соответсвующей главной таблице.
Здравствуйте, Sinclair, Вы писали:
S>3. Прицепляешь к этому графики нужного вида: S>
S>select IGrafSot.IdGraf from IGrafSot main join (select idSotr, max(DDate) as lastdate from IGrafSot) dm on(dm.idSotr=main.idSotr and dm.lastdate=main.DDate)
S>join GrafN on main.IdGraf = GrafN.Id where GrafN.IdV = ?
S>
А сишник говорит
Invalid use of keyword.
Token: select
т.е. он подзапросы не понимает?
Как обойти?
Здравствуйте, Sinclair, Вы писали: S>Использовать параметры запроса. Рекомендую иногда нажимать F1 и читать экзамплы.
Часто сложность запроса такова, что пользоваться параметрами проблематично. Гораздо приятнее и более гибко составлять инструкцию на лету и отправлять их на исполнение. Примером тому сложные формы фильтрации и поиска.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, msm1982, Вы писали: M>>А сишник говорит S>Кто такой сишник? Не будь скрытным, и люди к тебе потянутся.
Borland C++ Builder Version 6.0 (Build 10.157)
Здравствуйте, msm1982, Вы писали: M>Borland C++ Builder Version 6.0 (Build 10.157)
Э-эх. Все, пишу в последний раз. Я и так потратил больше времени, чем ты, на эту тему.
Ошибку тебе возвращает не С++, который заканчивается после компиляции, а движок базы данных. Тип которого ты тоже по какой-то, неизвестной мне причине, не указал. Скорее всего это какое-нибудь г. типа interbase, который не умеет поддерживать вложенные запросы, и тебе придется избавиться от вложенности запроса. Навскидку так сразу я тебе запрос не напишу, так что сам поэкспериментируй. Принцип построения тебе уже должен быть понятен.
... << RSDN@Home 1.1.0 stable >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.