Ошибка: "Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом"
Создана база данных в MS Access XP, содержащая две таблицы, одна основаная, вторая дополнительная (Таблица Отделы и таблица Сотрудники, основная и дополнительная соответственно). Управление базой сделал с помощью ADO в Delphi 7. Подключил базу через ADO Connection, создал DataSource, ADO Table и DBGrid для каждой таблицы. И при попытке установить Master Source и MAster Fields (для того чтобы в DBGrid дополнительной таблицы просматривать сотрудников только опереденного отдела) в дополнительной таблице выдает выше написанную ошибку. В Access связи не устанавливал.
Может кто подскажет как с этим бороться? Заранее спасибо!
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
08-09-2009 01:00
Понимаю, что тема старая, но отвечу, так сказать, для себя)
1. Именовать поля и таблицы в Access по-английски, конечно, желательно, но не обязательно.
2. Когда устанавливаете связи MasterSource и MasterFields сделайте таблицу Active=false. Связь будет создана, а так же автоматом заполнится свойство IndexFieldNames. Вот его то и надо обнулить и после этого только сделать таблицу Active=true. Тогда описанная выше ошибка не возникнет.
>>> все таки Delphi при помощи MasterSource и MasterFields создает связи
Работать то конечно работает, но не так. Когда вы устанавливаете "связи" в Delphi, это не влияет никак на тиблицы, поэтому при желании можно внести некорректиные данные - Detail, ссылающийся на несуществующий Master например. Если же Вы укажете связи в Access, то тем самым ГАРАНТИРОВАННО получите корректные данные, так как за этим будет следить теперь сам сервер.
Python, спасибо огромное за помощь! Сделал все имена полей и таблица на английском языке и все заработало....Интересный факт: все работает как с созданием связей в схеме данных Access, так и без создания связей. То есть получается, что все таки Delphi при помощи MasterSource и MasterFields создает связи, а не Access.
15-04-2007 06:22 | Вопрос к автору: запрос дополнительной информации
>>> одна основаная
Основаная на чем? Ладно, шутка, я понял, про что речь. Только наверное, главная все-же таблица Сотрудники, так как именно в них должно быть поле - ссылка на код отдела, в котором работает данный сотрудик.
>>> В Access связи не устанавливал
Вот это то и неправильно. Поля, которые ты связываешь в Delphi должы быть обязательно связаны в Access. Потому что ты пишешь КЛИЕНТ - он только отображает даные, все операции по проверкам (в частности, тому, что ты ссылаешься в таблице Сотрудники на существующий отдел) должен проводить СЕРВЕР - он для того и дан, а это устанавливается через foreign key, или связи в терминах Access. Дайте посмотреть типы полей в той и другой таблице, по которым осуществляете связь. У Вас должен быть DepNo в таблице Отделы, типа Счетчик, или Целочисленный (если номера отделов выдаются централизованно), а в таблице Сотрудники должно быть поле Depart типа Целочисленый - в нем должна быть ссылка на DepNo таблицы Отделы. Кстати, советую все наименования объектов базы осуществлять на английском языке - даже с учетом того, что Access поддерживает работу с русскоязычными именами таблиц и полей. При создании связей обязательно установите галочку - проверять ссылоную целостность, это не позволит Вам внести некорректные данные, потому полезно.
Причем, если создать связь в самом Access и из него же сделать форму, то связь работает и отображаются только сотрудники принадлежащие одному отделу.....
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.