Шаблон под MAV

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

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

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

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

Admin писал(а): Андрей а почему сложно сделать для любителей мутных селектов возможность задания своего ручного условия WHERE ?
Я думаю тебе наверное нужно каждую переменную проверять на изменение и т.д. но в некоторых случаях массу времени теряешь на описывание условия в твоем довольно таки мутном конструкторе WHERE :)
для любителей мутных SELECTов всё уже предусмотрено, метод .Where перегруженный, т е его можно юзать в нескольких вариациях, к примеру можно

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

 sql.Where('field1 in (select field1 from table2) or ...')
а ещё можно и сами запросы произвольные на вход метода .Run пихать:

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

  sql.BindField(File.Field1)
  sql.BindField(File.Field2)
  IF sql.Run('seelct field1,field2 from myTable1 where ... having ...')
Admin писал(а): К вопросу о тредах и зависонах программы:
Почему нельзя использовать CriticalSection для последовательного выполнения запросов?
идею не понял
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

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

Admin писал(а):Вот еще трабла какая то. На работе все работало на ура а дома орет:

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

Error    : [242] [Microsoft][ODBC SQL Server Driver][SQL Server]The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. (22007)
           SQL Statement - SELECT TOP 1000 0,0,0,0,UserLogin,0,ComputerName,0,ProcedureName,0,0,0,Message,0,MessageType,MessageDateTime FROM xa_logs WHERE ProgramID=1 AND (MessageDateTime >='2006-08-16 00:00:00' AND MessageDateTime <='2006-08-18 23:59:59') ORDER BY MessageDateTime DESC
И чего в дате и времени не нравится не пойму :(
такие вопросы уже не ко мне, у тебя разные настройки формата даты на сервере дома и на работе, я бы не советовал так юзать в строковом виде поля типа дата, лучше биндить и писать через

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

  Clear(File.FieldDATE)
  File.FieldDate_DATE = требуемая дата
  sql.BindParameter(File.FieldDATE,File.FieldDATE)
  File.FieldDate_Time = требуемое время
  sql.BindParameter(File.FieldDATE,File.FieldDATE)
  sql.Where(sql.Field(File.FieldDATE) & ' between ? and ?')
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

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

Admin писал(а):

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

твой шаблон должен быть дочерним к BrowseUpdateButtons(MAVT) 
а #AT 
#AT(%MAVTUpdProcedures,%ActiveTemplateInstance,'Action','CODE') 
на входе Control 
CASE Control 
OF ?Insert 
... 
RETRUN 1 - DISABLE 
RETURN 0 - ENABLE
Андрей напиши точно куда вставлять т.к. то что ты написал не верно!
У данного метода Action прототип другой:
BRW1:Update.Action FUNCTION(LONG Request)

есть метод у бровза:
BRW1:Browse.Action FUNCTION(SIGNED Control)
но RETURN 0 из него ни к чему не приводит!
т.е. кнопки не дизаблятся ...
ты прав, твой шаблон должен быть дочерним к MAVBrowse

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

#AT(%MAVTBrwAction,%ActiveTemplatePrimaryInstance)
 OF ?Insert
   RETURN 1 ! DISABLE 0-ENABLE
  END
#ENDAT
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

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

Admin писал(а):Вот еще... создаю соединение по умолчанию, дальше за ним создаю соединение для работы xAccess и при MAVINSERT со вторым соединением получаю:

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

Error    : [0] [Microsoft][Диспетчер драйверов ODBC] Тип программы выходит за пределы допустимого диапазона (HY003)
           SQL Statement -
           Binding field 1  = 26
           INSERT INTO xa_users ("ProgramID","UserStatus","UserName","UserLogin","UserPassword","UserOnline","LoginDateTime","LogoutDateTime","OnlineDateTime") VALUES(?,?,?,?,?,?,?,?,?) SELECT SCOPE_IDENTITY()
мало информации, на примере ABCMAVT возможно воспроизвести ситуацию?

при чём тут [Диспетчер драйверов ODBC] , непонятно

Admin писал(а): P.S. Если быстро стартовать 3-6 процедур в программе то прога 100% виснет ... (использован дефолтовый пример MAV) :(

про последовательность выполнения запросов я уже писал и это ноги от туда, КАК ЛЕЧИТЬ И БЛОКИРОВАТЬ ЗАПРОСЫ, КОГДА ПРЕД ЕЩЁ НЕ ВЫПОЛНЕНЫ В ПАРАЛЕЛЛНЫХ ПОТОКАХ ДУМАЮ, но честно говоря меня это ещё никогда не напрягало это ограничение, интересно у кого ещё есть такие же проблемы?
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

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

Admin писал(а):К вопросу о тредах и зависонах программы:
Почему нельзя использовать CriticalSection для последовательного выполнения запросов?
попробовал, не катит, зависоны остаются, т к .Wait() и .Release() работают в своих потоках

но сделал, кстати довольно просто, есть базовый класс MAVCursor, у него все остальные - наследники, у этого базового есть .Open() и .Close() методы, туда вставил вызовы своих .Wait и .Release

а свой класс а-ля CriticalSection получился очень простой

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

CursorLockType          CLASS
Opened                  LONG,PRIVATE
Wait                    PROCEDURE()
Release                 PROCEDURE()
 END
!---------------------------------------------------------------------
CursorLockType.Wait                    PROCEDURE
        CODE
        
 IF SELF.Opened
  Sleep(1000)
  SELF.Wait
  RETURN
 END       
 
 SELF.Opened = 1

!---------------------------------------------------------------------
CursorLockType.Release                 PROCEDURE
        CODE
 SELF.Opened = 0
         
зависонов теперь добиться не могу, и кстати данный алгоритм совмести со ввсеми версиями Clarion
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

использование MAvLOAD не в первом (default) соединении

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

до сих пор у функции MAVLOAD - получение результата по произвольному SQL запросу не было возможности выставить явно в каком соединении он выполняется, т к параметров у MAVLOAD много я не стал расширять данные функции на доп параметр - имя соединения, я сделал по другому - если в запросе в начале присутсвует ключевое слово в квадратных скобках - это и есть имя соединения в котором должем выполняться запрос

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

 IF MAVLOAD('[CONNECT2]select field1 from mytable...)
Аватара пользователя
Admin
Администратор
Сообщения: 3996
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 46 раз
Поблагодарили: 26 раз
Контактная информация:

Сообщение Admin »

Спасибо за обнавления... вечером жду ссылку. :)
попробовал, не катит, зависоны остаются, т к .Wait() и .Release() работают в своих потоках
Как это в своих потоках если я данный класс специально использовал как флаг не зависимый от потоков... IMHO что то ты не так сделал...
Могу пример написать если что.
Тип программы выходит за пределы допустимого диапазона [HY003]
Вот про эту ошибку вечером в ICQ подробнее расскажу как ее добился и кину ODBC трассировку ...
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

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

Admin писал(а):Спасибо за обнавления... вечером жду ссылку. :)
попробовал, не катит, зависоны остаются, т к .Wait() и .Release() работают в своих потоках
Как это в своих потоках если я данный класс специально использовал как флаг не зависимый от потоков... IMHO что то ты не так сделал...
Могу пример написать если что.
а нахрена, я тут выше показал на что я заменил и это работает, вот если я в этих методах вызову .Wait и .Release от CS то всё - труба - но не сразу в трассе видно, что CS Release ещё не отработал а уже идёт след .Wait
Admin писал(а): Тип программы выходит за пределы допустимого диапазона [HY003]Вот про эту ошибку вечером в ICQ подробнее расскажу как ее добился и кину ODBC трассировку ...
это я уже вычислил и починил
Аватара пользователя
Admin
Администратор
Сообщения: 3996
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 46 раз
Поблагодарили: 26 раз
Контактная информация:

Сообщение Admin »

#AT(%MAVTBrwAction,%ActiveTemplatePrimaryInstance)
OF ?Insert
RETURN 1 ! DISABLE 0-ENABLE
END
#ENDAT
Данный код не работает!
Шаблон у тебя есть я кидал. Там вс евидно что я сделал.
Сейчас у меня генерится такой код:

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

BRW1:Browse.Action                       FUNCTION(SIGNED Control)
 CODE
 CASE Control
  OF ?Insert
    RETURN 1
  OF ?Change
    RETURN 1
  OF ?Delete
    RETURN 1
 END
 RETURN PARENT.Action(Control)
и он не работает, т.е. не отключает кнопки Insert, Change, Delete
что скажешь?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

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

Admin писал(а):
#AT(%MAVTBrwAction,%ActiveTemplatePrimaryInstance)
OF ?Insert
RETURN 1 ! DISABLE 0-ENABLE
END
#ENDAT
Данный код не работает!
Шаблон у тебя есть я кидал. Там вс евидно что я сделал.
Сейчас у меня генерится такой код:

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

BRW1:Browse.Action                       FUNCTION(SIGNED Control)
 CODE
 CASE Control
  OF ?Insert
    RETURN 1
  OF ?Change
    RETURN 1
  OF ?Delete
    RETURN 1
 END
 RETURN PARENT.Action(Control)
и он не работает, т.е. не отключает кнопки Insert, Change, Delete
что скажешь?
я говорил что update кнопки это на тему Browse button
оказалось .Action реализация для update кнопок отличается от .Action реализации Browse button кнопок

надо было именно в MAV1:Save.Action делать, как я и говорил

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

 CASE Request
   OF InsertRecord
     RETURN 1 ! для ?Insert
   ...
 END
но я уже поправил и твой код уже будет работать нормально

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

Сообщение Admin »

Andrew™ писал(а):пока не буду получать уведомления об ответах - отвечать буду с задержками!!!
Ну не знаю что сделать Андрей. Я все получаю... и народ тоже ...
Спроси своего вебмастера. Может он в спам все спулит?
Просто чудеса какие то получаются :(

Вот к примеру письмо от 22 агуста мне... от форума.

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

Return-path: <SRS0>
Envelope-to: mixer@seal-soft.com
Delivery-date: Tue, 22 Aug 2006 00:46:16 -0400
Received: from authsmtp09.yourhostingaccount.com ([10.1.18.9] ident=exim)
        by scan01.yourhostingaccount.com with spamscanpop (Exim)
        id 1GFO9Y-0006s9-DP
        for mixer@seal-soft.com; Tue, 22 Aug 2006 00:46:16 -0400
X-Spam-Result: maildir
X-Spam-Checker-Version: SpamAssassin 3.1.0 (2005-09-13) on 
        scan01.int.bizland.net
X-Spam-Level: *********
X-Spam-Status: No, score=9.9 required=10.0 tests=BAYES_99,FORGED_RCVD_HELO,
        NO_REAL_NAME,SUBJ_ALL_CAPS,SUBJ_ILLEGAL_CHARS autolearn=disabled 
        version=3.1.0
Received: from authsmtp09.yourhostingaccount.com ([10.1.18.9] helo=authsmtp09.yourhostingaccount.com)
        by scan01.yourhostingaccount.com with esmtp (Exim)
        id 1GFO9X-0006s5-Q6
        for forum@clarionlife.net; Tue, 22 Aug 2006 00:46:15 -0400
Received: from 65-254-224-36.yourhostingaccount.com ([65.254.224.36] helo=smtp.powweb.com)
        by authsmtp09.yourhostingaccount.com with esmtpa (Exim)
        id 1GFO9X-0003oR-Js
        for forum@clarionlife.net; Tue, 22 Aug 2006 00:46:15 -0400
Subject: Уведомление об ответе - Шаблон под MAV
To: Undisclosed-recipients:;
Reply-to: forum@clarionlife.net
From: forum@clarionlife.net
Message-ID: <b38bb927bf402e3450d39379a9b6250d>
MIME-Version: 1.0
Content-type: text/plain; charset=windows-1251
Content-transfer-encoding: 8bit
Date: Tue, 22 Aug 2006 00:46:15 -0400
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: PHP
X-MimeOLE: Produced By phpBB2
X-EN-UserInfo: 3759f7f2b7fd6fb607095b2e400508eb:f34f21d42723d172f40b5e2b4f274a28
X-EN-AuthUser: forum@clarionlife.net
Sender:  forum@clarionlife.net

Здравствуйте!

Вы получили это сообщение потому, что следите за темой "Шаблон под MAV" на сайте forum.clarionlife.net. В
этой теме со времени вашего последнего посещения появилось новое сообщение. Вы можете перейти по ссылке,
чтобы прочитать поступившие ответы; новые уведомления не будут приходить, пока вы не просмотрите тему:

http://forum.clarionlife.net/viewtopic.php?p=6993#6993

Если вы больше не хотите следить за темой, то либо щёлкните по ссылке "перестать следить за темой" внизу
страницы, либо перейдите по следующей ссылке:

http://forum.clarionlife.net/viewtopic.php?t=1731&unwatch=topic

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

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

Admin писал(а):Ну не знаю что сделать Андрей. Я все получаю... и народ тоже ...
Спроси своего вебмастера. Может он в спам все спулит?
Просто чудеса какие то получаются :(
для информации, всё началось с того дня, когда мне ник на текущий поменяли в БД форума ручками т к самостоятельно это было сделать невозможно, что то не до конца было в БД форума сделано.
Аватара пользователя
Admin
Администратор
Сообщения: 3996
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 46 раз
Поблагодарили: 26 раз
Контактная информация:

Сообщение Admin »

Андрей сообщи мне - письма тебе стали с форума приходить?

Далее. Нужна новая точка вставки...

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

#AT(%MAVTBrwProcedures,%ActiveTemplateInstance,'Action','CODE')
 <- мне нужен #EMBED вот в этой точке
#SUSPEND
 #?CASE Control
  #EMBED(%MAVTBrwAction,'Action'),%ActiveTemplateInstance,HIDE
 #?END
#RESUME
 RETURN PARENT.Action(Control)
#ENDAT
Это нужно для того что бы я мог вставить свой код "OF ?View"
перед твоим. Сейчас у твоего "OF ?View" стоит атрибут FIRST
и я никак перед ним не могу поместить код.
Вот пример того как сейчас получается:

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

BRW1:Browse.Action                       FUNCTION(SIGNED Control)
 CODE
 CASE Control
   OF ?View
    IF NOT RECORDS(SELF.Q)
     RETURN 1
    END
  OF ?View
    IF CheckAccess.GetRight('UpdateIncome',accVAccess) <> xAcc:Granted THEN RETURN 1 END
Так же не пойму как у тебя работает CONNECT с третим параметром. Я так понял 0 если не хочешь получить стандартное окно логина от ODBC при ошибке. У меня если ставлю 0 и ввожу неверную базу или пароль - программа падает.

И на последок... Как сделать DropDownCombobox?
Нужно вводить строку. Если ее нет в базе показать форму добавления и т.д. В общем как в стандартной кларе...
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

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

Admin писал(а):Андрей сообщи мне - письма тебе стали с форума приходить?
нет
Admin писал(а): Далее. Нужна новая точка вставки...

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

#AT(%MAVTBrwProcedures,%ActiveTemplateInstance,'Action','CODE')
 <- мне нужен #EMBED вот в этой точке
#SUSPEND
 #?CASE Control
  #EMBED(%MAVTBrwAction,'Action'),%ActiveTemplateInstance,HIDE
 #?END
#RESUME
 RETURN PARENT.Action(Control)
#ENDAT
Это нужно для того что бы я мог вставить свой код "OF ?View"
перед твоим. Сейчас у твоего "OF ?View" стоит атрибут FIRST
и я никак перед ним не могу поместить код.
Вот пример того как сейчас получается:

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

BRW1:Browse.Action                       FUNCTION(SIGNED Control)
 CODE
 CASE Control
   OF ?View
    IF NOT RECORDS(SELF.Q)
     RETURN 1
    END
  OF ?View
    IF CheckAccess.GetRight('UpdateIncome',accVAccess) <> xAcc:Granted THEN RETURN 1 END
ну и чем не нравитcя, ежели нет записей зачем её ENABLить, только OF ?View выкинь
Admin писал(а): Так же не пойму как у тебя работает CONNECT с третим параметром. Я так понял 0 если не хочешь получить стандартное окно логина от ODBC при ошибке. У меня если ставлю 0 и ввожу неверную базу или пароль - программа падает.
у меня не падает, может далее чтото пытаешьсмя делать а объекта коннекта у тебя нету, на ABCMAVT.APP проверил - не падает
Admin писал(а): И на последок... Как сделать DropDownCombobox?
Нужно вводить строку. Если ее нет в базе показать форму добавления и т.д. В общем как в стандартной кларе...
выставляешь атрибут DROP у Browse, в свойствах Borwse на закладке Action появится кнопарь Contyrol Type - выбеи Drop Combo и закрепи переменную для него и связь, если требуется, вот авто добавление - это придётся тебе самому организовывать
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

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

Admin писал(а): Далее. Нужна новая точка вставки...

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

#AT(%MAVTBrwProcedures,%ActiveTemplatePrimaryInstance,'Action','CODE'),FIRST
 CASE Control
  OF ?View
   RETURN 1
 END
#ENDAT
Ответить