Прошу разъяснить

Обсуждение MAV Direct ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
And234

Прошу разъяснить

Сообщение And234 »

1. Для чего предназначены
Select record
constraint record
additional record
я обхожусь только селектом (можно ли так)

2. В базе организовано соединение таблиц через primary по коду
таблица код, название.
Как сделать чтоб по просмотру в вроуз другой таблицы вместо кода отображал название с первой а не его код.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Прошу разъяснить

Сообщение Andrew™ »

And234 писал(а):1. Для чего предназначены
Select record
constraint record
additional record
я обхожусь только селектом (можно ли так)
selected record - правило поиска в справочнике, например контрагента ищем по ИНН, и присваиваем Ref (primary key field), ИНН в документе не держим а держим Ref контрагента, вот по Ref - constraint record запись из справочника и подывается при повторном входе в форму

Additional record - ну это если в одной таблице лежит несколько справочников - доп WHERE поставщики клиенты, дружественые фирмы
And234 писал(а): 2. В базе организовано соединениprimary key fieldе таблиц через primary по коду
таблица код, название.
Как сделать чтоб по просмотру в вроуз другой таблицы вместо кода отображал название с первой а не его код.
не понял вопроса, если в DCT описана связь одной таблицы с другой, то как и штатно можно в File Schematic заюзать обе таблицы и отображать в LIST любые поля из этих таблиц.
And234

Сообщение And234 »

А красиво бы выглядело. (а то непонятные юзеру коды какие-то.)
Позже подумаю.
Может через виртуальную таблицу у которой одно поле сформировано по условию, подсовываемую в оконную таблицу с невидимой колонкой заменяемого кода.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

And234 писал(а):А красиво бы выглядело. (а то непонятные юзеру коды какие-то.)
Позже подумаю.
Может через виртуальную таблицу у которой одно поле сформировано по условию, подсовываемую в оконную таблицу с невидимой колонкой заменяемого кода.
всё равно не понял о чём речь

правило хорошего тона Primary key field не показывать конечному пользователю, он работает с названиями, условными кодами и т д

в БД же все связки FOREIGN KEY идут именно по Primary Key field
And234

Сообщение And234 »

всё равно не понял о чём речь
правило хорошего тона Primary key field не показывать конечному пользователю, он работает с названиями, условными кодами и т д
в БД же все связки FOREIGN KEY идут именно по Primary Key field
Это наверное не разработчику MAV, но может есть идеи.
В таблице платежи есть по крайней мере 4 колонки
1. IDP (primary key) - код платежа
2. IDD (FOREIGN KEY) - связь с таблицей плательщиков
3. IDType (FOREIGN KEY) - связь с таблицей типов платежа
4. Summa - цель хранения
Запись в Brouse такая
2653 | 69 | 11 | 5000.00
Это дело выглядит красиво в двухтабличном броувзе (как у вас в примере для просмотра плательщиков) где вторая таблица отображает результат фильтра по выбранному плательщику с первой.
Но не устранен просмотр типа платежа (вместо 11 хотелось бы видеть без нал)
Я вот это хотел.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

And234 писал(а):
всё равно не понял о чём речь
правило хорошего тона Primary key field не показывать конечному пользователю, он работает с названиями, условными кодами и т д
в БД же все связки FOREIGN KEY идут именно по Primary Key field
Это наверное не разработчику MAV, но может есть идеи.
В таблице платежи есть по крайней мере 4 колонки
1. IDP (primary key) - код платежа
2. IDD (FOREIGN KEY) - связь с таблицей плательщиков
3. IDType (FOREIGN KEY) - связь с таблицей типов платежа
4. Summa - цель хранения
Запись в Brouse такая
2653 | 69 | 11 | 5000.00
Это дело выглядит красиво в двухтабличном броувзе (как у вас в примере для просмотра плательщиков) где вторая таблица отображает результат фильтра по выбранному плательщику с первой.
Но не устранен просмотр типа платежа (вместо 11 хотелось бы видеть без нал)
Я вот это хотел.
всё же штатно, в DCT опиши связь файла платежи с файлом типы платежей
в Browse в File Schematic появится возможность подцепить к файлу Платежи файл типы Платежей, и отображай в Browse вместо IDType поле из файла тип платежей.
And234

Сообщение And234 »

2 вопроса.
1. Сущестуют 2 связанные по коду таблицы
Как мне сделать в форме редактирования записи одной таблицы просмотр элементов другой таблицы отличной от кода.
(может это настраивается штатно) без запроса с известным кодом(связи).
2. Где найти пример с выполнением SQL запроса и возвратом таблицы результата.
Что нить по проще чем в Импорте таблиц в примере ABCMAV
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

And234 писал(а):2 вопроса.
1. Сущестуют 2 связанные по коду таблицы
Как мне сделать в форме редактирования записи одной таблицы просмотр элементов другой таблицы отличной от кода.
(может это настраивается штатно) без запроса с известным кодом(связи).
ставишь в форме Browse по другой таблице, на закладке Condition behaviour - default - выставляешь фильтр по коду not equate коду первой таблицы
And234 писал(а): 2. Где найти пример с выполнением SQL запроса и возвратом таблицы результата.
Что нить по проще чем в Импорте таблиц в примере ABCMAV
самое простое:

Код: Выделить всё

myQueue  Queue
Field1        LONG
 END

 CODE
 IF MAVLOAD('select Field from myTable1',myQueue)
  MAVSHOWERROR
 ELSE
  ! Ok, залили в Queue результат запроса
 END
Аватара пользователя
Admin
Администратор
Сообщения: 3960
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Сообщение Admin »

самое простое:

Код: Выделить всё

myQueue  Queue
Field1        LONG
 END

 CODE
 IF MAVLOAD('select Field from myTable1',myQueue)
  MAVSHOWERROR
 ELSE
  ! Ok, залили в Queue результат запроса
 END
простое то простое.... но!
вот смотри после MAVLOAD у меня результат ошибки Запись не найдена[35]
А как мне код ошибки получить? Не текст ошибки а именно код.

Мне нужно найти запись в таблице. Если она есть - Ok
А если ее нет мне нужно ее добавить. А у тебя в данном случае при отсутствии записи выскочит ошибка...
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

Admin писал(а):
самое простое:

Код: Выделить всё

myQueue  Queue
Field1        LONG
 END

 CODE
 IF MAVLOAD('select Field from myTable1',myQueue)
  MAVSHOWERROR
 ELSE
  ! Ok, залили в Queue результат запроса
 END
простое то простое.... но!
вот смотри после MAVLOAD у меня результат ошибки Запись не найдена[35]
А как мне код ошибки получить? Не текст ошибки а именно код.

Мне нужно найти запись в таблице. Если она есть - Ok
А если ее нет мне нужно ее добавить. А у тебя в данном случае при отсутствии записи выскочит ошибка...
во первых проверил, в случае если записей по условию нет, MAVLOAD возвращает НОЛЬ и условие отсутвия записи

Код: Выделить всё

 IF NOT MAVLOAD() AND NOT RECORDS(LoadQueue)
 END
но это как то кузяво, если нужна проверка наличия записи в таблице описанной в словаре, то воспользуйся следующими функциями:

если подымаешь запись по Primary Key:

Код: Выделить всё

 File.Field1 = value
 CASE MAVGET(File)
  OF NoError 
    ! запись есть
  OF NoRecErr
    ! записи нет
   ELSE
    ! ошибка чтения
 END
если по произвольным полям

Код: Выделить всё

 MAVCLEAR(File)
 File.Field2 = val2
 File.field3 = val3
 CASE MAVGETFROMRECORD(File)
  OF NoError 
    ! запись есть
  OF NoRecErr
    ! записи нет
   ELSE
    ! ошибка чтения
 END
почему не MAVLoad, а MAVGET
1. КУРСОР ПРЕПАРИРУЕТСЯ НА ПОЛУЧЕНИЕ ИЗ бд 1 ЗАПИСИ, ДЛЯ mavload КОЛ-ВО ЗАПИСЕЙ - ВСЕ СКОКА ЕСТЬ В бд
2. НА MAVLOAD ВСЕГДА ИДЁТ SQLDESCRIBE ЗАПРОСА, ДЛЯ mavget И ВСЕХ КУРСОРНЫХ ОБЪЕКТОВ SQLDESCRIBE ДКЛАЕТСЯ ТОЛЬКО ОДИН РАЗ ПРИ ПЕРВОМ ОБРАЩЕНИИ К ФАЙЛУ ИЗ dct


MAVLOAD в своих трёх вариациях необходимо использовать для получения произвольных запросов по структурам, которые не описаны в словаре

ЗЫ
а уведомления об ответах в ветках мне так и не приходят вааще ;(
Аватара пользователя
Admin
Администратор
Сообщения: 3960
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Вот еще трабла!

Сообщение Admin »

Смотри:

Код: Выделить всё

xAccessDMClass.GetName               PROCEDURE(*GROUP File,STRING Name)!,STRING,VIRTUAL
  CODE
  CASE INSTANCE(File,THREAD())
  OF ADDRESS(xaccLinks)
    RETURN 'xa_links'
  OF ADDRESS(xaccLogs)
почему мне пришлось использовать INSTANCE а не ADDRESS как у тебя?
C ADDRESS не работает. Адрес группы не верно возвращает... :(
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Вот еще трабла!

Сообщение Andrew™ »

Admin писал(а):Смотри:

Код: Выделить всё

xAccessDMClass.GetName               PROCEDURE(*GROUP File,STRING Name)!,STRING,VIRTUAL
  CODE
  CASE INSTANCE(File,THREAD())
  OF ADDRESS(xaccLinks)
    RETURN 'xa_links'
  OF ADDRESS(xaccLogs)
почему мне пришлось использовать INSTANCE а не ADDRESS как у тебя?
C ADDRESS не работает. Адрес группы не верно возвращает... :(
кто сказал, что я юзаю ADDRESS, погляди что шаблоны генерят, у меня для совместимости со всеми версиями Clarion существует своя функция MAVADDRESS, которая и юзается в .GetName()
Аватара пользователя
Admin
Администратор
Сообщения: 3960
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Re: Вот еще трабла!

Сообщение Admin »

у меня для совместимости со всеми версиями Clarion существует своя функция MAVADDRESS, которая и юзается в .GetName()
Да. Каюсь. Сам прогнал. Спасибо!
Ответить