String sql_query = "SELECT {список полей} FROM {откуда} WHERE StudentIndex = :id";
ADOQParent->SQL->Clear();
ADOQParent->SQL->Add(sql_query);
ADOQParent->Prepare = true;
Проблема с ADOQuery
В общем есть база данных в Access и я хочу сделать для неё приложение.
Есть 2 таблицы Ученики и Родители, в таблице родители я делаю такой запрос:
SELECT * FROM ParentsTable WHERE (ParentsTable.StudentIndex=StudentTable.Index)
При активации объекта ADOQParents выводится ошибка:
"Поле StudentTable.Index не имеет значения по умолчанию"
В базе данных :
StudentTable.Index - счётчик
ParentsTable.StudentIndex - числовое поле (Длинное целое)
Как уйти от проблемы?
ЗЫ: какой смысл сравнивать первичный ключ таблицы с пользовательскими данными?
ЗЫЗЫ: ADOQuery тут ни при чем
Я хочу чтобы родители выводились в зависимости от выбранного ученика в отдельной таблице.
Это просо тестовое задание, хотелось узнать как бороться с этой проблемой.
"Сначала наложить условие на ParentsTable.StudentIndex NOT NULL, а потом из полученного выбирать. "
Это сделать в самом Access или в запросе SQL?
в СУБД в конструкторе запросов сваяй запрос и посмотри как он будет выглядеть, сдается мне что после FROM надо указывать обе таблицы а не одну, или лучше вообще через INNER JOIN их объединять.
ParentsTable, так как в поле StudentTable.Index содержатся все номера которые есть в поле ParentsTable.IndexStudent. Поэтому INNER JOIN не вариант кажется.
Или я что-то не правильно понял про INNER JOIN?
Но про СУБД спасибо, совсем забыл что там запросы проверять можно ))) Щас попробую.
SELECT * FROM ParentsTable INNER JOIN StudentTable ON ParentsTable.StudentIndex=StudentTable.Index
WHERE StudentTable.Name = 'Alibaba Alibabaevich'
[/highlight]
Так что-ли надо? Автор, объясни популярнее, что надо сделать.
База данных ACCESS. Хочу сделать для неё приложение. Состоящее из 2 таблиц. В первой находятся ученики в другой их родители.
В приложении 2 DBGrid соответственно.
Я хочу чтобы когда мы выбираем Строку в DBGrid-Учеников в DBGrid-Родителей показывались Родители данного ученика. То есть Просто связь Ученики - Родители надо организовать. Что-то на подобие MasterField в ADOTable.
т.е. запрос типа:
Код:
там где {откуда} - вероятнее всего надо INNER JOIN таблици студентов с таблицей родителей, надеюсь это понятно, что надо сделать самому.
затем в обработке события движения по датасету (либо событие клика по таблице, либо то и другое - это опять же сам разбираешься):
Код:
ADOQParent->Active = false;
ADOQParent->Params->ParamByName("id")->Value = ADOQStudent->FieldByName("Index")->Value;
ADOQParent->Active = true;
ADOQParent->Params->ParamByName("id")->Value = ADOQStudent->FieldByName("Index")->Value;
ADOQParent->Active = true;
возможны ошибки, неточности и пр - кури справку.
Спасибо всем и особенно kot_ - всё работает.
А не подскажете, как запросом получить только n записей? из бд Акцесс? пробовала и top, и limit, не хочет( выдает ошибку в синтаксисе.
Код:
SELECT TOP 1 youtable.* FROM ваша_таблица as youtable
вернет одну запись