Страница 2 из 4
Добавлено: 21 Август 2006, 13:55
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 для последовательного выполнения запросов?
идею не понял
Добавлено: 21 Август 2006, 13:59
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 ?')
Добавлено: 21 Август 2006, 14:04
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
Добавлено: 21 Август 2006, 14:11
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)
про последовательность выполнения запросов я уже писал и это ноги от туда, КАК ЛЕЧИТЬ И БЛОКИРОВАТЬ ЗАПРОСЫ, КОГДА ПРЕД ЕЩЁ НЕ ВЫПОЛНЕНЫ В ПАРАЛЕЛЛНЫХ ПОТОКАХ ДУМАЮ, но честно говоря меня это ещё никогда не напрягало это ограничение, интересно у кого ещё есть такие же проблемы?
Добавлено: 22 Август 2006, 8:46
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
использование MAvLOAD не в первом (default) соединении
Добавлено: 22 Август 2006, 9:00
Andrew™
до сих пор у функции MAVLOAD - получение результата по произвольному SQL запросу не было возможности выставить явно в каком соединении он выполняется, т к параметров у MAVLOAD много я не стал расширять данные функции на доп параметр - имя соединения, я сделал по другому - если в запросе в начале присутсвует ключевое слово в квадратных скобках - это и есть имя соединения в котором должем выполняться запрос
Код: Выделить всё
IF MAVLOAD('[CONNECT2]select field1 from mytable...)
Добавлено: 22 Август 2006, 10:06
Admin
Спасибо за обнавления... вечером жду ссылку.
попробовал, не катит, зависоны остаются, т к .Wait() и .Release() работают в своих потоках
Как это в своих потоках если я данный класс специально использовал как флаг не зависимый от потоков... IMHO что то ты не так сделал...
Могу пример написать если что.
Тип программы выходит за пределы допустимого диапазона [HY003]
Вот про эту ошибку вечером в ICQ подробнее расскажу как ее добился и кину ODBC трассировку ...
Добавлено: 23 Август 2006, 8:39
Andrew™
Admin писал(а):Спасибо за обнавления... вечером жду ссылку.
попробовал, не катит, зависоны остаются, т к .Wait() и .Release() работают в своих потоках
Как это в своих потоках если я данный класс специально использовал как флаг не зависимый от потоков... IMHO что то ты не так сделал...
Могу пример написать если что.
а нахрена, я тут выше показал на что я заменил и это работает, вот если я в этих методах вызову .Wait и .Release от CS то всё - труба - но не сразу в трассе видно, что CS Release ещё не отработал а уже идёт след .Wait
Admin писал(а):
Тип программы выходит за пределы допустимого диапазона [HY003]Вот про эту ошибку вечером в ICQ подробнее расскажу как ее добился и кину ODBC трассировку ...
это я уже вычислил и починил
Добавлено: 23 Август 2006, 9:48
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
что скажешь?
Добавлено: 23 Август 2006, 13:00
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
но я уже поправил и твой код уже будет работать нормально
ЗЫ
пока не буду получать уведомления об ответах - отвечать буду с задержками!!!
Добавлено: 23 Август 2006, 17:28
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
Добавлено: 28 Август 2006, 8:41
Andrew™
Admin писал(а):Ну не знаю что сделать Андрей. Я все получаю... и народ тоже ...
Спроси своего вебмастера. Может он в спам все спулит?
Просто чудеса какие то получаются
для информации, всё началось с того дня, когда мне ник на текущий поменяли в БД форума ручками т к самостоятельно это было сделать невозможно, что то не до конца было в БД форума сделано.
Добавлено: 28 Август 2006, 9:24
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?
Нужно вводить строку. Если ее нет в базе показать форму добавления и т.д. В общем как в стандартной кларе...
Добавлено: 28 Август 2006, 11:54
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 и закрепи переменную для него и связь, если требуется, вот авто добавление - это придётся тебе самому организовывать
Добавлено: 28 Август 2006, 12:01
Andrew™
Admin писал(а):
Далее. Нужна новая точка вставки...
Код: Выделить всё
#AT(%MAVTBrwProcedures,%ActiveTemplatePrimaryInstance,'Action','CODE'),FIRST
CASE Control
OF ?View
RETURN 1
END
#ENDAT