Вопрос по БД
Есть главная таблица, в которую забиваются коды из таблиц-справочников, хочу чтобы при просмотре в dbgrid показывались не коды, а наименования из справочников.
Заранее спасибо!
Есть главная таблица, в которую забиваются коды из таблиц-справочников, хочу чтобы при просмотре в dbgrid показывались не коды, а наименования из справочников.
Заранее спасибо![/QUOTE]
Применять связывание таблиц. Типа такого запроса:
select table1.field1_1, table2.field2_3 from table1 inner join table2 on table1.field1_2 = table2.field2_1
select table1.field1_1, table2.field2_3 from table1 inner join table2 on table1.field1_2 = table2.field2_1[/QUOTE]
Извиняюсь за бестолковый вопрос, а каким образом осуществить связывание таблицы? Какой инструмент нужно для этого использовать?
Через компоненту ADOQuery? Кстати база акцесовская
Можно через ADOQuery, а можно через ADOTable. База в сети или локальная? Если в сети, тогда быстрее будет работать Query. Если локальная, то Table (с некоторыми условностями). Можно поместить на форму 2 компонента ADOTable и через их свойства сделать связывание. Как конкретно, я не знаю: не работаю я с ними. Редактирование данных непосредственно в ДБГриде нужно?
Нет, редактирование и ввод через DBEdit. База локальная.
Связывание я произвел, но таким макаром, что на экране присутствуют две таблицы, и если я в одной таблице двигаю курсором во второй меняются данные. А мне нужно чтобы в одной таблице за место кода появлялась расшифровка его. В ADOTable в упор не увидел, как устроить такого рода связку.
Тогда вполне можно написать запрос в ADOQuery. Будет проще и эффективней.
Напиши примерную структуру таблиц, я набью запрос
поля:
ключ. main2oper (числ.)
main2ofzp (числ.) код
база ofzp
поля:
ключ. ofzp_kod (счетчик)
ofzp_name (текст)
ofzp_oklad (денеж.)
на экране база main2
КОд / Наименование ОФЗП
main2oper / main2ofzp=ofzp_name
select main2oper, ofzp_name from main2, ofzp where main2.main2ofzp=ofzp.ofzp_kod
Отличие от Foxpro получается минимальны.
п.с. Только видимо не "база main2", а "таблица main2"?
При компилирование и установки ADOQuery Active=true пишет, "несоответствие типа в выражении". Где искать причину?
А типы полей main2.main2ofzp и ofzp.ofzp_kod совпадают?
Кстати правильность запроса можно проверить в аксесе. Или в режиме конструктора создать запрос в access, потом sql-текст скопировать в ADOQuery, удалив лишнее.
Заработало, показались в гриде данные.
пишу
SELECT main2oper, ofzp_name from main2 inner join ofzp on main2ofzp = ofzp_kod
Выдается ошибка: Не поддерживается выражение объединения
Оба поля числовые
Усе заработало, в акцессе кстати твой код заработал. Большое спасибо!
Блин, а в билдере не хочет
SELECT main2oper, ofzp_name from main2 inner join ofzp on main2ofzp = ofzp_kod
Выдается ошибка: Не поддерживается выражение объединения[/QUOTE]
Что-то не понял. в Access этот-же запрос работает? Может пришлешь мне твою базу со структурой, я попробую?
В акцессе запрос сработал, в билдере ошибка "не поддерживается выражение объединения".
ОК, скинь мне свое мыло на [email]kerk@onego.ru[/email]
SELECT main2.main2oper, ofzp.ofzp_name
FROM main2 INNER JOIN ofzp ON main2.main2ofzp=ofzp.ofzp_kod;
Это чего, дело в точке с запятой было?
Ага, щас вот попробовал добавил, и завелся грид...
ну вот никогда access (aka ms jet) не любил...