· web viewude Общие вопросы разработки в ude. 1. Вопрос: Как...

45
Вопросы и ответы по UDE Общие вопросы разработки в UDE . 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица 1. Она имеет поле1, которое заполняется из таблицы 2, и поле2, которое заполняется из таблицы 3, но с учетом фильтрации таблицы 3 по полю1. В форме таблица 1 выводится через TTektonDBGrid. Ответ: Все не так просто. В модуле нужны две копии таблицы 3. Одна – нефильтрованная - для Lookup'а. Вторая либо Detail к таблице1, но тогда при изменения поля1 надо делать Post, либо на событии OnEditButtonClick надо устанавливать на нее фильтр в зависимости от текущего значения поля 1. Можно также обойтись без второй копии, но тогда стандартный Pick использовать не получится и надо будет нарисовать специальную форму выбора, которую вызывать по тому же событию OnEditButtonClick 2. Вопрос: Есть ли команда снятия фильтра? Ответ: Dataset.SetFilter "" Вопрос: А еще по событию OnEditButtonClick вызывается собственная форма. Но при работе отрабатывается стандартный Pick в TTektonDBGrid. Что здесь не так? Ответ: Если стандартный не нужен, надо у колонки грида просто установить UseStandardPick=false Вопрос: А это установлено. Ответ: Там точно false? Если да, стандартный не вызовется. А там случайно не ButtonStyle=cbsAuto? Этим пользоваться вообще нельзя, должно быть cbsEllipsis всегда. Вопрос: Но там всегда у нас по умолчанию было cbsAuto. А на что это влияет? Ответ: По умолчанию всегда cbsAuto, это у DBGrid'а стандартного так. В этом случае для Lookup полей он нарисует кнопку со стрелкой вниз, по которой выпадающий список вызовется. Это не тектоновская фича, а из Delphi. В этом случае OnEditButtonClick вообще никогда не вызовется - ни мой внутренний, который StandardPick обрабатывает, ни ваш внешний. Вопрос: А примерчик на тему: есть два поля где вызываются Pick, как определить какое из них какое. Ответ: if Form.CondTektonDBGrid.SelectedField="NMSACCOUNTD" then и т.п. для всех полей Вопрос: А оно пишет, что объект не поддерживает это свойство или метод Form.ContTektonDBGrid Что можно сделать? Ответ: Form.Имя Вашего Грида.SelectedField Я просто выдрал кусок своего исходника, естественно у меня компоненты по-своему называются Вопрос: В твоем Pick название поля идет по английски. А как по русски сделать? Ответ: А в редакторе модуля данных русское имя поля прописано? Должно быть по-русски Вопрос: Есть неудобство. Можно ли его решить? Когда в редакторе процедуры набираем текст процедуры, а внизу открыто окно помощи, то при вводе знакомого слова для помощи, автоматически курсор уходит из окна текста. И если не смотреть на экран, получается набивка в пустоту. Приходится возвращать курсор

Upload: others

Post on 23-May-2020

18 views

Category:

Documents


0 download

TRANSCRIPT

Page 1:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Вопросы и ответы по UDE

Общие вопросы разработки в UDE .

1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица 1. Она имеет поле1, которое заполняется из таблицы 2, и поле2, которое заполняется из таблицы 3, но с учетом фильтрации таблицы 3 по полю1. В форме таблица 1 выводится через TTektonDBGrid. Ответ: Все не так просто. В модуле нужны две копии таблицы 3. Одна – нефильтрованная - для Lookup'а. Вторая либо Detail к таблице1, но тогда при изменения поля1 надо делать Post, либо на событии OnEditButtonClick надо устанавливать на нее фильтр в зависимости от текущего значения поля 1. Можно также обойтись без второй копии, но тогда стандартный Pick использовать не получится и надо будет нарисовать специальную форму выбора, которую вызывать по тому же событию OnEditButtonClick

2. Вопрос: Есть ли команда снятия фильтра? Ответ: Dataset.SetFilter "" Вопрос: А еще по событию OnEditButtonClick вызывается собственная форма. Но при работе отрабатывается стандартный Pick в TTektonDBGrid. Что здесь не так? Ответ: Если стандартный не нужен, надо у колонки грида просто установить UseStandardPick=false Вопрос: А это установлено. Ответ: Там точно false? Если да, стандартный не вызовется. А там случайно не ButtonStyle=cbsAuto? Этим пользоваться вообще нельзя, должно быть cbsEllipsis всегда. Вопрос: Но там всегда у нас по умолчанию было cbsAuto. А на что это влияет? Ответ: По умолчанию всегда cbsAuto, это у DBGrid'а стандартного так. В этом случае для Lookup полей он нарисует кнопку со стрелкой вниз, по которой выпадающий список вызовется. Это не тектоновская фича, а из Delphi. В этом случае OnEditButtonClick вообще никогда не вызовется - ни мой внутренний, который StandardPick обрабатывает, ни ваш внешний. Вопрос: А примерчик на тему: есть два поля где вызываются Pick, как определить какое из них какое. Ответ: if Form.CondTektonDBGrid.SelectedField="NMSACCOUNTD" then и т.п. для всех полей Вопрос: А оно пишет, что объект не поддерживает это свойство или метод Form.ContTektonDBGrid Что можно сделать? Ответ: Form.Имя Вашего Грида.SelectedField Я просто выдрал кусок своего исходника, естественно у меня компоненты по-своему называются Вопрос: В твоем Pick название поля идет по английски. А как по русски сделать? Ответ: А в редакторе модуля данных русское имя поля прописано? Должно быть по-русски Вопрос: Есть неудобство. Можно ли его решить? Когда в редакторе процедуры набираем текст процедуры, а внизу открыто окно помощи, то при вводе знакомого слова для помощи, автоматически курсор уходит из окна текста. И если не смотреть на экран, получается набивка в пустоту. Приходится возвращать курсор на место (следить за ним). Помощь отслеживается параллельно - это здорово. Но вот курсор из текста не должен исчезать. Ответ: Скорее всего нельзя. Это из-за особенностей некоторых версий Internet Explorer'а вроде бы. Точнее не могу сказать - редактор процедур не я делал... Вопрос: Как можно закрыть от редактирования одну определенную строку в TTektonDBGrid? Ответ: Никак. На событии модуля данных "Перед редактированием записи" надо сделать Client.Terminate, тогда источник данных не даст редактировать эту запись в каком бы то ни было компоненте. А именно в гриде никак

3. Вопрос: Паскаль-процедуры теперь нормально работают (а то как то говорилось, что они глючат)? Если да, то хотелось бы пример. И еще нужны примеры по другим процедурам: JAVA и 1С. Ответ: Паскаль-процедуры не работают с var-параметрами в com-вызовах (типа Util.InParams), и это зависит не от нас (интерпретатор по низам такой), остальное вроде работает. По Java примеров вроде нет (у нас им никто не пользуется), но документация по JavaScript , насколько я знаю, должна быть в Active Script Documentation, который можно скачать. 1С использовать сильно не рекомендую, очень уж много там условностей и ограничений... Вопрос: А где искать Active Script Documentation? Ответ: Если с нашим дистрибутивом не шел файл scrdoc56en.exe, то на сайте Microsoft'а. Там вроде бы все касающееся Scripting'а можно было скачать бесплатно

Page 2:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

4. Вопрос: Если через Тектон работать с таблицами формата DBF, получается клиент-сервер? Ответ: Не очень понял, но в некотором смысле да... Вопрос: Через чего делать множественный выбор в таблице и где сохраняется результат выбора? Ответ: Множественный выбор не предусмотрен. Можно сделать специальную форму, в которой положить два грида и кнопки, по которым запись будет добавляться в список выбранных или удаляться оттуда. В качестве хранилища в этом случае можно использовать либо ClientDataSet на форме, либо фиктивный SQL запрос (они могут выступать в роли временных таблиц)

5. Вопрос: Как открыть таблицу по НУЖНОМУ индексу (примерчик)? Ответ: Надо просто в order by написать поля, по которым сортировать. Типа Module.Table1.SetOrderBy "ID", например на событии "при создании серверного модуля"

6. Вопрос: Хотелось бы получить пример запуска объекта визуализации в Тектоне (visual). Ответ: Там все простоDim VSet V=Util.VisualV.StartVisual "Сообщение", 0 'количество шагов, 0 - если заранее неизвестно 'действия (расчет и т.п.)V.StopVisual "", false 'остановка без вывода сообщения

7. Вопрос: Как подключить библиотеку DLL, которая реализует элемент activeX? Ответ: Все не так просто... В Delphi есть пункт меню Component - Import ActiveX control Он создает pas файл, его нужно включить в package Вопрос: Создали package. А в дизайнер как это включить? Ответ: Для начала в каком-нибудь unit'е package должно быть: uses UCompManager...initialization CompManager.Page:='Заголовок страницы палитры компонентов'; CompManager.hInst:= hInstance; CompManager.AddCompAndEditor(TMyControl, nil);а в самом package -requires CompManagerесли у вас нет compmanager.dcp - могу по Email'у прислать Вопрос: У нас есть библиотека для работы с кассовыми аппаратами. Может вы ее подключите к дизайнеру и нам пришлете соответствующую версию? Ответ: Это скорее в плане организационного вопроса. А если это кассовые аппараты, то почему она ActiveX control? Может это просто объект? Тогда совсем просто: в VBScript'е надо написатьSet MyObj=Client.CreateObjectByName("Lib.Obj"), типа как "Excel.Application" Вопрос: О подключении СОМ объекта: "Set MyObj=Client.CreateObjectByName("Lib.Obj"), типа как "Excel.Application" А что делать дальше с MyObj? Как это запустить? Ответ: Например MyObj.Visible=true (для Excel.application пройдет). В документации на COM объект должны быть все методы и свойства расписаны

8. Вопрос: Как в VB перевести вещественное число в формат string для использования в sql запросе. Ответ: Можно CStr(Num) А можно и просто "where f="&Num но decimalseparator (разделитель целой и дробной части) будет такой, какой настроен в Windows'е. А чтобы явно точку поставить, надо спец. процедурку писать: function C2S(Value) S=CStr(CDbl(0.1)) DS=Mid(S, 2, 1) C2S=Replace(CStr(CCur(Value)), DS, ".")end functionCCur здесь с целью обрезать до 4 знаков после запятой. Если не нужно - его можно убрать C2S=Replace(CStr(Value), DS, ".")Только надо проверить. некоторым SQL серверам нужна не точка, а текущий настроенный разделитель

Page 3:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

9. Замечание: Нужно вызывать от уже существующей формы метод Form.CreateTkForm только в этом случае форма создастся от текущего модуля данных. Иначе - создается новый. У нас сейчас другая немного парадигма интерфейса. Из одного списка можно открыть каждый документ в своем собственном окне. UDE позволяет это сделать довольно легко. Вопрос: Как это делать.? Ответ: Вот пример кода: Dim F IDSECT=Module.FORMSECTIONS.FieldByName("IDSECTION") if IsNull(IDSECT) then Exit Sub Set F=Util.GetDBForm("NPTKI5CF03SO3HFLSNDLOJSJTA", "FormSectFrm_"&IDSECT, _ "DMFormSect_"&IDSECT, "IDSECTION='"&IDSECT&"'") F.Show'-----------------------------------------Здесь GetDBForm вызывается таким образом, чтобы вызываемая форма (и ее модуль) имела в своем имени уникальный идентификатор записи. Таким образом, если в системе открыт документ с этим идентификатором, то просто фокус передастся в него, иначе - будет создана новая форма

10. Вопрос: Как можно запретить изменение размера окна? Ответ: У формы есть свойство Constraints, в котором есть MinWidth, MaxWidth/ MinHeight, MaxHeightА если совсем запретить, то BorderStyle=bsSingle

11. Вопрос: Как можно при создании новой (dbnavigator) записи вызвать новую форму ввода записи? У нас вызывается, но позиционируется на старой записи, а новая запись остается в старой форме. Ответ: На AfterInsert или BeforeInsert надо создавать новую форму от уже существующей, которую можно найти с помощью Client.FormByName то есть что-то типа:if IsObject(Client.FormByName("MySuperForm_1")) then Client.FormByName("MySuperForm_1").CreateTkForm("FormForNewRecord")end ifНо тогда новая форма будет по навигации синхронизирована со старой. А если новая форма должна открываться только для новой записи - это хуже. Я даже сразу придумать не могу.

12. Вопрос: Есть ли возможность, не имея дизайнера, создавать отчеты с помощью внешнего генератора отчетов? И еще, как в форме на экране получать суммы с запятыми, даже если они целого формата? Ответ: В редакторе таблиц можно каждому полю задавать формат. Только после этого нужно модуль данных обновить. А насчет отчетов - не совсем понял вопрос. Формат задается примерно в таком виде:#0.00|#,0.00если у вас целые числа, то будет так:#0|#,0 Вопрос: По поводу отчетов - если клиент не покупает дизайнер, то у него нет возможности отчеты самому писать? Ответ: Нет. Если только на каком-нибудь Crystal, но для этого структуру базы надо знать. Или если вы сами предусмотрите какой-нибудь механизм формирования (например в Excel по каким-либо параметрам). Вопрос: Т.е. цепляться к базе из Excel и там отчеты делать при помощи макросов? Ответ: Да нет, как у меня было сделано - в каждом отчете указывается имя файла и список, где описывается, какие значения в какие ячейки выводить. Или можно шаблон в OleContainer'е хранить

13. Вопрос: Можно ли из процедуры влиять на кнопки в dbnavigator? Ответ: Оказывается, можно. В таком виде:form.dbnavigator.visiblebuttons="nbFirst,nbPrior,nbNext,nbLast"допустимые кнопкиnbFirst,nbPrior,nbNext,nbLast,nbInsert,nbDelete,nbEdit,nbPost,nbCancel,nbRefresh

14. Замечание: По поводу закладок. В событии OnChange у PageControl надо сделать: Form.PageControl1.ActivePage=0В этом случае при попытке перейти на любую закладку он всегда останется на первой. А можно скрыть недоступную закладку:

Page 4:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Form.PageControl1.Page(1).TabVisible=false

15. Вопрос: По кнопке в интерфейсе запускается процедура обработки. Вводится еще одна кнопка с такой же процедурой (например). Можно ли, не переписывая эту процедуру, сослаться на нее в первой кнопке (иметь один текст на две кнопки)? Ответ: Нет. Если только отдельно сделать процедуру и вызывать ее через CallProc или подключать через '#UsesUnit Вопрос: А как через '#UsesUnit? Ответ: В начале события пишется '#UsesUnit "ID процедуры", "Caption" а в той процедуре Sub main что-то End sub Там можно использовать Form и Module

16. Вопрос: Как можно подключиться к старому (DOS) Foxpro 2.6? Ответ: А там вроде dbf - значит через BDE (он поддерживает dbf). Вопрос: А в UDE ссылку на что делать? На каталог? И будет ли закачка структуры базы? Ответ: Ну да. Надо указать "подключение BDE" , а в параметрах типа: PATH=d:\dir\DEFAULT DRIVER=FOXPROENABLE BCD=FALSE Вопрос: А структура таблиц из базы закачается, если нажать кнопку ПОЛУЧИТЬ ИЗ БД? Ответ: Конечно. Только если будут проблемы с русским, в BDE Administrator'е надо будет кодировку поменять. Вопрос: На выражение типа VAL("0001") дизайнер ругается, что неверный тип. Почему? Ответ: А куда вы это выражение пишете ? Вопрос: Пытаемся получить как client.showmsg. Ответ: В VBScript'е ? А там никакого Val нету. Вопрос: А что можно сделать, чтобы перевести string в число? Ответ: CInt (в целое) или CDbl (в вещественное).

17. Вопрос: Как восстановить старый репозиторий, чтоб он работал в новой версии? Ответ: Достаточно на него натравить Rupgrade. Только сначала, естественно, резервную копию сделать надо Вопрос: Дело в том, что в старой версии объекты содержат слово ТЕКТОН, в новой версии - UDE. Как быстренько переименвать? Ответ: Где именно слово ТЕКТОН? Типа TTektonUDEDBGrid? Вопрос: Да. Ответ: Надо в дизайнере форм (он на пустой форме откроется) установить пакеты DBCompat.bpl и ChartCompat.bpl. все будет работать

18. Вопрос: В таблице заполнение полей по умолчанию - с цифровыми полями все ясно, а символьные как по умолчанию писать? Если с кавычками, то в поле и пишется с кавычками, если без кавычек, то потом ругается. Ответ: Без кавычек, но если ругается, значит есть недопустимые символы (точки, плюсы и т.п.) - такие значения надо устанавливать на OnNewRecord. Вопрос: Пробел - это недопустимый символ? Ответ: Да. Если его убрать, перестает ругаться.

19. Вопрос: Почему, если в дизайнере форм менять цвет поля и шрифта (символьное поле), то изменения видны при enable=false? А если делать то же самое у вещественного поля, то цвет поля меняется, а цвет шрифта - нет (ставится какой-то по умолчанию)? Ответ: Не знаю, я только что попробовал сделать два UDEDBEdit'а на строковое и вещественное поля - оба нормально получились желтым текстом на синем фоне. Хотя если enable=false, то у обоих полей цвет получается серым. Это вроде бы от Windows'а зависит и не перекрывается. Вопрос: А перекрыть ПИРСом никак нельзя Гейтса? Ответ: Может и можно, но трудоемко и результат не стоит потраченных усилий. Проще вместо Enabled использовать ReadOnly или вообще прятать Edit и показывать DBText.

20. Вопрос: На каких операционных системах лучше работать клиенту?

Page 5:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Ответ: Для дизайнера и клиента требования одни и те же, единственное отличие - дизайнеру чуть больше памяти хорошо бы дать и чуть быстрее процессор. У меня на 98 работало без проблем (мы некоторое время на Win98/Celeron 400/64 RAM разрабатывали), но если сама 98 чуть кривеет - работать уже тяжело.

По инсталляции ORACLE

21. Вопрос: Инсталлятор ORACLE по умолчанию предлагает создать новую базу. Отказаться? Или создавать? Ответ: Насколько я помню, ее обязательно надо создать. Это не база, это скорее instance сервера. Вопрос: Тогда там нужно задавать параметры Global Database Name и SID. Какие нужно задавать? Можно произвольные? Ответ: Какой-то один. Там должно быть написано, что один из них (кажется SID) используется для совместимости с клиентами 7 версии или вроде того. Он не нужен. А второй надо установить равным имени компьютера, но это не обязательно. Да, можно любое имя. оно потом при подключении будет использоваться. Вопрос: Системные пароли, установленные по умолчанию, после инсталляции обязательно менять? Даже если это версия для целей демонстрации? Ответ: Как больше нравится. Я на своем сервере (который серьезно не использую, иногда для тестов) оставляю - как есть. Вопрос: А какого клиента для протокола TCP выбирать? По умолчанию там Net8Client Ответ: А какие еще есть ? Я такого не помню... Вопрос: Есть еще IIOP Client и Net8 Client+IIOP Client. Ответ: Понял, IIOP - это вроде старые версии, а нужно Net8. Вопрос: Пытаюсь войти в SQLPlus выдается диагностика ORACLE not available и снова окно ввода имени и пароля. Из-за чего? Не запущены какие-то службы ORACLE? Смотрю в службах. У нас сервис OracleServiceTELECOM почему - то находится в состоянии ЗАПУСК и кнопки СТАРТ и СТОП не активированы. Что-то не так при инсталляции было? Ответ: Windows какой ? Вопрос: XP Professional. Ответ: Надо убить процесс oradim.exe и перезапустить сервис. Вопрос: И так нужно делать при каждой загрузке компа? Ответ: Если это помогло, то да. Это особенность "дружбы" ORACLE и XP. Вопрос: OracleServiceTELECOM заработал, но войти в SQLPlus все равно не могу. Та же ошибка. А вообще какие службы ORACLE должны обязательно работать? Ответ: Еще что-то типа OracleOraHome81TNSListener. Вопрос: Это работает. Ответ: В принципе двух этих служб достаточно. А если в SQL Plus в параметр "строка соединения" написать то, что при инсталляции писали в Global database name? Вопрос: Если я не помню, что там писал, посмотреть это как-то можно? Ответ: Можно. Net 8 Easy config, там выбрать "изменить" и далее. Вопрос: Запустил это. Дошел до проверки. При проверке выдалось, что, либо ошибка во введенном имени, либо сервер не готов к соединению. А почему она взяла при проверке имя пользователя scott и пароль tiger? Ответ: По умолчанию такой пользователь для какой-то демо базы создается. Поменяй на system. Вопрос: Не помогло. Ответ: Значит перезапусти сервис который OracleService... Вопрос: Попытка перезапуска этого сервиса приводит к тому, что сервис повисает на этапе запуска и начинает работать, если удалить процесс oradm.exe Что-то как то все криво поставилось. Ответ: Это под XP тот самый процесс oradim с чем-то конфликтует, поэтому все делается только через его убивание Вопрос: Нужно 2000 professional ставить? Ответ: Хорошо бы. Но у нас и под XP работало с убиванием этого процесса при старте сервиса. Вопрос: Попытка установки проекта под ORACLE приводит к диагностике НЕВОЗМОЖНО ПОДКЛЮЧИТЬСЯ К СЕРВЕРУ. Ответ: А сервис-то нормально работает? Скорее всего - нет. Если ничего не получится, ставьте ORACLE на машину с 2000. Вопрос: В службах пишет, что работает. А уж нормально или нет - как это узнать? Ответ: SQL plus может соединиться? Вопрос: Нет, пишет что ORACLE not available. В наборе имени SYSTEM соблюдать регистр? Ответ: Вроде нет, но я всегда вводил маленькими буквами.

Page 6:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Вопрос: Установив ORACLE ENTERPRISE нужно ли потом на эту же машину ставить ORACLE CLIENT? Ответ: Enterprise - это сервер? Тогда отдельный клиент не то что не нужен, его просто нельзя ставить. Клиента нужно ставить только на рабочие станции потом. Вопрос: А что такое конфигурирование LISTENER? Ответ: Лучше не трогать, пусть по умолчанию будет. Вопрос: Инсталлятор спрашивает о выборе метода для создания базы. И предлагает варианты- Copy exicting database files from CD (по умолчанию)- Create new database filesЧто выбрать? Ответ: По умолчанию. Вообще почти все можно оставлять по умолчанию.

22. Замечание: Для interbase, если он нужен через BDE, надо будет ключ в реестр добавитьHKEY_LOCAL_MACHINE\SOFTWARE\Borland\DatabaseEngine\Settings\DRIVERS\INTRBASE\DBOPEN\ROLE NAME - строковый с пустым значением

По инсталляции ГАЛЕОН

23. Вопрос: Попытка установить ГАЛЕОН так же, как и СТАТОТЧЕТНОСТЬ, не удалась. Почему то установилось два профиля UDE_IMS и UDE_UMS1. При попытке войти в дизайнер выдается сообщение ТАБЛИЦА ИЛИ ПРЕДСТАВЛЕНИЕ ПОЛЬЗОВАТЕЛЯ НЕ СУЩЕСТВУЮТ. Наверное, неправильно проект восстановили. Можно попросить более подробную инструкцию по восстановлению проекта? А то, в отличие от статистики, здесь присутствуют некоторые файлы с которыми мы неизвестно что делать. Это файлы UDE_IMS_KSU.CFG UDE_IMS_KSU.TPR UDE_IMS.DBC Ответ: cfg и dbc - нужно в Aliases положить, а tpr - в profiles. А потом надо запустить сервер и перенастроить оба псевдонима на ваш сервер. А базу OracleInstall'ом делали ? Вопрос: Да, делали. Все как в статистике. Только батовские файлы переделали, естественно. Ответ: Астатистика нормально ставилась? Вопрос: Да, нормально. Ответ: Возможно дело в том, что backup от 9 oracle не совсем корректно на 8 разворачивается... А если запустить дизайнер, и при нажатии кнопки ОК в диалоге подключения держать Shift, а потом на появившийся вопрос ответить "нет", подключится? Вопрос: Не выдается никакого диалога, все равно выскакивает сообщение ТАБЛИЦА ИЛИ ПРЕДСТАВЛЕНИЕ ПОЛЬЗОВАТЕЛЯ НЕ СУЩЕСТВУЮТ. Может попробовать удалить проект и заново его пересоздать? Как нужно удалять проект? Ответ: Должен был выдаться вопрос "выполнить процедуру инициализации" или что-то вроде того. При подключении (когда имя с паролем вводите) нажми shift и держите, пока вопрос не выскочит. Ответить - нет. Просто так можно будет понять, проблема с проектом или уже с базой прикладной. Удаление проекта:drop user username cascade;в SQL Plusпотом drop tablespace usernameпотом удалить файлы из куда ставился oracle\ORADATA\имя базы при установке\ там вроде должен быть файл с именем username Вопрос: А при подключении какую роль указывать? Ответ: В ORACLE роль указывать не надо, он сам их подключает. Вопрос: username - это ude_ims? Ответ: Да. Вопрос: А еще создался ude_ims_ksu. Так и должно быть? Ответ: Вроде нет. Если в OraInst указывался ude_ims, он один и должен создаться. Вопрос: При попытке войти в SQLPlus сообщение - maximum of 20 enabled roles exceeded. И не пускает. Ответ: Вот это уже совсем непонятно, ни разу такого не видел. Предлагаю переустановить сервер... А под каким именем он такое выдает ? Вопрос: Под SYS. Ответ: А под system пускает ? Вопрос: Да, под SYSTEM пустил. Может из-за того, что ГАЛЕОН пытались под SYS загружать? Ответ: Вряд ли. А попробуй под system (если не получится то под internal) сделатьrevoke udeadm from system;и

Page 7:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

revoke udeuser from system; Вопрос: Пишет, что "ROLE UDEADM не разрешена для SYSTEM" и "ROLE UDEUSER не разрешена для SYSTEM". Ответ: Тогда не знаю, каких там ролей у него слишком много... Вопрос: А как то там список ролей посмотреть можно? Ответ: Не знаю, вроде нет. Вопрос: Не помогла перезагрузка компьютера, под SYS не пускает, та же диагностика с ролями. Ответ: А вы sys'у вручную никаких ролей не давали? Вопрос: Я даже не знаю, как это делается. Ответ: Так, я в одном месте ошибся.revoke udeuser from sys;иrevoke udeadm from sys;не помогут ? Вопрос: Написал что привилегии изъяты и теперь пускает под sys. Интересно, когда и где эти роли прописались? Ответ: Не знаю. Но не должны были - они ему не нужны. Теперь надо убить всех юзеров ude_ims и т.п. А потом можно, на всякий случай, сделать (после удаления всех ПИРСовских проектов)drop role UDEADM;иdrop role UDEUSER; Вопрос: В oracle\ORADATA\TELECOM нет файлов типа UDE_IMS. Ответ: Надо все-таки найти эти файлы где-нибудь в каталоге ORACLE, может ORA81\database, а то иначе orainst не сможет создать tablespace. Вопрос: Нашел. В каталоге Ora81\Database файл ude_ims.ora Он самый? Ответ: Да. его надо убить. Потом в orainst создать проект ude_ims. Вопрос: Итак, все снова по установке ГАЛЕОНа. Сначала делаем новый проект в ORAInst.exe. Потом нужно выполнить sqlplus.exe /nolog @drop.sql с тем файлом, что в статистике, поменяв там, соответственно, username и пароль? Ответ: А что это за файл ??? Вопрос: Там написаноwhenever oserror exit failurewhenever sqlerror exit failureconnect STAT_REP/admindrop procedure ADD_NEW_OBJECT;drop procedure DEL_OBJ_PERMISSIONS;drop table DUMMY;drop table TXM$DEFAULTS;drop table TXM$DOMAINS;drop table TXM$FIELDS;drop table TXM$INDEXES;drop table TXM$INDEXFIELDS;drop table TXM$OBJECTS;drop table TXM$OBJPARAMS;drop table TXM$OBJTYPES;drop table TXM$REFERENCES;drop table TXM$REFFIELDS;drop table TXM$SQLPATTERNS;drop table TXM$SUPERTYPES;drop table TXM$TXPROCCOMMAND;drop table TXM$USERPROFILE;drop table TXM$USERS;drop table TXM$USERTOOBJ;drop table TXM$USERTOTYPE;drop table TXM$USRTOGRP;drop table TXM$VERSIONINFO;exit success

Page 8:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Ответ: Интересно... Выполни, хуже не будет. Похоже, что без него действительно не будет работать. Вопрос: В этом SQLе я поменял только строкуconnect, поставив туда UDE_IMS/jcyjdyjq Ответ: Да, естественно. Вопросик - откуда такой пароль ? Вопрос: Прислали вместе с репозиторием ГАЛЕОНа. Ответ: Это неправильно. Пароль придумывайте сами. Я обычно пароль 111111 ставлю. Вопрос: Теперь делаем импорт командойimp UDE_INS/jcyjdyjq file=ims_20040802.dmp fromuser=(ude_ims) touser=UDE_IMS Ответ: Да. Вопрос: А пароль как поменять? Ответ: alter user ude_ims identified by "111111"; Вопрос: После создания проекта UDE_IMS SQLPlus опять по SYS не дает войти!!! Пишет про роли опять! Снова нужно эти роля для него уничтожить? Ответ: Да. Вопрос: Пошла загрузка. Но выдается куча диагностики иероглифами. Не понять, чего она пишет. Никак нельзя посмотреть где-нибудь лог загрузки? Ответ: Вроде нет. Но это не страшно, ошибки идут со словами GRANT FLASHBACK и GRANT DEBUG и кодом 990? Вопрос: ORACLE чего-то там 942. Ответ: Это в конце. Не страшно Вопрос: Попытка загрузки дизайнера выдает ошибку: TNS невозможно разрешить имя службы. Ответ: Возможно надо перенастроить псевдонимы подключения на сервере. В сервере есть меню настройка – подключения или в aliases два файла есть cfg и dbc. Вопрос: Во вкладке "Список подключений к БД" образовались два лишних подключения UDE_IMS1 UDE_IMS2. Их модно удалить? Ответ: Да. И в подключениях к проекту скорее всего они же - тоже удали. И в Profiles должны быть два файла tpr таких же. OraInst при каждом создании проекта их делает. А в подключении к БД USER NAME должен быть пустым и пароль тоже. Вопрос: Все удалил ненужное. Дизайнер запустился. Что в нем нужно настроить? Ответ: Он нормально запустился, без всяких сообщений об ошибках? Значит больше настраивать нечего, можно смотреть все подряд.

24. Вопрос: Прислали бэкап IMS. В двух словах - как его поставить на установленную версию. Ответ: drop user ude_ims cascade, а дальше как на пустой сервер. Вопрос: А файл ude_ims.ora надо убивать? Ответ: Нет. И drop tablespace тоже не надо - orainst должен уметь существующий использовать. Вопрос: После drop user ude_ims cascade нужно через orainst проект заново создать? Ответ: Конечно! Все - как на новый сервер. Только tablespace не надо создавать. Вопрос: Ничего нет в проекте! Ответ: После импорта? Очень может быть, что перед импортом drop.sql не выполнили. В этом случае drop user... И все сначала. Вопрос: Попытался войти в авансовые отчеты и получил диагностику "Объект не поддерживает это свойство или метод...."ПОДРОБНО Form.DetUDEDBGrid.columnByField(...)ReadOnly Ответ: Значит старая версия UDE.

Общие вопросы разработки в UDE .

25. Вопрос: Можно ли определить, какая кнопка нажата в навигаторе? Ответ: А зачем? Обрабатывайте соответствующие события в модуле данных у DataSet'а. Многие пользователи будут больше пользоваться клавиатурой, чем навигатором. Вопрос: А к какому событию можно отнести переход с одной записи на другую (это чтобы экранная форма показывала нужные элементы в зависимости от данных)? Ответ: А вот это в форме на DataSource событие OnDataChange, если просто переход или операция которая затрагивает всю запись в целом - надо еще проверить условие not Module.ModifField.Changed.

Page 9:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

26. Вопрос: Как завести нового пользователя репозитория? Последовательность действий. Репозиторий в interbase. Ответ: Сначала средствами interbase создать пользователя, потом назначить ему роли UDEADM (если нужно) и UDEUSER, а потом уже создать в списке пользователей проекта (через пункт локального меню Права доступа). Вопрос: А как роли назначить? Т.е. где в interbase роли назначают? Ответ: Вот чего не знаю, того не знаю. Может быть как в oracle - grant role to user? И вроде бы был там еще какой-то момент, что в профиле подключения надо явно указать роль, иначе он ее не подхватит. Просто я к interbase кроме как под sysdba никогда не подключался. Вопрос: Как подключать и чем создавать HELP к созданному приложению? Ответ: В дизайнере есть закладка Описание. Это RTF 2.0 - туда можно Copy-Paste из Word'а. Там же есть кнопочка для создания ссылок. Имеет смысл для форм (при нажатии F1 из формы), процедур (которые в меню входят, если меню не по профилю, необязательно или краткое пояснение) и объекта "информация о проекте" (это глобальная тема справки, когда текущей формы нет). Если вдруг нужно будет из какой-нибудь справки ссылки на абстрактные темы, то можно создавать пустые узлы и в их описании описывать эти темы

27. Вопрос: Почему при установке фильтра через команду SetFilter выражение фильтра вида "Поле like...and это же поле not like...." дает ошибку "Выражение фильтра некорректно завершено"? Этот же фильтр в SQL interbase проходит Ответ: Фильтр вроде бы перед передачей серверу еще дополнительно проверяется . Поэтому надо писать не поле not like, а not поле like... Это даже более стандартно

28. Вопрос: Как, кто и где (в каких местах) в ПИРСЕ управляет транзакциями. Ответ: Server.BeginTransServer.RollbackTransServer.CommitTransкроме того, вставка, изменение и удаление записи выполняются в транзакции со всеми своими триггерами. Вопрос: Это чьи сервера? UDE? Ответ: UDE Server. Он из процедур доступен как Server. Вопрос: Не понял, а было сказано - цитирую:"С транзакциями все нормально и отрабатывает их именно СУБД, а не наш сервер. Это же внутреннее свойство нормальных SQL серверов и это работает автоматом, тем более что мы используем сервера не как просто хранилища данных (хотя бы индексы - даже этого сверхкрыши, и уникальность и откаты и т.д.). Причем если связаны два разных сервера, то в каждом из них будет сделан откат, если он это умеет." Ответ: Все правильно. Транзакции обрабатываются SQL-серверами. Но инициировать-то этот процесс надо - для этого в сервере и сделаны эти процедуры. Вопрос: А как транзакции инициируются? (примерчик бы) Ответ: Я же три процедуры написал. Там все понятно - начать, откатить и завершить. А вот пример с обработкой ошибок на VB:Server.BeginTranson error resume nextDoSomethingif Err.Number<>0 then ED=Err.Description on error goto 0 Server.RollbackTrans Client.Terminate EDend ifServer.CommitTranson error goto 0

Обновление проекта.

29. Вопрос: Как вы делаете обновление ГАЛЕОНа? Ведь пользователи могут туда свое понаписать. Как идет обновление, чтобы и ихнее сохранилось и ваше обновилось? Какие ваши рекомендации при разработке своих примочек к вашему проекту?

Page 10:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Ответ: Через инсталлятор будет обновляться проект и запускать синхронизацию таблиц. Сейчас это ручками. То же самое что уже делалось, когда вы у себя устанавливали. Вопрос: На эту тему нужны более подробные инструкции. Ответ: А я идешник серверный зря давал что ли. У пользователей будет свой. Вот по нему мы и разрулим. Главное чтобы наше не трогали. Здесь все просто. Если хотите поддержки, то не трогаете базовый комплект, все равно нашим заменится. А остальное - без ограничений; отчеты, формы, процедуры, даже таблицы. Вопрос: Да это понятно. Если пользователи интерфейс захотят поправить, скажем, к интерфейсу счета (план счетов) добавить вкладку еще одного уровня аналитики, как будет обновление идти в этом случае? Или добавить поле в вашей таблице, например office. Ответ: Так не делают и ничего не поможет. Продублируйте и делайте доработки и запускайте свой интерфейс. В профиле указал и все, он остается всегда пользовательский. Нельзя трогать базовый! Здесь нет лекарства, или вы на поддержке или сами крутитесь.

30. Вопрос: Вопрос по обновлению проекта. Вашего!!!! На ORACLE. Например, в существующей таблице мы добавили поле. И в существующем модуле данных сделали обновление полей таблицы. Форму пишем свою от этого модуля данных. Вы присылаете обновление. Мы его поставили.1. Что при этом получится с таблицей и нашим полем, если вы тоже правили эту таблицу?2. Что произойдет с модулем данных? Ответ: Мы об этом уже говорили. Если хотят полной поддержки, то нашего трогать нельзя и тут ничего не сделаешь. Пусть пользователи делают свои таблицы и свои модули данных даже на наши таблицы. То, о чем ты спрашиваешь, можно делать только централизованно. Иначе с поддержки надо снимать. То, что было нашим, нашим и останется. Вопрос: Причем тут поддержка? Это вопрос вообще. Что будет, если это сделать? Ответ: Ты создал таблицу, передал другому, он там изменил поля, ты сделал доработку и отдаешь опять таблицу. Или сломается таблица напрочь, или останется твое. А модули данных точно поедут и тут ничего не сделаешь. Так что до какого то момента в наше пользователям лучше не лезть, а только использовать. Вопрос: Вообще это не есть хорошо. Поскольку поля в таблицах могут только добавляться, инсталлятор при обновлении должен работать так, чтобы не таблицы не ломались. С модулем данных в принципе все равно, а вот таблицы должны быть рабочими!!!!А можно поконкретней с таблицей? Какие там будут поля? Старые ваши, плюс наши, плюс ваши новые? Ответ: Я так понимаю да... А модуль наш закачается. Но!!! Если вы меняли триггеры или индексы - я так понимаю, что оно все умрет и заменится на наше. А вообще мы еще толком upgrade не продумывали :) Вопрос: Т.е. будут все поля в самой базе данных ORACLE (физически)? А в проекте в типе таблицы какие будут поля? Старые ваши, плюс наши, плюс ваши новые? Ответ: В проекте он синхронизирует и будут все поля - и наши, и ваши. Лучше все-таки в наши таблицы поля через нас добавлять Вопрос: Почему нельзя таблицы делать общими? Накапливать поля при апгрейде? Это же позволит им делать собственные доработки/разработки на общей базе. Ведь народ конструктор берет. Ответ: Потому что непонятно как это делать. А поля и так будут, но не со всеми свойствами. А хотят писать - пусть пишут от существующей версии. По-хорошему, вообще использование дизайнера должно без поддержки продаваться, так как никто не мешает похерить наши процедуры, а потом сказать " у вас ничего не работает". Вопрос: Ну ладно. Почему нельзя сделать полную копию (аналог) модуля (формы), от которой потом делать свое? Руками перебивать - долгое занятие. Ответ: Хотя бы потому, что там могут быть разные источники данных и имена форм должны отличаться.

Общие вопросы разработки в UDE .

31. Вопрос: Когда для формы установлено свойство позиция poDesigned, то при разных разрешениях экрана позиция будет разной? А как сохранить ее для разных разрешений? Ответ: При poDesigned расположение формы (в пикселях) всегда будет таким, каким было в дизайнере форм. Разрешение не влияет. Хотя конечно при 1280x1024 форма будет казаться ближе к углу и меньше размером, чем при 800x600 - пиксели-то разного размера. Но тут уже никак. Вопрос: А можно как то влиять на расположение окна? Ответ: Программно? Можно попробовать Form.Left, Form.Top. А почему бы не поставить poDefaultPosOnly и пусть Windows сам определяет, где показать новое окно. Мы везде так делаем.

Page 11:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Вопрос: При poDefaultPosOnly окно начинает уползать вниз при открытии каждой формы и при использовании разрешения 600х800 быстро уходит за нижний край экрана. Ответ: Это глюк операционки. Вообще-то как только окно внизу открылось, следующее опять сверху слева откроется... А еще, если понравится, можете poScreenCenter поставить. Окошечко всегда будет аккуратно в центре экрана. Правда, мы это для модальных форм используем, и то не для всех...

32. Вопрос: Несколько вопросов.1. Если к двум UDEDBGRIDам выбрать одно PopupMenu, то почему стандартное меню (это где сортировки, фильтры и т.п.) удваивается? Если к трем UDEDBGRID - утраивается и т.д.2. Если использовать процедуру АВТОЗАГРУЗКА, то почему она также начинает выполняться и при загрузке Дизайнера (а не только клиента)? Выполнение процедуры Автозагрузки при загруке Дизайнера на стадии разработки очень неудобно. Как выполнять процедуру Автозагрузки только при запуске Клиента?3. Можно ли закрыть Клиента из процедуры внутри Клиента? Если да, то как? Ответ: Как все сложно...1) С этим бороться никак. Дублируйте меню для каждого грида.2) Если в диалоге подключения (в дизайнере) при нажатии Ok держать Shift, то система спросит, выполнить ей автозагрузку или нет. А вообще это имеет смысл только в процессе разработки самой процедуры автозагрузки...3) По-хорошему, этого делать не стоит. Документированных функций нет. В принципе, можно вызвать Client.CloseUDE, но это будет не совсем закрытие, а просто эмуляция принудительного отключения клиента с сервера (с соответствующим сообщением).

33. Вопрос: Как в UDEDBGrid процедуру привязать к клавише ENTER? Ответ: Событие OnKeyDown, код клавиши 13.

34. Вопрос: Почему если форма создается командой Util.GetDBForm(), то часто бывает если ее открывать сразу еще раз после закрытия, по появляется сообщение: "Компонент с именем ... уже существует"? Ответ: Возможно, от ее модуля есть еще одна форма и поэтому модуль остается в памяти. А GetDBForm пытается создать еще модуль с таким же именем. Вопрос: А почему после этого сообщения если еще раз запустить ее, она запускается? Ответ: Вот этого не знаю... Возможно происходит ошибка и модуль выгружается или у него имя сбрасывается.

35. Вопрос: Возможно ли при разработке в инструменте создавать шаблоны часто употребляемых форм, а потом в нужных местах проекта их использовать? Ответ: Нет, такой возможности не предусмотрено. Но в дизайнере форм можно выделить компоненты и в буфер скопировать, а потом вставить. А еще можно одну большую форму сделать и использовать ее для похожих целей, например, в зависимости от условия класть на нее другие формы... Вопрос: Жаль. А было бы удобно! Ответ: Технически в настоящее время нереализуемо... Хотя хитрыми способами можно копировать форму целиком, но при этом надо следить, чтобы ничего не съехало... Вопрос: А можно попросить кратенько ваш опыт изложить по этому вопросу? А то мы уже теряли при копировании связи в копируемой форме. Ответ: А как вы копировали ? У вас же нет такой возможности. Вопрос: Открывали копируемую форму и новую. В новой рисовали по образцу старой. Но, увы, при сохранении в старой форме раз и все потерялось. Впрочем, и копированием это назвать нельзя. Ответ: А, понял. Была проблема при открытии двух форм в одном дизайнере. Теперь на каждую форму вызывается свой экземпляр дизайнера, так что таких проблем больше не будет. Вопрос: Было сказано, что, цитирую: "А еще можно одну большую форму сделать и использовать ее для похожих целей, например, в зависимости от условия класть на нее другие формы..." Как это? Еще цитата: "Хотя хитрыми способами можно копировать форму целиком, но при этом надо следить, чтобы ничего не съехало..." Что за хитрые способы? И третье. В проекте есть форма. Хочется скопировать ее (полный аналог) и в скопировавном варианте изменить эту форму. Как это сделать? Ответ: Хитрые способы мы за пределы нас не распространяем - это почти редактирование БД проекта напрямую...А про создание форм - вот пример:событие OnCreate

Page 12:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Set F=Form.CreateForm(DocFID, "Ôîðìà äîêóìåíòà") F.SetParent Form.DocTabSheet.Ptr F.Show Set Form.UDEVar.Value("F_DOC")=Fсобытие onclose if IsObject(Form.UDEVar.Value("F_DOC")) then Form.UDEVar.Value("F_DOC").Close Form.UDEVar.Value("F_DOC")=0 end if Вопрос: Еще вопрос. Есть ли ограничения по использованию в своей компоненте, которую можно подключить к дизайнеру форм, на использование стандартных компонентов Delphi? Как создается своя компонента для подключения к дизайнеру форм (особенности)? Ответ: Ограничений и особенностей вроде бы нет, пока дело не доходит до собственных property editors и component editors. И регистрация своя. Другие компоненты использовать можно. Но, как я понимаю, все внешние компоненты должны быть только на Delphi 5 Вопрос: Можно написать компоненту со своими Query, DataSet, доступом к interbase и т.п.? Ответ: НЕТ!!! Весь уровень доступа к БД реализован в модулях данных. Компонента должна иметь свойство DataSource, может еще DataField, если на одно поле смотрит. Единственное возможное допущение - можно рассчитывать на то, что DataSource смотрит на ClientDataSet

Общие вопросы по работе в сети.

36. Вопрос: Работа в сети. На одной машине стоит ORACLE, сервер UDE, клиент. Как с другой рабочей станции подцепиться к серверу UDE и проект запустить? На ней надо проинсталлировать клиента, а потом? Ответ: Надо запустить DComPerm (он должен ставиться в UDE\bin) и настроить клиента по умолчанию. А на сервере им же настроить сервер по умолчанию. А потом при подключении выбрать серверную машину и псевдоним и все! Только есть ограничение - на машине, которая сервер, должен быть залогинен пользователь, иначе работать не будет. Вопрос: Как DcomPerm настраивать и как с другой машины цепляться. Ответ: На сервере закладка сервер, а на рабочей станции клиент. Нажимаешь там кнопочку и все. Ну надо еще, что бы сервис DCOM был включен. Вопрос: Две кнопочки - это понятно и так. Где взять и как и на каких машинах сервис DCOM устанавливать? Ответ: Он входит в винды, если только не 95. Вопрос: А на сервере что нужно разрешить для клиента, чтоб клиент запускал приложение? При подключении с рабочей станции:- на сервере что нужно разрешить для клиента, чтоб клиент запускал приложение?- и псевдоним при подключении откуда должен браться? с сервера? или он на локале должен быть?Вводим сервер при подключении, а список псевдонимов подключений - пустой! Сервер UDE стартует, но нет псевдонима и пишет, что отказано в доступе. Ответ: DComPerm На машине клиента нажимайте кнопочку "настроить клиента". На машине сервера - "настроить сервер". Там все слишком сложно и долго объяснять, да и половину я не помню, а эта утилита все сама умеет. После этого псевдонимы с сервера должны взяться после указания имени компьютера. Вопрос: Просто имя компьютера? Сервер поднимается, а псевдонимов нет. И без них нет подключения. Ответ: А клиент и сервер в одном домене находятся? Вопрос: Да. Ответ: После DComPerm вообще-то должно все работать. Можете попробовать запустить (на обоих компьютерах) DComCnfg (это утилита Windows) и посмотреть, чтобы стояла галочка "разрешить использование DCom на этом компьютере", уровень проверки подлинности по умолчанию - "по умолчанию", уровень олицетворения по умолчанию - "Олицетворить". Это для 2000, для ХР подобные настройки есть, только искать надо, где они.

Доступ к таблицам FoxPro .

37. Вопрос: Что-то у нас не получается открыть таблицу FoxPro. Ответ: А в чем проблема? В FoxPro вроде dbf используется.

Page 13:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Вопрос: Дело не в настройках BDE, потому что этот проект на одной машине под 98 работает. На другой машине под 98 ругается что не находит таблицу при попытке закачать структуру. В чем может быть проблема? Как можно запустить этот проект не переустанавливая винды? Ответ: Проверить путь в объекте "источник данных". Проверить, стоит ли явно .dbf в объекте "таблица". Если нет, проверить, какой тип файла стоит в BDE по умолчанию. Вопрос:.dbf в объекте "таблица" не стоит. А как проверить, какой тип файла стоит в BDE по умолчанию? Ответ: В параметрах объекта "источник данных" DEFAULT DRIVER. Вопрос:.Стоит FoxPro. Ответ: А остальное? Путь правильный, файл такой там есть? Через SQL Explorer эта таблица видна? Вопрос:.А как это увидеть таблицу через SQL Explorer? И где взять SQL Explorer? Ответ: SQL Explorer идет в комплекте с Delphi. Или может быть у вас есть BDETOOLS.EXE от АККОРДа. В BDE Administrator'е настраиваете в закладке Databases подключение, как в UDE с теми же параметрами. Когда создадите Alias в bde administrator'е - попробуйте к нему подключиться из BDETOOLS. Вопрос:.А потом что делать? Если не подключимся? Ответ: Если не подключитесь - значит что-то не так в настройках BDE, будем смотреть дальше. Если подключитесь, надо чтобы в списке таблиц появилась ваша таблица и она открывалась в BDETOOLS. Вопрос:.Если таблица откроется, то значит это проблемы настройки UDE? Ответ: Да. Конкретно - настройка источника данных и (если используется) псевдонима подключения на сервере UDE.

Общие вопросы разработки в UDE .

38. Вопрос: Можно ли в фастрепорте количество колонок в отчете определять не в самой форме отчета, а программно перед запуском отчета (в зависимости от данных количество колонок варьируется и заранее неизвестно)? Ответ: Если я правильно понял, то можно через Cross header, cross body, cross footer band'ы. Если у вас есть статистика - там все это можно посмотреть.

39. Вопрос: Такая штука. Пока переустанавливали ГАЛЕОН, СТАТИСТИКА почему то оказалась пустой. Проект загружается, но там ничего нет. Пусто. Как его переустановить? Надо ли делать drop user username cascade; и drop tablespace username? Ответ: Попробуйте загрузить проект под именем пользователя с максимальными правами, например sys или system. Вопрос:.Тоже пусто. Ответ: Тогда не знаю. Попробуй сделать import без drop'а. Вопрос:.Запустил, все равно все пусто. Может ошибка в команде импорта? Команда импорта выглядит у нас такimp STAT_REP/admin file=20040422.dmp fromuser=(sysadm) touser=STAT_REP Ответ: А если попробовать сделать в SQLplusgrant UDEADM to stat_rep;иgrant UDEUSER to stat_rep; Вопрос: Сделал, все поехало.

40. Вопрос: В связи с чем может возникать ошибка "нет записей для изменения в таблице..."? Избавиться от нее можно только после перезагрузки сервера UDE Ответ: Очень может быть, что либо поле Float и слишком много цифр после запятой, либо поле char (фикс. строка), в которой значение короче чем длина поля. А вот перезапуск на это влиять в принципе не должен, SQL на Update каждый раз свой создается. Вопрос:.Эта ошибка возникает при изменении в таблице из процедуры VB операторами UDE после заполнения данной таблицы SQL запросом с группировкой. Как найти где это возникает? Ответ: А таблица заполняется через insert...select? Этого делать очень не рекомендуется! Прежде всего потому, что может нарушиться целостность данных... А в данном случае могло вещественное число с хвостом вставиться, в interbase это в каких-то случаях бывало (то есть в numeric(10,2) может вставиться например 10.23455666 - в этом случае такая ошибка неизбежна. Заполнять надо так:открыть запрос (Select)открыть таблицу (server.createtableobject)

Page 14:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

while not запрос.eof таблица.appendи т.п....

41. Вопрос: Можно ли в фастрепорт менять начертания шрифта (жирный, нежирный и т.п.) самим? Ответ: В смысле без дизайнера или как? Вопрос:.В смысле по некоторому условию из скрипта вывода. Ответ: У полей есть условное форматирование, в зависимости от условия можно изменить шрифт или цвет. Условием можно сделать, например, проверку значения переменной, а переменную устанавливать в VB. Вопрос:.А где это условное форматирование? Ответ: На тулбаре (после кнопок Ж К Ч А) кнопочка есть, у нее подсказка всплывающая "условное выделение". А вроде бы можно еще на событии в самом отчете менять, это надо документацию к Fast Report'у смотреть.

42. Вопрос: Как можно в interbase в SQL выбрать поле как объединение двух стринговых полей разной длины? Ответ: Попробуйте FIELD1||FIELD2 as FIELDNAME Вопрос: По поиску. Не устанавливается фильтр, если указано 2 символа. Один символ или более двух - фильтр устанавливается. А вот два символа - нет. Ответ: Все фильтры идут на SQL сервер, мы их не обрабатываем. Попробуйте скачать новый Firebird (только перед этим базу сохраните). А еще можно попробовать, например, через IB CONSOLE выполнить этот SQL и посмотреть, что он выдаст в результате. Вопрос: Через IB CONSOLE ругается "Arithmetic exception, numeric overflow, or string truncation. Cannot transliterate character between character sets" Ответ: Что-то с кодировками не то... Это бывает, и я не помню ,как бороться... А в SQL Explorer'е ? Вопрос: То же самое, что и в IB CONSOLE ругается. Ответ: На любой набор символов в Like? А в настройках алиаса charset стоит PDox ansi cyrillic? Вопрос: Ругается только на русский. Ответ: В BDE Alias'е надо установить LANGDRIVER в значение ancyrr. У меня через SQL Explorer работает запрос типаSelect * from PROJECTS where NMPROJECT like '%тк%'Находит запись, где в том самом поле написано 'Разработка ПО' Вопрос: Да, после настройки алиаса в SQL Explorer заработало! Ответ: Запрос выдает правильный результат? Вопрос: Правильный. Ответ: То есть тот же самый Like в ПИРСе запись не находит, а в SQL Explorer'е находит? Вопрос: Да, именно так! Ответ: А в пирсе нет ли дополнительного условия отбора или фильтра (сортировки) на клиентском наборе данных? И правильно ли в источнике данных настроен язык? Вопрос: Фильтр накладывается на SQL, где поле, которое фильтруется, является объединением двух полей. Ответ: То есть вы пытаетесь сделать что-то типа FiELD1||FIELD2 like '%..%'? Вопрос: Создан SQL, а потом он в интерфейсной форме фильтруется. Ответ: Можно строчку или кусок процедуры, где фильтр накладывается ? Вопрос: ' SQL_OFFICE - Это SQL запрос по таблице OFFICE (поле NAME - это объединенное поле)Dim Frm, Frm1Set Frm=Client.CreatePrmForm("UQT2CKTUWHVO3BVO514KI03MFF", "Поиск по организациям")if Frm.ShowModal = "mrOK" then tFlt = ucase(Client.UDEVar.Value("FILTER_TEXT")) Module.SQL_OFFICE.SetFilter "NAME like '%"&trim(tFlt)&"%'" Module.SQL_OFFICE.First Set Frm1=Form.CreateForm("W2PZNNBHY5GWHEV45XIHXR53BG", "Поиск организаций") if Frm1.ShowModal = "mrOK" then Module.OFFICE.Locate "IDOFF", Module.SQL_OFFICE.FieldByName("IDOFF") end ifend if

Page 15:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Ответ: Так это вы в клиентский набор данных фильтр по Like вставляете? Имеет полное право не работать, хотя в Delphi help'е написано, что работать должно. Попробуйте сделать через серверный фильтр. Вопрос: Почти ведь работает, только на 2 символах вылетает. Ладно, попробуем на серверном сделать. Ответ: ClientDataSet - иногда непредсказуемая вещь, кроме того, в этом случае с сервера все равно скачиваются все данные. Если их будет много, будет тормозить...

43. Вопрос: Вопрос по interbase. Через IB CONSOLE пытаемся открыть файл базы. Выдается ошибка типа "Ошибка чтения списка таблиц". Что-то можно сделать, чтобы поправить базу? Ответ: Попробуйте сделать backup/restore этой базе, хотя не уверен, что поможет. Через BDE она открывается? Вопрос: Через ПИРС пробовали - та же ошибка выдается. Ответ: А через SQL Explorer? Скорее всего база как-то упала... Вопрос: Если она падает, сделать ничего нельзя, если бэкап отсутствует? Ответ: Не знаю, я ни разу с такой ситуацией не сталкивался, может в форумах поискать где-нибудь?

44. Вопрос: С чем может быть связана ошибка, возникающая в процессе выполнения процедуры: "Количество изменяемых(удаляемых) записей > 1" Ответ: Скорее всего, это связано с тем, что в таблице нет уникального индекса и есть две или более записи с одинаковыми значениями всех полей.

45. Вопрос: Если в модуле данных заводим таблицу больше одного раза (накладывается разный фильтр), то модуль данных их именует по русски одинаково, а по английски - по разному. Если потом эти таблицы использовать в Fastreport'е , то он показывает только русское название и данные таблицы не различает. Почему и что делать? Ответ: Так и должно быть - русское имя - оно только одно и не меняется. В отчете FastReport в этом случае нужно в словаре данных сделать переменную с именем OrigNames (значение не важно), тогда отчет будет видеть только английские имена. Есть еще один способ, но его лучше не использовать, если модуль данных будет меняться - сделать переменную KeepDictionary и тогда там же в словаре можно менять русские псевдонимы, но при изменениях в модуле данных, они не будут автоматически отражены в словаре отчета. Я обычно в таких ситуациях использую OrigNames и английские имена.

46. Вопрос: Если на таблицу устанавливаю сортировку при открытии модуля данных на сервере и в UDE DBGRID ввожу новую запись, то она встает на место в соответствии с сортировкой только после refresh. Как можно сделать, чтобы она сразу вставала на место? Ответ: Есть два способа, первый - это установить ту же сортировку на клиентский набор данных (но это может затормозить открытие таблицы), а второй - на событии "после сохранения изменений" делать Refresh принудительно. Я у себя вообще об этом не задумывался, оставлял как есть... Вопрос: Но после refresh в dbgrid'е указатель уходит с нововведенной записи. Как остаться на этой записи? Ответ: Можно перед Refresh'ем запомнить первичный ключ записи в переменную, а после Refresh'а сделать Locate Вопрос: Пробовали, что-то не больно хочет. Ответ: Я когда-то делал, у меня работало... ТипаID=Module.Table.IDModule.Table.RefreshModule.Table.Locate "ID", ID

Общие вопросы установки UDE .

47. Вопрос: Как подцепить БД АККОРДа? Ответ: Сначала при установке ПИРСа надо будет установить BDE, потому что обращение к БД АККОРДа возможно только через него. А потом надо создать объект Источник данных и сказать, что он подключается через BDE. Тип сервера ASE11, тип драйвера SYBASE, параметры примерно такие:DATABASE NAME=AccordSERVER NAME=serverUSER NAME=saOPEN MODE=READ/WRITESCHEMA CACHE SIZE=8

Page 16:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

BLOB EDIT LOGGING=LANGDRIVER=ancyrrSQLQRYMODE=SERVERSQLPASSTHRU MODE=SHARED AUTOCOMMITDATE MODE=1SCHEMA CACHE TIME=-1MAX QUERY TIME=600MAX ROWS=-1BATCH COUNT=200ENABLE SCHEMA CACHE=FALSESCHEMA CACHE DIR=HOST NAME=APPLICATION NAME=NATIONAL LANG NAME=ENABLE BCD=FALSETDS PACKET SIZE=4096BLOBS TO CACHE=64BLOB SIZE=32CS CURSOR ROWS=1 Вопрос: Я установил БЮДЖЕТИРОВАНИЕ, а какое там имя пользователя и пароль для входа? Ответ: Если Interbase ставился стандартно, то sysdba/masterkey, никаких специфических имен пользователей там нет Вопрос: А как обновление проекта выполнить? Ответ: Обновление для чего? Если структура данных, то Инструменты - Синхронизация БД. Вопрос: Вспонил, через Rupgrade. Ответ: Но бюджетирование вроде и не менялось... Вопрос: Зато ПИРС менялся. Бюджетирование старое, а ПИРС новый. В Бюджетировании таблица ОБЩИЕ УСТАНОВКИ какому меню соответствует? Вообще как посмотреть соответствие таблицы и меню, где таблица вызывается? Ответ: Сложно... Надо смотреть, какая процедура открывается из меню, какая там форма, по какому модулю данных, и какие там таблицы в модуле используются. Вопрос: Ладно, давай поподробнее про АККОРД. Это в сервере настройка подключения делается? Надо просто сервер поднять? Ответ: В принципе можно непосредственно в проекте подключение настроить, не трогая сервер. Вопрос: То есть нужно запустить дизайнер и создать новый проект? Ответ: Да, если будете с нуля писать, а не в нашем проекте доделывать. Вопрос: С нуля. Как создать новый проект? Ответ: Инсталлятор ПИРСа его ставит, если была галочка поставлена - это для Interbase. Вопрос: Т.е. это псевдоним Project? Ответ: Да, он самый. Вопрос: ОК, создали профиль ACCORD. Зашли туда в дизайнере. Как подключение к базе настроить? Ответ: Создаете объект Источник данных. Вопрос: Поименовать его можно по любому? Ответ: Да, конечно, от имени ничего не зависит. Вопрос: Выбираем:Тип подключения BDE connectionТип сервера ASE11Нужно ли ставить галку Использовать псевдоним подключения сервера?И какой тип драйвера ставить: SYBASE или Sybase System 11? Ответ: SYBASE, другой - это ODBC. галка не нужна, настраивайте параметры прямо в объекте. Вопрос: А вот этот параметр: SQLQRYMODE=SERVER прямо так и писать? Или вместо SERVER что-то другое? Ответ: Так и писать, там еще есть LOCAL, но он для другого. Вопрос: Подключение сделали. Как таблицу вывести из базы? Ответ: Создайте объект "таблица", привяжите к этому источнику, системное имя введите, например, UNIT и нажмите "получить из БД".

Page 17:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Общие вопросы разработки в UDE .

48. Вопрос: Как в dxDBGrid получить суммирование по столбцам и вывести в строке SUMMARY? Поле это есть, но в нем ничего не считается. Ответ: К сожалению, я по dxdbgrid не могу ничего сказать... Можно добавить в модуль данных запрос, который будет считать суммы, и выводить его данные в DBText, например, - я так делал.

49. Вопрос: Как из ПИРСа сделать отчет в Excel? Ответ: Есть два способа - первый с помощью нашего объекта "Отчет в Excel" - там рисуется отчет почти как в Аккорде, а второй - напрямую через OLE из процедуры. В первом - создается объект "Отчет в excel". В нем рисуется форма и определяются Band'ы (почти как в Аккорде), потом в процедуре примерно так: Set XL=Client.CreateUDEObject("TUDNKU4EIL0D3JX4VNKUN2RKZ0", "Отчет по регистру") Set B1=XL.BandByName("Sum1") B1.FieldByName("NMCol")=T_Field.NMFIELD B1.PutВ Галеоне можно посмотреть в узле Отчеты-Бухгалтерский учет-Ведомости по оборотам-Настраиваемые ведомости.А через OLE, где шаблоны хранятся в базе - это довольно сложно, но посмотреть можно в Пользовательский интерфейс-Отчетность-Печать отчета.

О создании пользователей.

50. Вопрос: Как сформировать меню пользователя для клиентской части ПИРСа? В документации ничего про это не сказано. Ответ: В общем случае сначала надо создать пользователя в базе данных, в которой лежит проект (не в ПИРСе!!!) и назначить ему роль UDEUSER sql запросом. Затем создать этого пользователя в ПИРСе. Затем создать профиль и назначить его пользователю, созданному в ПИРСе. Из самого ПИРСа для пользователь умеет создаваться только для Oracle. В общем же случае, не для всех платформ ПИРС умеет создавать пользователя платформы. Поскольку не все SQL сервера позволяют создать пользователя напрямую через SQL. Для IB пользователей нужно создавать из консоли, но больше ничего в консоли нельзя трогать. Причем пользователей надо создавать и в БД проекта, и в рабочей БД. В целом на сервер.

51. Вопрос: Какие бывают лицензии? Ответ: Есть следующие лицензии:- на сервер - общее кол. Подключений;- клиент, дизайнер, удаленный доступ - количество подключений данного типа, но не больше общего в сумме;- лицензии на тип подключения - количество подключений данного типа (BDE, IB, ORACLE)..О конвертации данных из БУХКОМПЛЕКС в ГАЛЕОН.

52. Вопрос: После конвертации в ГАЛЕОНе в некоторых полях (название организации, название банка, юридический адрес, например) иероглифы вместо русских слов.

Ответ: В BDE Administrator'е надо в закладке Configuration в ветке Configuration-Drivers-Native-DBASE и FOXPRO там же поставить LANGDRIVER dbase RUS cp866 или просто cyrr написать (но cyrr может не сработать). И можно еще попробовать там же в System-Init поставить langdriver cyrrЗамечаниеДля нормальной конвертации в каталоге выгруженных DBF файлов должны присутствовать все, перечисленные ниже. Если каких-то файлов нет (в БУХКОМПЛЕКСе в соответствующих таблицах не содержится записей), эти файлы необходимо создать вручную (например, утилитой SBBASE БУХКОМПЛЕКСа) нулевой длины.

SYSTDATEKAORGKABANK

Page 18:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

KAMOLKASTRKASKLKAGROUPEDIZMVIDOSSPRSCHETKLSUBSCHKLKAUPLPOROBOROTSALDMOUNKSU1KSU2KATOSKATOS_DKLDOGNAKLSGOODNAKLSCHFAKTGOODSPAYMENT

Общие вопросы установки UDE .

53. Вопрос: Если был сформирован отчет, настроенный на формат А4, а потом в работе (не закрывая клиента) был сформирован отчет на А3, на экране показывается весь отчет, но его часть за пределами листа бумаги (как будто формат А4). Это под виндами 98. Если закрыть клиента и потом открыть, все нормально. Видимо по умолчанию хватается предыдущий формат?

Ответ: Дело не в формате, а в масштабе. Когда указываешь "по ширине страницы" или "страница целиком", он высчитывает масштаб в процентах и запоминает именно его.54. Вопрос: Когда одной процедурой формируется 4 fastreport отчета и они все открываются на экране, то часто после печати первого вылетает ошибка типа "ошибка доступа к памяти" или что-то пишет про fastreport.dll. Вот пример процедуры: Set Rep=MD.OpenReport("VQGNZDEKJ151X324PBJA2K540B", "Журнал №1 (ТитулЛист)") Rep.Variable("Организация") = MyOffice Rep.Variable("ДатаНачало") = MonthName(DatePart("m", dtb)) Rep.Variable("ДатаКонец") = DatePart("yyyy", dtb) Rep.ShowReport

Set RepE=MD.OpenReport("TIQK0MHPWZENF144LIVCLMY2ZH", "Журнал №1 (Последний Лист)") RepE.Variable("Организация") = DatePart("d",dtw) RepE.Variable("ДатаНачало") = MonthName_Gen(DatePart("m", dtw)) RepE.Variable("ДатаКонец") = DatePart("yyyy", dtw) RepE.ShowReport

Set MR=Server.OpenModule("VIBZWHZLMAVWL5G4WOXBJSHQ2N", "Журнал №1", "") Set RepC=MR.OpenReport("UYP2ZCQXZSLETEG4WA5G4ZCBNM", "Журнал №1_Кредит") RepC.Variable("ДатаНачало") = dtb RepC.Variable("ДатаКонец") = dte RepC.Variable("Итог") = ItogC RepC.ShowReport

Page 19:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

MR.TMP_JUR1.SetFilter "IDDOCTYPE=4 and IDCON = '"&Server.IdCon&"'"'"IDUSER = '"&Server.UserName&"'"

Set RepD=MR.OpenReport("CENQYYOLPGW030V4V4MEHHX5HP", "Журнал №1_Дебет") RepD.Variable("ДатаНачало") = dtb RepD.Variable("ДатаКонец") = dte RepD.Variable("НачСальдо") = BegSaldo RepD.Variable("КонСальдо") = EndSaldo RepD.Variable("Итог") = ItogD RepD.ShowReport

Ответ: Попробуйте все объекты-отчеты называть Rep, чтобы создание следующего уничтожало предыдущий (окно останется!). Или после ShowReport писать Set RepXX=Nothing

55. Вопрос: Вот по такому принципу сделано (пример из подсказки):Dim CDS, DSSet CDS = Server.GetCustomDS CDS.AddField "A1", "ftString", 25 CDS.AddField "I1", "ftInteger", 0 CDS.AddField "F1", "ftFloat", 0 CDS.AddField "D1", "ftDate", 0 Set DS = CDS.Create DS.Append DS.FieldByName("A1")= "String 25"DS PostЗаписи добавляются, но значения полей нулевые (Null). Почему? Пытались посмотреть DS Fieldcount - 0.А DS Recordcount - например 1 (не ноль)Просто для небольшого объема данных удобнее в виртуальных таблицах обрабатывать, чем создавать временные. да и быстрее будет.

Ответ: Это понятно, но я в таких случаях или клал ClientDataSet на форму, или пустой запрос использовал. В общем, эта штука работает, но нужно вместо FieldByName использовать SetFieldByName и GetFieldByName. Не знаю, почему так сделано, в следующей версии исправлю, они будут работать, а потом можно будет и Fieldbyname, и постараюсь сделать как везде - просто DS.A1="1"56. Вопрос: Вопрос, при формировании отчета сначала берет поля по принтеру, установленному по умолчанию. Потом, если при печати поменять принтер, то следующий отчет сформируется с теми полями принтера, который был выбран. Это связано с операционкой? (отчеты сделаны в системе на виртуальный принтер, ОС - винды 98). Один и тот же отчет. Один раз получается с одним количеством страниц, второй раз с другим - в зависимости от того, какой принтер выбирался ДО! формирования отчета. Как можно сделать так, чтобы отчет формировался универсально? А то идет сползание формата. Ответ: Это все внутри FastReport'а как-то делается... Но ведь от полей вроде бы почти ничего не зависит, они нужны только когда рисуешь новый отчет, чтобы не зайти за поля. Разбивает на страницы он только по настройкам выбранного принтера, а разбивание идет в момент формирования... Единственный способ - печатать все на одном принтере, который по умолчанию. Вопрос: Проблема снимется, если отчет сразу в Excel выбрасывать? Ответ: Думаю, да, он как разбил - так и сохранит. Можно даже в его собственный формат сохранять, он все форматирование сохранит. Вопрос: Отчеты сделаны через Cross... Как в Excel это делать? Ответ: В смысле из FastReport'а экспортировать? Попробуйте экспортировать в формат "Excel через OLE". Или через объект "отчет в Excel". Там все просто - у Band'а есть типы Horizontal и Final как в Аккорде были. Если у вас статистика есть, там можно посмотреть. Документации пока нет... Из VB у него интерфейс совсем простой, а вот формат Band'ов надо будет хотя бы кратко описать. Когда доберусь и сделаю - пришлю! Пока вот так://Band 'Band name'='Sheet name', 'Range' [, Sum('Detail band')] [, Child('Master band') [Before]]// [, AutoWidth [All] [Keep]] [, AutoHeight [All] [Keep]] [, NoCopyWidth] [, NoCopyHeight]// [, Distinct=('Field name', 'FieldName', ...)] [, ColTitle] [, RowTitle]// [, Horizontal] [, Vertical] [, Final[(n)]] [, NoMove] [, Fictive]

Page 20:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

// [, NewPage] [, NewSheet] [, OnLastPage] [, OnEachPage] [, ProcessPage]// [, NoSplit] [, SheetName 'field']Это я комментарий из исходника вырезал.

57. Вопрос: Есть команда модуль.таблица.refresh которая обновляет набор.А есть команда модуль.таблица.refreshrecord, которая должна обнолять запись. Но почему то запись не обновляется. Почему? Ответ: Похоже, это в MIDAS'е глюк, поэтому лучше этим методом не пользоваться. Если нужно обновить и базу - refresh, а если нужно пересчитать вычисляемые поля (для чего мы и делали refreshrecord) - есть RecalcRecord. Вопрос: Должны переобновиться связанные поля. Будет на них действовать RecalcRecord? Ответ: Не пробовал, может быть и будут, но подцепляемые таблицы нужно сначала обновить, если они менялись, а refresh это делает сам. Если recalcrecord не получится - делайте на событии oncalcfield заполнение связанных полей - так тоже можно. 58. Вопрос: Fastreport поля таблиц не видит. С чем это связано? Ответ: А нет ли таблиц называющихся по-русски одинаково? Сделайте в отчете переменную OrigNames без значения - все будет видно по английским именам.

59. Вопрос: В связи с чем возникает ошибка "Нет записей для изменения в таблице <имя таблицы>? (при закрытии интерфейса идет пересчет и потом используется метод Post) Ответ: Такая ошибка возникает, если на момент Post'а запись оказалась изменена другим пользователем (или может быть как-то из триггера или процедуры). Сначала сделать Post, а потом пересчеты, или пересчитывать не в самой базе, а в той записи, которая потом сохраняется

60. Вопрос: Каким образом можно проверить наличие пинга по заданному IP в приложении на ПИРСе? Ответ: На Delphi надо написать COM-объект (dll), у которого будет метод вроде CheckComputer(IP: string): boolean, потом из ПИРСа через CreateObjectByName создавать этот объект и проверять. А написать должно быть просто - в Delphi есть встроенные компоненты для работы с сетями. Если со встроенными компонентами не получится - поищите в инете ICS - бесплатные неплохие компоненты для работы с сетью. Можно еще и через объект Shell-команд вызвать ping.exe, но вот результат в таком случае не получите.

61. Вопрос: Можно ли через OLEDBContainer поле таблицы отображать и редактировать в Word'е? И что означает сообщение OLEDBContainer "Ошибка чтения из потока". Ответ: Надо OLEDBContainer'у указать тип что это документ Word, а когда ошибка вылезает? Вопрос: Указали, что это документ Word, поле и таблицу. Идет просто запуск формы и вылетает это сообщение. Ответ: Странно... а в этом поле ни в одной из записей данных не было? А данные были не в формате ворда? Вопрос: Нет. А в каком формате должно быть? на null она тоже ругается после отображения формы: Operation not allowed on an empty OLE container Ответ: Странно, вообще-то на NULL не должна ругаться... а если в данных оставить NULL и убрать что только документ Word, разрешить любой тип. Для СУБД Interbase вот как container описан object OleDBContainer1: TOleDBContainer Left = 136 Top = 0 Width = 396 Height = 328 AllowInPlace = False AllowActiveDoc = False AutoActivate = aaManual Align = alClient Caption = 'OleDBContainer1' TabOrder = 0 DataSource = CLM.DS_TEST_OLE DataField = 'NM1' DefaultOleClass = 'Word.Document.8' end

Page 21:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

62. Вопрос: Очень не хватает в ПИРСЕ в Дизайнере форм такого компонента типа как DBComboBox c возможность подстановки значений из связанного списка при вводе с клавиатуры. Большая просьба добавить. Ответ: А такого вроде и в Delphi нет, но обычный UDEDBLookupComboBox вроде умеет при открытом списке делать поиск по набору. Вопрос: В Делфи 6 у типов ComboBox есть: property AutoComplete: Boolean Ответ: В 5 нет, если было бы, у нас бы его можно было увидеть в закладке "Все свойства". У нас инструмент на 5-м, я не смогу ничего сделать... Используйте поиск по набору. В принципе можно сделать Edit, чтобы на OnChange программа искала, например... Такое серьезное свойство реализовывать довольно долго. А, кстати, dblookupcombobox умеет искать и без списка, только что проверил.

63. Вопрос: Можно ли заставить раскрыться Combobox не из формы, а из процедуры? Или запустить POPUPMENU? Ответ: Нельзя.

64. Вопрос: Можно ли в udDBGrid строки разного цвета делать? Ответ: Можно через событие OnGetColors, но это довольно сильно замедляет отрисовку. Пример: Dim DS, B Set DS=Form.UDEDBGrid.DrawSupport DS.FontBold=true DS.FontColor=vbBlue DS.Color=vbRed

Можно использовать любые цвета. Например все из Delphi с помощью Util.NameToColor

В VB есть такие константыvbBlack &h00 Black vbRed &hFF Red vbGreen &hFF00 Green vbYellow &hFFFF Yellow vbBlue &hFF0000 Blue vbMagenta &hFF00FF Magenta vbCyan &hFFFF00 Cyan vbWhite &hFFFFFF White

или просто RGB-цвет как в стандартном свойстве Color в DelphiВ самом гриде есть свойства DrawField и DrawRecord, из события можно к ним обратиться чтобы узнать какое поле (имя) и какая строка (номер) отрисовывается.

65. Вопрос: Ошибка так звучит:Нарушение прав доступа по адресу 046В9ЕЕ0 в модуле "RTForm.dll". Чтение по адресу 058F8EAD.Последовательность действий, приводящих к ошибке: в клиенте - интерфейс, закрытие, расчет, потом вылетает эта ошибка (не всегда), нажимают ОК и работают дальше; в дизайнере - это при работе в дизайнере форм. Ответ: Может быть в процедуре расчета создаются и не освобождаются формы? Вопрос: Может, а как с эти побороться? Эта ошибка на что-то влияет? Может что-то испортить? Ответ: Например если бывает что форма создается но не показывается, такой форме надо сделать close или установить свойство autoclose=true. Это свойство влияет на то, что форма уничтожается после того, как ее COM объект (который через CreateForm и т.п. получаете) освобождается. Но его не в дизайнере, а в процедуре надо устанавливать. Может конечно проблема и не в этом, еще можно смотреть события OnClose и OnDestroy. Вопрос: А что там посмотреть? На OnClose идет сохранение данных и присвоение переменных. Ответ: Лучше это на OnCloseQuery делать.

66. Вопрос: В дизайнере был подключен пакет, потом этот файл умер и дизайнер форм не ткрывается - говорит такого файла нет. Как выйти из положения? Ответ: Только вручную. таблица TXM$OBJTYPES, условие IDTYPE='FRM', поле ADJUSTMENTS, там будет кусок типа object TTkPackage Tag = 1 Path = 'StdComp2.bpl' endс вашим пакетом, его и надо удалить. На всякий случай весь текст из этого поля сохраните, если что можно будет восстановить.

Page 22:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

67. Вопрос: Два компьютера соединены через «карта-карта» (без свича). На обеих компьютерах Windows 2000. Один компьютер - сервер. На другом стоит чисто клиент. С клиента ПИРС поднимается на сервере, интерфейсы открывается, база открывается. Но стоит запустить отчет - все виснет. Почему так? И если обе машины работают, сервер удаленного клиента не может отключить. Если насильно этого клиента отключить, сервер виснет и только перезагрузка помогает. Ответ: Попробуйте на клиентском компьютере поставить ПИРС полностью и запускать все с него. И также интербэйс поставить. Когда висит, лучше клиента не отключать, отключение посылает событие и ждет ответа, а если клиент висит, то ответа не будет. А что за отчет, простой fast report? И если ему не showreport, а printreport вызывать? Вопрос: Да, простой fast report. До showreport и не доходит. На 4 секунде время останавливается. Там используются вычисляемые поля, которые рассчитываются через SQL запросы Ответ: Так виснет еще до showreport? Тогда тут отчет не при чем, в модуле или процедуре надо смотреть... Локально на сервере работает? Вопрос: С этой машины (как бы сервер) и работали. Подключили второй компьютер - и пошло зависание. Ответ: А подключение к IB через localhost прописано? Когда на сервере алиасы настраиваете, путь к gdb должен начинаться с localhost:. Типа такого localhost:х:\... (х – сетевой диск). Кстати, новый firebird по-другому вообще не даст подключиться. Иначе возможна ситуация что база рухнет (если случайно одновременно будет локальный и сетевой коннект - сервер не на одной машине). И все-таки попробуйте на клиентской машине сервер поднять.

68. Вопрос: В модуле данных можно снимать флаг «автоматическое открытие наборов данных», а потом как бы открывать их руками. Но есть отчет, созданный от модуля данных. Перед ним открываются через open набор данных, но отчет при выполнении все равно говорит, что набор данных закрыт. Что тут не так? Ответ: То, что открывается через open, - это серверный набор данных. Они всегда открываются только так. Автооткрытие влияет только на клиентские наборы. Если оно отключено, то надо открыть набор в событии модуля "при создании клиентского модуля".Более того, если по модулю есть форма или делается отчет, то его наборы данных не рекомендуется открывать, может все съехать. Или закрыть перед созданием формы или отчета

69. Вопрос: Можно ли из ПИРСа запустить хранимую в Sybase процедуру, если можно, то как? А так же как запустить любую внешнюю программу? Ответ: Хранимую процедуру надо создать через Server.CreateNewDS запрос, установить в его SQL execute... и выполнить. А внешнюю программу - через объект "выполнение shell команды".70. Вопрос: В «Финансовое планирование» есть возможность делать выбор даты из календаря. Как это можно делать в других проектах? Окно выбора даты TTectonDBEdit содержит кнопку выбора [...], а TUDEDBEdit нет. Ответ: У UDEDBEdit есть свойство buttonvisible и usestandardpick, если их оба включить, то для поля типа дата будет выбор.

71. Вопрос: Как можно узнать через SQL запрос, есть ли подключенные к базе данных (IB) пользователи? И как можно узнать, есть ли подключенные к серверу ПИРСа клиенты? Ответ: Ни то, ни другое узнать нельзя. В Interbase вообще нет таких средств, у нас тоже не предусмотрено. Вопрос: Ведь в консоли же видно пользователи есть или нет. И сервер ПИРСа сам позволяет видеть его клиентов Ответ: Это возможно в isc4.gdb есть служебные таблицы, а насчет конкретной базы - не знаю. Да, сервер может показать, но у него нет функций чтобы отдать эту информацию клиенту. Сделать, наверное, можно, но все вопрос времени. Просто раньше не нужно было, потому и не подумали... А зачем вам это ? Вопрос: Чтобы узнать, один ли ты в системе (запуск сервиса, на выполнение которого могут повлиять другие коннекты к базе). Ответ: А если попробовать заблокировать в транзакции какую-нибудь таблицу эксклюзивно? Вопрос: А если пользователи уже в этой таблице? Тут такая штука. Один пользователь работает в этой таблице (набирает), а другой может эту таблицу сбросить в архив и набор первого пользователя – пропал. Ответ: Тогда надо что-то вроде таблицы блокировок делать и предусмотреть ее очистку. Например по времени, если пользователь вылетел и за собой не успел почистить.

Page 23:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

72. Вопрос: В TOOLS лежит firebird а в ADDONS лежит IBSetup - в чем их разница, что лучше использовать? И еще в TOOLS лежит библиотека CLlib - для чего она? Ответ: Это одно и то же, только переименованное, сравни файлы. А cllib - это для закладки "данные". Вообще-то его не рекомендуется использовать, только если очень понадобится. В дизайнере есть две закладки - "свойства" и "описание". Если замените ClLib в UDE\bin на тот что в tools, появится третья - "данные". Там можно непосредственно редактировать описание объекта (модуля, формы) в виде текста, но есть опасность испортить. Главное, чтобы пользователям эта dll не попала.

73. Вопрос: Вопрос: большие таблицы с несколькими десятками тысяч записей в ПИРСе очень долго открываются, как можно проследить за процессом открытия, что и где в это время делается? Можно ли повлиять на скорость работы и каких где ресурсов для этого недостаточно? Ответ: Надо смотреть есть ли события, клиентские фильтры или сортировка, или Last на таблицу. В свое время проверяли с таблицей из 12000 записей (банки Аккорда) - все нормально было... Вопрос: Как влияет фильтр на время открытия таблицы? Ответ: Клиентский фильтр (а возможно и сортировка) заставляет сразу перекачиваться все записи на клиента, т.е. тормозит. В обычной ситуации закачивается столько записей сколько нужно (например столько,сколько в гриде показывается).

74. Вопрос: Как воспользоваться командой DELETE? Я включил после открытия таблицы строку: Tb_D.Delete, которая выполняется , но не в полном объёме - удаляется всего несколько строк. Что нужно сделать для удаления всех записей? К сожалению в примере метода конструкция отсутствует, да и вообще для многих методов используется один и тот же пример, в котором отсутствуют интересующие методы, в частности использование SQL. Ответ: Delete удаляет текущую запись. Значит, чтобы удалить все, надо сделать такTbl.OpenWhile not Tbl.EOF Tbl.DeletewendА что непонятно с SQL'ем? Из ПИРСа используется только Select, если использовать insert, update и delete целостность данных не гарантируется и скорее всего будет нарушена. Если много записей, лучше еще визуализацию включить (при удалении), а с клиентским набором так лучше не делать (в общем случае он запрашивать подтверждение будет на каждую запись).

75. Вопрос: Как в фильтре воспользоваться значением из подчинённой таблицы? Основная таблица ALLSKDOC, указание даты в лоб работает, в SysSET - устанавливается через форму установки периода. Ответ: Если в SysSET одна запись и она в данной процедуре (в процессе работы с ALLSKDOC не изменяется), то ее можно из модуля данных убрать, а получить дату из SQL запроса (или из другого модуля в котором эта таблица определена) перед открытием модуля (в переменную) и при открытии модуля использовать значение этой переменной в фильтре"DTreg > '"&CSTR (переменная)& "'"Фильтр будет задан в лоб.Или второй вариант - создать UDE объект SQL в котором создать комбинацию этих таблиц, сделать его основным в модуле и фильтровать (те можно убрать).

76. Вопрос: В фильтре на модуль должно быть поле и его значение задаваться или можно задавать ссылки на другие таблицы из этого модуля типа DTreg > SYSset.DTreg Ответ: Только поля и значения. но это значения можно брать из других таблиц (например DM.Tbl1.SetFilter "IDCOMPANY='"&DM.CORP.IDCOMPANY&"'").

77. Вопрос: Можно ли в модуле заполнения данных работать сразу с несколькими таблицами связанными с основной по полю ID, причём на основную таблицу накладывается фильтр по дате. В этом случае фильтр будет действовать на связанные? Ответ: Все можно, надо в модуле протянуть связи, открыть все таблицы, потом наложить фильтр на главную и по ней ходить, подчиненные переоткрываться сами будут.

78. Вопрос: Как определить таблицу DOGOVOR в следующем примере:Set MD=Server.OpenModule("N5NHR0ZHMWEMDHBOX4OJNNPO0X", "Заполнение", "")

Page 24:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

set ds_A=MD.DOGOVOR set ds_D=MD.D_DOGOVOR ds_D.SQL="insert INTO d_dogovor select iddogov, idoper,iddoctype, idupdogov, idotpr, idpolu, startdate, enddate, stadies from DOGOVOR" ds_D.Execute или по другому строится конструкция определения SQL? Если не сложно, поправьте данный пример. Ответ: SQL правильный, только фильтра-то нету... и если d_dogovor не временная таблица, то так делать нельзя. Надо вот так:Set MD=Server.OpenModule("N5NHR0ZHMWEMDHBOX4OJNNPO0X", "Заполнение", "") set ds_A=MD.DOGOVOR set ds_D=MD.D_DOGOVOR ds_A.Open ds_D.Open while not ds_A.EOF ds_D.Append ds_D.IDDOGOV=ds_A.IDDOGOV 'так все поля ds_D.Post ds_A.Next wendИли можно набор данных создать через Server.CreateNewDS и указатьinsert into database1..d_dogovor.... select from database2..dogovor database1 и database2 - имена баз (т.е. как в Advantage), но это получается неправильно в том смысле, что если поменяются настройки источников, надо будет еще и процедуру править.

79. Вопрос: Есть две роли UDEADM и UDEUSER. Какая между ними разница (на что они влияют)? И еще есть при вводе пользователя в Администраторе галка АДМИНИСТРАТОР. Как она связана с ышеуказанными ролями? Ответ: Администратору как раз дается UDEADM, она позволяет редактировать объекты в дизайнере. А если нет дизайнера, то без разницы, пусть все просто пользователями будут. Вопрос: Если в базе данных заводим пользователя, ему надо присваивать роль в самой базе данных? Если да, то зачем еще ее вводить при входе в проект? Ответ: Роль назначается автоматически, а вводить при входе надо потому что интербейс не понимает какую из ролей делать явно активной, то есть у пользователя может быть много ролей но активна та, которую указали при подключении. Если не указать, он вообще ни одну не активирует. Вопрос: А что значит роль назначается автоматически? И какая роль назначается? Ответ: Если администратор, то UDEADM и UDEUSER. Если обычный пользователь, то UDEUSER. Я не помню, при заведении пользователя в дизайнере он его в IB вообще создает? Вопрос: Не пробовали. Сначала создаем пользователя, потом его прописываем. Ответ: Создаете в IB? Тогда надо ему там же и роли раздавать. Вопрос: А если в других платформах? Sybase или Oracle - то также? Ответ: Sybase - не помню, в Oracle пользователь СУБД создается из дизайнера и роли ему прописываются. Вопрос: В шаблоне по умолчанию создание пользователя для Oracle есть. Для IB - нет. Это можно самим дописать? Ответ: Вряд ли. Раз мы не сделали, значит в IB нельзя средствами SQL создать пользователя.

80. Вопрос: Можно ли в фильтру указать, что необходимо выбрать только те записи в основной таблице, которых нет в подчиненной? Если "ДА", то как? Ответ: В фильтре - нельзя. Нужно создать SQL запрос в ПИРСе типаSelect * from Table1 where not exists(select 1 from table2 where table2.f1=table1.f1)открыть в модуле как основной или как подчиненный (это неважно, только без связей и SetFilter не сработает).

81. Вопрос: Вопрос вот в чём: мы хотим сделать передачу документов из Аккорда в 1Сv8 (так получилось, что имеем на предприятии две системы) через XML файлы. От поставщика 1С требуется получить правила выгрузки документов и формат загрузки файла, а из Аккорда предполагаю через ПИРС формировать файл XML и формировать документы на основе выкачки 1С (также XML файлы). Так вот, можно ли получить

Page 25:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

консультацию (хорошо бы с примерами) по работе с XML документами, в большем объёме, чем прописано в руководстве программиста. Ответ: Для этого в проекте должен быть объект "XML документ". А потом нужно посмотреть в Help'е в разделе "полезные процедуры..." Можно сделать так - скопировать XML.cds и info.cds в UDE-PIRS\bin\Upgrade и там же создать файл XML.txt с одной строчкойXML.cds TXM$OBJTYPESПотом через RUpgrade его закачать в проект. Только возможно еще нужно будет поставить апдейты для MSXML (MSXML3 кажется), но не помню точно в каком Windows надо а в каком нет. Для работы еще необходимо в UDE-PIRS\bin сделать tregsvr UDEXMLDoc.dll (при инсталляции ПИРСа этого нет).Пример выгрузки и загрузки таблицы через XML формат (это обычные процедуры VBSCRIPT):

ВЫГРУЗКА Sub Main Set DM=Server.OpenModule("JML04FWS3YJGPIL4GVNCJ1WSXA", "Модуль 1", "") Set T=DM.CURRENCY Set X=Client.CreateUDEObject("FEMH0FBUHIRZBFMO0TQ325SHBL", "Док 1") Set Doc=X.NewDoc("CURRENCY") T.Open NR=1 while not T.EOF Set Rec=Doc.CreateElement("Rec")'&NR) for i=0 to T.FieldsCount-1 Set Fld=Rec.CreateElement(T.FieldName(i)) Set Attr=Fld.CreateAttr("Null") if IsNull(T.FieldByIndex(i)) then Fld.Value="NULL" Attr.Value="T" else Fld.Value=T.FieldByIndex(i) Attr.Value="F" end if Next T.Next NR=NR+1 wend X.SaveToFile("a.xml") Client.ShowMsg "OK"End Sub

ЗАГРУЗКАSub Main Set DM=Server.OpenModule("JML04FWS3YJGPIL4GVNCJ1WSXA", "Модуль 1", "") Set T=DM.CURRENCY Set X=Client.CreateUDEObject("FEMH0FBUHIRZBFMO0TQ325SHBL", "Док 1") X.LoadFromFile("A.xml") Set Doc=X.Doc.ElementByName("CURRENCY") T.Open for i=0 to Doc.ChildCount-1 T.Append Set Rec=Doc.Element(i) for j=0 to Rec.ChildCount-1 Set Fld=Rec.Element(j) if Fld.Attr("Null").Value="T" then T.FieldByName(Fld.Name)=NULL else T.FieldByName(Fld.Name)=Fld.Value end if

Page 26:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Next T.Post Next Client.ShowMsg "OK"End Sub

82. Вопрос: server.begintrans с каким уровнем изоляции открывает транзакцию? Можно об этом поподробнее. И чем поменять уровень? SQL? Примерчик бы для IB Ответ: С текущим. ПИРС не трогает уровень изоляции, если нужно поменять - то в процедурах, например в автозагрузке. Для IB не знаю. Для sybase примерно такSet Q=Server.CreateNewDS(...)Q.SQL="Set transaction isolation level 0"Q.Execute

83. Вопрос: Где и как прописываются пользователи? Назначаются ли им какие-либо роли? Как назначить профиль пользователю? Нельзя ли конкретно прописать последовательности действий. Ответ: Сначала создается пользователь в IBCONSOLE (в IB нельзя создать пользователя SQL запросом). Затем в Администраторе ПИРСа создается пользователь с ТЕМ ЖЕ!!! системным именем, которое использовалось при создании пользователя в IBCONSOLE. При этом пользователю можно дать администраторские права (галочка АДМИНИСТРАТИВНЫЙ ДОСТУП). Если и проект и рабочая БД находятся в IB, то больше ничего делать не нужно. Если рабочая БД находится в другой платформе (например, SYBASE), в этой платформе нужно создать пользователя с ТЕМ ЖЕ!!! системным именем и назначить ему роль UDEUSER. Создается пользователь SQL запросом (см. документацию на платформу, например, SYBASE). В дизайнере делается профиль для пользователя. В Администраторе этот профиль назначается пользователю.

84. Вопрос: Если поле типа двоичное и оно редактируется в форме через oledbcontainer в Word, можно его выгрузить в Word процедурой не через форму? Ответ: Надо создать невидимую форму с OleDBContainer'ом и у него вызвать Savetofile, например такForm.OleDBContainer1.SaveToFile "c:\1.doc"

85. Вопрос: Каков синтаксис фильтра в процедурах ПИРСа в строке "Set MD= Server.OpenModule("...","...","фильтр") ? Ответ: Синтаксис SQL-ный, этот фильтр подставляется в SQL. Вопрос: Вот такой фильтр не срабатывает:Set MD= Server.OpenModule("4XC3XVFUYRNSL4K42540DQBSVO", "Документы", "Select idksu from ksu where iddepart='06'") Ответ: Фильтр накладывается на основную таблицу! (об этом мы уже говорили, т.е. ksu должна быть основной таблицей, в противном случае будет выдаваться ошибка). Вот как он должен выглядеть:Set MD= Server.OpenModule("4XC3XVFUYRNSL4K42540DQBSVO", "Документы","iddepart='06'") Вопрос: На что влияет фильтр? Этого достаточно чтобы отсечь всю строку таблицы или это касается только первой строки цикла? Ответ: Отфильтрованная таблица содержит только записи, которым удовлетворяет фильтр (естественно, там будут все поля таблицы).

86. Вопрос: Профиль выполнения: для чего он служит, как им пользоваться и т.п. Что значит знак "&" в строке названия объекта? Ответ: Профиль выполнения - это набор главного меню и панели инструментов клиента. А & - это горячая клавиша для меню. Профиль надо нарисовать и назначить пользователю и все. Вопрос: Где и как прописываются пользователи? Назначаются ли им какие-либо роли? Как назначить профиль пользователю? В вопросах 26, 50, 79 понятен только первый шаг: как пользователя завести. А дальше? Назначить роль SQL запросом, где, как? Создать пользователя в ПИРСе: Сервер UDE-> Управление пользователями? Так там не добавляется, почему? Или не там? Тогда где? Пользователи д.б. прописаны везде? Interbase, Sybase, ПИРС - они должны находиться в полном соответствии или как? И, вообще, если уже это пройдено, нельзя ли конкретно прописать последовательности действий, а не ссылаться на ответы со сплошными намёками?

Page 27:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Ответ: Сначала создается пользователь в IBCONSOLE (в IB нельзя создать пользователя SQL запросом). Затем в Администраторе ПИРСа создается пользователь с ТЕМ ЖЕ!!! системным именем, которое использовалось при создании пользователя в IBCONSOLE. При этом пользователю можно дать администраторские права (галочка АДМИНИСТРАТИВНЫЙ ДОСТУП). Если и проект и рабочая БД находятся в IB, то больше ничего делать не нужно. Если рабочая БД находится в другой платформе (например, SYBASE), в этой платформе нужно создать пользователя с ТЕМ ЖЕ!!! системным именем и назначить ему роль ту, которая есть во внешней БД. Для АККОРДа, например, это будет роль Bublic. В АККОРДе все права давались Bublic'у.Создается пользователь SQL запросом (см. документацию на платформу, например, SYBASE). В дизайнере делается профиль для пользователя. В Администраторе этот профиль назначается пользователю.

87. Вопрос: Вопрос по поводу инструментария в дизайнере. В проекте Галеон есть элемент "TreeImageList", которого нет в других инструментальных панелях. Если в проекте присутствуют инструменты, которых нет в дизайнере, как быть? Ответ: В стандартной поставке ПИРСа в дизайнере форм присутствует некий стандартный набор инструментальных панелей с элементами для проекта по умолчанию PROJECT. С точки зрения разработчика среды ПИРС, набор этот вполне достаточен для большинства разработок. В готовых проектах (которые мы Вам установили в качестве примеров) естественно могут быть дополнительные инструментальные панели, нужные для этого конкретного проекта. Инструментальные панели, присутствующие в ПИРСе, это панели из DELPHI 5. Там их очень много. При необходимости, Вы сами можете добавить в Ваш конкретный проект нужные Вам инструментальные панели из DELPHI 5 (файлы типа bpl). Установка панелей - в дизайнере форм НАСТРОЙКИ-УСТАНОВИТЬ ПАКЕТ. Здесь же, когда высвечивается список установленных пакетов, можно посмотреть ссылку на имя файла конкретного пакета, затем перенести этот пакет в свой проект. Вопрос: Есть пакеты выполнения и редакторы компонент. В чём разница между ними и каковы функции самого редактора компонент, как им воспользоваться? Кстати элемент "TImageList" находится в группе редактора компонент. Ответ: По поводу TImageList еще раз. Он находится в Standard2 и вполне доступен для других проектов (библиотека StdComp2.bpl). Посмотрели по исходникам Галеона - в главной форме клиента (не дизайнера) есть компонент с таким именем. Он там используется для, например, у TDBTreeView есть свойство Images, чтобы у узлов картинки рисовались (например, в справочнике ШПЗ есть TreeImageList, в подразделениях). Далее, те компоненты, которые в пакетах редакторов, ничего не значат, в этих пакетах именно редакторы (которые по двойному нажатию на компонент например), сделано это разделение было, чтобы, например, при запуске клиента (не дизайнера) не грузить лишнее. Хотя наши многие пакеты (UDEXDB например) не делятся, там все в одном. И еще, в C:\UDE-PIRS\BIN могут быть пакеты, которых нет в том или ином проекте, их можно попробовать добавить.

88. Вопрос: Тип данных "Время", выдаёт ошибку: "Невозможно найти шаблон "ftTime". Тип "Дата, Время" использовать не хочу, нужно только время, что делать? Ответ: А какой сервер? Если в сервере есть такой тип данных (а он мало где есть), то надо открыть на редактирование тип сервера в дизайнере, там открыть шаблоны SQL и добавить шаблон ftTime по аналогии с ftDate. Если в сервере нет такого типа, нужно использовать DateTime и устанавливать дату в какое-то определенное число.

89. Вопрос: Возможно ли в ПИРСе, в форме, создать динамически расширяемую таблицу? Т.е., экранная таблица строится на основе какой либо таблицы или нескольких (статичная часть задаётся в форме) и внутрь этой таблицы необходимо вставить (в процессе работы клиента) дополнительные столбцы. Ответ: А таблица или запрос содержит все возможные столбцы? Смотрите у грида (в расширенных, свойствах и методах) AddColumn, ColumnCount, ColumnByField, Column(i) можно и добавлять, и удалять - все что угодно. Пример - если только из Галеона посмотреть налоговый учет – интерфейс ввода данных регистра - но там еще и SQL, и поля датасетов тоже динамические. Там процедура есть Пользовательский интерфейс. Налоговый учет. Ввод данных. Формирование SQL на строки регистра.

90. Вопрос: Можно ли запускать процедуры в ПИРСе в фоновом режиме? Т.е. если какая либо процедура выполняется долго, то "Клиент" ни на что не реагирует, получается не очень красиво. В связи с этим возникает второй вопрос: можно ли записать параллельно несколько процедур? А ОС пусть сама разбирается, ведь она считается многозадачной.

Page 28:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Ответ: Есть что-то типа Server.CallProcAsync и Util.GetAsyncObj, но с этим никто не работал и никто не проверял. Насчет двух процедур - нельзя, потому что если две процедуры параллельно будут обращаться к данным (не важно, одна таблица или несколько, главное что сессия одна), то все может так съехать, что сами не рады будете, а чтобы все не очень висело - есть Util.Visual, отображайте ход процесса.

91. Вопрос: Как настроить источник данных для работы с DBF файлами? Сделал так:1. настройки подключенияТип подключения: DBE connectionТип сервера: InterbaseТип драйвера: Microsoft Visual FoxPro Driver2. Получил свойства текущего драйвера и добавил строки как указано в вопросах и ответах (№16):PATH=d:\FoxDate\DEFAULT DRIVER=FOXPROENABLE BCD=FALSE3. Создаю таблицу для этого источника получаю ошибку: "Ibvalid configurations parameter, Alias:.....". Что и где необходимо ещё прописать? Ответ: Немного не так. Тип драйвера - STANDARD, параметры примерно такиеPATH=e:\...DEFAULT DRIVER=PARADOXENABLE BCD=FALSELANGDRIVER=ancyrr

92. Вопрос: Как произвести запуск процедуры из события элемента "Timer"? Что сделал:1. создал форму в одним элементом "Timer"2. назначил элементу периодичность запусков3. теперь надо сформировать событие, выполняемое по таймеру и его хочу оформить как отдельную процедуру.Вопросы: 1) как прописать событие, чтобы запустить процедуру, как её нужно оформить (можно ли отдельно или через модуль)?2) Как форму с таймером запускать в системе? это должен быть постоянно работающий клиент? как форму с таймером автоматически запускать при запуске клиента? Ответ: В таймере есть событие OnTimer, в нем или сразу пиши код, или Util.CallProc сделай, а там уже код. Если надо автоматически создавать форму, то это надо сделать в процедуре АвтоЗагрузка в корне дерева, что-то вродеSet F=Client.CreatePrmForm("ID", "")F.ShowЭто если форма не от модуля, иначе Util.GetDBForm Еще наверное лучше будет сделать в событии таймера Form.Timer1.Enabled=false а в конце True, а то неизвестно, что получится, если событие не закончится, а еще одно вызовется – может быть он ждать будет, а может все сломается...

93. Вопрос: Не могу найти ничего по работе с датами, функции VBScript не идут: "Требуется объект 'Date'", кусок текста ниже:->Set TekDate=Date->Set MD=Server.OpenModule("PXWGPN52JDYSR3YO3RMN4CK3EG", "Системные установки","")Пробовал выборку времени, тоже не идёт. Что же и как надо для работы с системным временем? Ответ: Все правильно, только Set не нужно, дата же - не объект. Дальше идут все функции VBScript

94. Вопрос: Из Делфи. Как сделать приложение COM объектом, чтобы его можно было запустить? Ответ: Насколько я помню, в приложении надо создать Automation Object (в Delphi File-New, там закладка ActiveX). Он сам при первом запуске зарегистрируется или его надо запустить с параметром /regserver

95. Вопрос: Необходимо в таблице формы сделать выборку из другой таблицы, а отобразить информацию из третьей (даже не просто отобразить, а слепить в одно поле из трёх). Например: Дано: WORKER - работники, PERSON - сотрудники из Аккорда, PEOPLE - физ лица из Аккорда, форма ввода в таблицу WORKER. Требуется: в поле "ФИО" формы выбрать из списка значение сотрудников, в PERSON есть только ID физ. лица, поэтому отобразить надо из таблицы PEOPLE. Да ещё и собрать это ФИО из трёх полей. Вопрос: можно ли это сделать в принципе? Если можно, то как?

Page 29:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Ответ: Пишется SQL-запрос, объединяющий PERSON и PEOPLE (назовем его Q_PERSON). В модуль данных добавляется таблица WORKER и запрос Q_PERSON. В запросе делается вычисляемое поле FIO. Если в WORKER есть код, то дальше можно делать просто Lookup. Если же нет (то есть там нужно хранить ФИО в виде строки), то нужно сделать отдельную форму от того же модуля и вызывать ее модально по кнопке выбора. Или же можно для выбора сделать отдельный модуль, форму и оттуда вызывать. Где-то в проекте «Финансовое планирование» есть интерфейс настройки соответствия счетов, там что-то подобное было.

96. Вопрос: Как подключить HTML формы? Ответ: 1. Надо создать в проекте тип (через SQL Explorer, таблица TXM$OBJTYPES)IDTYPE FHTIDSUPERTYPE FNMTYPE HTML формаENGINE {9CA91A62-10C4-4DD8-94BB-A246AB0D9387}RUNNABLE TPARAMSSUPPORTED FADJUSTMENTSobject TTkConfig object TTkProperties MainProperties.Strings = ( 'Align=Выровнять' 'Alignment=Выравнивание' 'AutoSize=АвтоРазмер' 'Caption=Заголовок' 'ChartCharset=Набор символов' 'Color=Цвет' 'DataField=Поле документа' 'DataSource=Документ' 'Enabled=Доступный' 'Font=Шрифт' 'Images=Картинки' 'Layout=Верт.Выр-ние' 'Lines=Строки' 'Picture=Картинка' 'ReadOnly=Только для чтения' 'ScrollBars=Прокрутка' 'Text=Текст' 'WordWrap=Перенос слов') SubProperties.Strings = ( 'Size=Размер' 'Name=Имя' 'Style=Стиль' 'Charset=Набор символов' 'Pitch=Шаг' 'Height=Высота' 'Color=Цвет') CheckMainPropIndex.Strings = ( '0' '1' '11' '12' '13' '14' '2' '3' '4' '5' '6'

Page 30:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

'7' '8' '9') end object TTkPackage Path = 'StdComp.bpl' end object TTkPackage Path = 'IISHTMLComp.bpl' end object TWizardManagerParams WizardList.Strings = ( '{D1CA1323-6193-11D5-B421-0002B33A4AA3}') LastWizard = '{D1CA1323-6193-11D5-B421-0002B33A4AA3}' end object TTkGridXY endend

Потом в IIS создать web-псевдоним, который будет указывать на любую папку, а в нее скопировать файлы из UDE\SRC\ASP и, в принципе, если запустить IIS, то должно как-то работать, покажет дерево объектов IIS (Internet Information Server - в Windows'е такая штука)Настройка подключения к серверу:server name - это имя oracle-сервераORA_CURRENT_SCHEMA - имя схемы

97. Вопрос: Как изменить настройки кэша? Ответ: В D:\UDE\bin\Aliases\server.ini. CacheLimit - это сколько объектов будет храниться в кэше. Мне кажется, достаточно 100, на 1000 будет много памяти уходить. А CacheLife - это время жизни кэша в минутах, если не ошибаюсь, тут чем больше, тем лучше, если нет ситуации, что на одной базе одновременно и разработка, и запуск клиента.

Начало работы.98. Вопрос: Создали таблицу (получили ее поля из БД Sybase - протокол АККОРДа). Создали форму. В форме создали DbGrid. Как привязать форму к таблице (что и где нужно указать в интерфейсе)? Ответ: У DBGrid'а есть свойство "Документ" (в закладке основные свойства) или оно же - DataSource в закладке "все свойства", там и надо выбрать таблицу. Но перед созданием формы надо было создать модуль данных, в который добавить эту таблицу, и форма должна быть создана от этого модуля. Вопрос: Я так и делаю, а он мне пишет Invalid property value. Что здесь не так? Ответ: А ты не пытаешься в этом свойстве набрать имя таблицы с клавиатуры ? Там есть кнопка со стрелкой, она список открывает, из этого списка надо выбрать. А ввод с клавиатуры только для поиска используй. Вопрос: Что же такое нужно ввести с клавиатуры, чтобы этот список открылся? Я уж и так и сяк, а он не открывается! Ответ: Или любую букву или Alt-стрелка вниз, это стандартный способ, во многих местах используется. Потом выбери в списке стрелками таблицу и нажми enter. Но мне кажется, когда рисуешь форму, удобнее все делать мышкой. Вопрос: Оказывается моя форма не связана с модулем данных. Как их связать? Как в свойствах формы (в строке базовый объект) появится имя моего модуля? Ответ: Чтобы форма была связана с модулем данных, ее надо будет создать заново. На модуле надо нажать правую кнопку мыши, там появится меню, в нем будет "создать" - сюда не надо, а еще будет "создать от текущего" - и потом "форма". Сюда и надо нажать.

Page 31:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

Вопрос: В сервере в подключениях создали новое подключение URM (IB), указали путь к файлу (с клавиатуры задали имя и расширение файла, т.к. такого там нет) SERVER NAME=C:\UDE-PIRS\db\urm.gdbВ дизайнере создали IB базу URM, указали псевдоним подключения URM. А почему в C:\UDE-PIRS\db\ не создался файл urm.gdb? Как его создать? Таблица для этой БД не ложится в базу говорит нет файла urm.gdb Ответ: gdb файлы не создаются ПИРСом - их надо создавать средствами Interbase, например IBConsole. В дереве есть пункт Databases, на нем нажми правую кнопку и там Create Database, в окне будет список File(s) - там напиши в первой строчке имя файла, а внизу выбери SQL Dialect - 1, а Default character set - WIN1251. В самом верхнем поле Alias набери что угодно. Вопрос: Как можно в форме считать запись из таблицы, (поподробней). Ответ: Нужно чтобы запись показывалась в виде набора полей ввода? Вопрос: Можно и так. Но хотелось бы чтобы она заносилась в чистую таблицу, например. Ответ: Так DBGrid все это умеет делать, а еще есть компонент TUDEDBNavigator, в котором есть кнопки для основных операций - создание записи, удаление, редактирование. Есть компоненты из закладки UDE DB Extended, например TUDEDBEdit, им надо установить свойства "Документ" и "поле документа", и тогда он будет редактировать указанное поле.

Общие вопросы разработки в UDE .

99. Вопрос: Проект и база на интербейсе. В проекте есть отчет, который долго выполняется. Если во время выполнения отчета на одном клиенте, с другого клиента запустить коннект к проекту, сервер ПИРСа намертво виснет. Помогает только удаление из списка запущенных задач. После этого второй коннект к проекту оживает и заново поднимает сервер. Но отчет пропал. Из-за чего такое может быть? Кто виноват? Сервер ПИРСа, DCOM, интербейс? Сервер ПИРСа как то квантует время работы с каждым пользователем? Ответ: Отчет на fast report'е? Если да, то насколько я понимаю, второй коннект будет ждать пока отчет не выполнится Вопрос: Да, на нем. но подвисания сервера наблюдаются и в других ситуациях. Например, у нас в пресс-службе. Если запустить поиск мониторингов и в процессе поиска кто-то еще будет коннектиться, сервер подвисает. Причем навсегда. И поиск не заканчивается, и коннект не происходит. Сервер приходиться снимать диспетчером задач. Ответ: Даже не знаю что с этим можно сделать. В Oracle была похожая ситуация, оказались виноваты компоненты ODAC, частично я это исправлял. Для interbase – это ibexpress. Но мне кажется там что-то связано с DCom, midas. Побороться с этой штукой никак. Как вариант можно сервер на каждое место поставить, но тогда проблемы с лицензиями. Например, есть лицензия на 1 подключение, если сервер один - то подключится один клиент. но если сервер на каждой рабочей станции - подключится сколько угодно человек. При этом интербейс может стоять только на сервере. И каждая рабочая станция со своим сервером ПИРСа будет к нему обращаться. И проект один, будет лежать там, где интербейс установлена. Только на каждой машине понадобится (хотя он вроде по умолчанию ставится) gds32.dll Это клиент Interbase. Ее UDESetup ставит в System32 Необходимо cfg и dbc скопировать с сервера, только localhost заменить на имя компьютера сервера. а в профиле подключения в клиенте надо сервер оставить пустым и выбрать алиас. И вот так 'SERVER NAME=C:\UDE-PIRS\db\PS_rep.GDB'писать нельзя, может база слететь. Нужно тоже поставить имя компьютера с двоеточием (а если локально то localhost) Вопрос: А как быть в этом случае с уникальным подключением? server.idcon что возвращает? Если сервера будут на каждой станции стоять этот параметр может повториться? Ответ: Нет, там GUID, он в пределах солнечной системы уникален. Вопрос: Я попробовал разнести сервера ПИРСа по разным станциям и на каждой станции выполняю одну и ту же работу - поиск мониторингов. Там временные таблицы заполняются при поиске. На станции, где я запустил поиск первым, все нормально. На второй станции поиск не идет, выдается ошибка "lock conflict on no wait transaction deadlock" Похоже в такой конфигурации нельзя с двух станций выполнять одинаковую работу? Ответ: Непонятно что-то... а в этой процедуре все в транзакции? Насколько я слышал, Interbase за то и хвалят, что у него транзакции не блокируют. Попробуйте например на время закомментировать Server.StartTran и, соответственно, Commit Похоже что идет попытка в большой транзакции, которая долго открыта, записать с двух мест в одну и ту же таблицу. Вопрос: А при поднятии сервера ПИРСа на локальных станциях, проект обязательно делать общим? Или же проект можно положить на каждую станцию свой? Ответ: Как больше нравится, но если у каждого будет свой проект, то и Interbase тоже на каждой машине должен быть.

Page 32:   · Web viewUDE Общие вопросы разработки в UDE. 1. Вопрос: Как связать таблицы в модуле данных если: Есть таблица

100. Вопрос: В интербейсе можно создать временную таблицу, которую потом можно будет удалить? А еще есть структура - создать таблицу в памяти. К ней можно применить sql запросы или ее можно проиндексировать? Ответ: Лучше ей не пользоваться, а сделать как у меня в бюджетировании - в модуле данных запрос (без триггеров), у которого 0 записей и те поля которые нужны, после этого с запросом можно работать Append, Post и т.п. - все будет в памяти сервера.

101. Вопрос: Есть просто функция (делающая некий расчет). Хочется ее засунуть в библиотеку dll, а потом вызывать в ПИРСе. Как это сделать (библиотеку) и как вызывать в ПИРСе. Ответ: Единственный способ - сделать dll с COM-объектом, методом которого будет эта функция. Потом - средствами VB - CreateObject и вперед. Или переписать на VB. Если подробнее про СОМ, то вот так.В Delphi New -> ActiveX Library, потом сохранить проект (это важно, чтобы имя библиотеки сразу было нормальное), потом New -> Automation object. В принципе для человека, программирующего на Delphi думаю ничего сложного нет. Дальше в редакторе библиотеки типов создается метод в интерфейсе, и пишется реализация. Потом регистрируется regsvr32 или в Delphi Run -> Register ActiveX server. А вызов на VB -

Set MyObj=CreateObject("MyLib.MyObj")'MyLib - имя библиотеки созданной в Delphi, MyObj - имя объекта там жеRes = MyObj.MyFunction(X, Y, Z, 123)'Параметры которые нужны

- Все-таки почему нельзя функцию на VBScript или JavaScript написать?- Хочется, чтобы не было никому видно, как она работает. - Ну тогда только COM. К сожалению, закодированный VBScript мы в ПИРСе не поддерживали... Хотя там кодировка от честных людей.- Это, естественно, в пятой версии дэлфи надо делать?- В любой, которая есть, там все стандартно.

102. Вопрос: Клиент ПИРСа не подключается по сетке. Переустановили на клиенте операционку (ХР со вторым сервиспаком), настроили через dcomperm, настроили dcomcnfg, настроили политику безопасности, отключили брандмауэр, на сервере рабочую станцию в юзерах прописали. Запускаем клиента, указываем сервер, псевдоним выбирается, сервер ПИРСа на сервере поднимается, но при попытке подключения выдается ОТКАЗАНО В ДОСТУПЕ. Ответ: А на сервере логин рабочей станции с тем же паролем? И логин создавался до всех манипуляций с DCom'ом? А на клиенте в списке юзеров есть тот, под которым логинитесь на сервер? С тем же паролем? И естественно это тоже надо делать до манипуляций с DCOM'ом. Вот пример. На сервере входим под User1, на рабочей станции под User2. Так вот, оба этих пользователя должны быть и там, и там, причем с одинаковыми паролями. И на рабочей станции User1 должен быть админом. Чтобы и клиент к серверу мог подключиться (это похоже работает) и сервер в свою очередь назад к клиенту. После заведения на рабочей станции юзера. надо снова DCOM настроить, чтобы ему тоже права дались.