singlepost

С++ builder. Проблемы с запросом с использованием ADO. Помогите решить. << На главную или назад  

Второй месяц пилю нубскую систему учета успеваемости и большую часть решаю проблему: при попытке изменить содержание одной из ячеек, либо при попытке удалить строку с использованием DBNavigator'а, либо при попытке обновить таблицу с помощью него же выскакивает ошибка "Недостаточно сведений ключевого поля для обновления". Ответ искал на форумах, но ничего не нашел, может быть плохо искал. Юзаю технологию ADO и, как и положено настоящему хелоуворлдщику, аксес. База для наглядности тут: //ifolder.ru/13903589
Более подробно, Вывожу запрос "Табель" с помощью ADOTable в дбгрид, пытаюсь изменить поля "Класс" либо "Предмет*", он выдает мне вышеуказанную ошибку. Через квери пробовал, ерунда та же. Помогите, кто хорошо знает С++ билдер.
ЗЫ Если уж не можете помочь с прогой, киньте ссылку на хорошую книжку по ADO.

13 ответов в теме “С++ builder. Проблемы с запросом с использованием ADO. Помогите решить.”

  1. 3
    Антон Кононов ответил:

    не вникаю в проблему поэтому могу ответить не на тот вопрос:

    если ты делаешь запрос, в котором каждая строка из этого запроса не всегда отражает ТОЛЬКО ОДНУ строку из таблицы, то стандартные средства не смогут обновить/удалить/изменить строки этого запроса

    пример1:
    SELECT T1.F1, T2.F2 FROM T1, T2 WHERE T1.ID=T2.ID
    в этом запросе каждая строка из запроса явно указывает на одну строку в T1 и T2

    пример2:
    SELECTT1.F1, MAX(T2.F2) FROM T1, T2 WHERE T1.ID=T2.ID [GROUP BY T1.F1]
    выражение группировки взял в [...] потому что некоторые SQL могут и без этой контсрукции.
    в этом запросе одна строка из запроса соответствует одной строке из T1 и нескольким из T2
    обновление такого запроса невозможно стандартными стредствами.

    В ODAC например есть возможность руками прописать алгоритм UPDATЕ и DELЕTЕ. В ADO не видел такого. Придется вешаться на события навигатора, либо на BeforeDelete, DeforeUpdate

  2. 2
    Леонид Максимов ответил:

    DBGrid имеет какой-нибудь способ указать ключ в используемой таблице? иначе в режиме статического набора записей ориентироваться у него не получится. либо используйте другой режим для открытия таблицы.

  3. 1
    Артур Булакаев ответил:

    Видел такое, только в Дельфях… Вроде у компонента ADOQuery должно быть свойство вроде CursorLocation или Position, там должно стоять Server.
    (думаю в билдере ADO должна выглядеть примерно так же)

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.