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

Ваш аккаунт

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

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

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

Проблема с ADOQuery

36K
20 ноября 2010 года
Overmax2
63 / / 11.02.2010
Доброго времени суток всем. Начал изучать объект adoquery и возникла небольшая проблема не описанная в учебнике.
В общем есть база данных в Access и я хочу сделать для неё приложение.
Есть 2 таблицы Ученики и Родители, в таблице родители я делаю такой запрос:
SELECT * FROM ParentsTable WHERE (ParentsTable.StudentIndex=StudentTable.Index)

При активации объекта ADOQParents выводится ошибка:
"Поле StudentTable.Index не имеет значения по умолчанию"

В базе данных :
StudentTable.Index - счётчик
ParentsTable.StudentIndex - числовое поле (Длинное целое)

Как уйти от проблемы?
11
20 ноября 2010 года
oxotnik333
2.9K / / 03.08.2007
Сначала наложить условие на ParentsTable.StudentIndex NOT NULL, а потом из полученного выбирать.
ЗЫ: какой смысл сравнивать первичный ключ таблицы с пользовательскими данными?
ЗЫЗЫ: ADOQuery тут ни при чем
36K
21 ноября 2010 года
Overmax2
63 / / 11.02.2010
Ну как какой смысл.
Я хочу чтобы родители выводились в зависимости от выбранного ученика в отдельной таблице.
Это просо тестовое задание, хотелось узнать как бороться с этой проблемой.

"Сначала наложить условие на ParentsTable.StudentIndex NOT NULL, а потом из полученного выбирать. "
Это сделать в самом Access или в запросе SQL?
11
21 ноября 2010 года
oxotnik333
2.9K / / 03.08.2007
а, не правильно прочитал условие... соррь
в СУБД в конструкторе запросов сваяй запрос и посмотри как он будет выглядеть, сдается мне что после FROM надо указывать обе таблицы а не одну, или лучше вообще через INNER JOIN их объединять.
36K
21 ноября 2010 года
Overmax2
63 / / 11.02.2010
Я пробовал через INNER JOIN он просто выводит все записи таблицы
ParentsTable, так как в поле StudentTable.Index содержатся все номера которые есть в поле ParentsTable.IndexStudent. Поэтому INNER JOIN не вариант кажется.

Или я что-то не правильно понял про INNER JOIN?

Но про СУБД спасибо, совсем забыл что там запросы проверять можно ))) Щас попробую.
6
21 ноября 2010 года
George
4.1K / / 05.01.2007
[highlight=sql]
SELECT * FROM ParentsTable INNER JOIN StudentTable ON ParentsTable.StudentIndex=StudentTable.Index
WHERE StudentTable.Name = 'Alibaba Alibabaevich'
[/highlight]
Так что-ли надо? Автор, объясни популярнее, что надо сделать.
36K
21 ноября 2010 года
Overmax2
63 / / 11.02.2010
Поясняю:
База данных ACCESS. Хочу сделать для неё приложение. Состоящее из 2 таблиц. В первой находятся ученики в другой их родители.
В приложении 2 DBGrid соответственно.
Я хочу чтобы когда мы выбираем Строку в DBGrid-Учеников в DBGrid-Родителей показывались Родители данного ученика. То есть Просто связь Ученики - Родители надо организовать. Что-то на подобие MasterField в ADOTable.
1
21 ноября 2010 года
kot_
7.3K / / 20.01.2000
Для этих целей в ADOQuery используют параметры.
т.е. запрос типа:
 
Код:
String sql_query = "SELECT {список полей} FROM {откуда} WHERE StudentIndex = :id";
ADOQParent->SQL->Clear();
ADOQParent->SQL->Add(sql_query);
ADOQParent->Prepare = true;

там где {откуда} - вероятнее всего надо INNER JOIN таблици студентов с таблицей родителей, надеюсь это понятно, что надо сделать самому.
затем в обработке события движения по датасету (либо событие клика по таблице, либо то и другое - это опять же сам разбираешься):
 
Код:
ADOQParent->Active = false;
ADOQParent->Params->ParamByName("id")->Value = ADOQStudent->FieldByName("Index")->Value;
ADOQParent->Active = true;

возможны ошибки, неточности и пр - кури справку.
36K
23 ноября 2010 года
Overmax2
63 / / 11.02.2010
Спасибо всем и особенно kot_ - всё работает.
62K
28 ноября 2010 года
Geksa
6 / / 11.10.2010
А не подскажете, как запросом получить только n записей? из бд Акцесс? пробовала и top, и limit, не хочет( выдает ошибку в синтаксисе.
1
28 ноября 2010 года
kot_
7.3K / / 20.01.2000
 
Код:
SELECT TOP 1 youtable.*  FROM ваша_таблица as youtable
1
28 ноября 2010 года
kot_
7.3K / / 20.01.2000
вернет одну запись
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог