bigpo.ru
добавить свой файл
1 2 3
Вопросы и ответы по 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'а можно было скачать бесплатно


4. Вопрос: Если через Тектон работать с таблицами формата DBF, получается клиент-сервер?

^ Ответ: Не очень понял, но в некотором смысле да...

Вопрос: Через чего делать множественный выбор в таблице и где сохраняется результат выбора?

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


5. Вопрос: Как открыть таблицу по НУЖНОМУ индексу (примерчик)?

Ответ: Надо просто в order by написать поля, по которым сортировать. Типа Module.Table1.SetOrderBy "ID", например на событии "при создании серверного модуля"


6. Вопрос: Хотелось бы получить пример запуска объекта визуализации в Тектоне (visual).

Ответ: Там все просто

Dim V

Set V=Util.Visual

V.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 function

CCur здесь с целью обрезать до 4 знаков после запятой. Если не нужно - его можно убрать C2S=Replace(CStr(Value), DS, ".")

Только надо проверить. некоторым SQL серверам нужна не точка, а текущий настроенный разделитель


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

В этом случае при попытке перейти на любую закладку он всегда останется на первой. А можно скрыть недоступную закладку:

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=FOXPRO

ENABLE 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. Вопрос: На каких операционных системах лучше работать клиенту?

Ответ: Для дизайнера и клиента требования одни и те же, единственное отличие - дизайнеру чуть больше памяти хорошо бы дать и чуть быстрее процессор. У меня на 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 соблюдать регистр?

Ответ: Вроде нет, но я всегда вводил маленькими буквами.

Вопрос: Установив 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;

и

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 failure

whenever sqlerror exit failure

connect STAT_REP/admin

drop 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

^ Ответ: Интересно... Выполни, хуже не будет. Похоже, что без него действительно не будет работать.

Вопрос: В этом 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.


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.BeginTrans

Server.RollbackTrans

Server.CommitTrans

кроме того, вставка, изменение и удаление записи выполняются в транзакции со всеми своими триггерами.

Вопрос: Это чьи сервера? UDE?

Ответ: UDE Server. Он из процедур доступен как Server.

Вопрос: Не понял, а было сказано - цитирую:

"С транзакциями все нормально и отрабатывает их именно СУБД, а не наш сервер. Это же внутреннее свойство нормальных SQL серверов и это работает автоматом, тем более что мы используем сервера не как просто хранилища данных (хотя бы индексы - даже этого сверхкрыши, и уникальность и откаты и т.д.). Причем если связаны два разных сервера, то в каждом из них будет сделан откат, если он это умеет."

Ответ: Все правильно. Транзакции обрабатываются SQL-серверами. Но инициировать-то этот процесс надо - для этого в сервере и сделаны эти процедуры.

Вопрос: А как транзакции инициируются? (примерчик бы)

Ответ: Я же три процедуры написал. Там все понятно - начать, откатить и завершить. А вот пример с обработкой ошибок на VB:

Server.BeginTrans

on error resume next

DoSomething

if Err.Number<>0 then

ED=Err.Description

on error goto 0

Server.RollbackTrans

Client.Terminate ED

end if

Server.CommitTrans

on error goto 0


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


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

Ответ: Через инсталлятор будет обновляться проект и запускать синхронизацию таблиц. Сейчас это ручками. То же самое что уже делалось, когда вы у себя устанавливали.

Вопрос: На эту тему нужны более подробные инструкции.

Ответ: А я идешник серверный зря давал что ли. У пользователей будет свой. Вот по нему мы и разрулим. Главное чтобы наше не трогали. Здесь все просто. Если хотите поддержки, то не трогаете базовый комплект, все равно нашим заменится. А остальное - без ограничений; отчеты, формы, процедуры, даже таблицы.

Вопрос: Да это понятно. Если пользователи интерфейс захотят поправить, скажем, к интерфейсу счета (план счетов) добавить вкладку еще одного уровня аналитики, как будет обновление идти в этом случае? Или добавить поле в вашей таблице, например office.

Ответ: Так не делают и ничего не поможет. Продублируйте и делайте доработки и запускайте свой интерфейс. В профиле указал и все, он остается всегда пользовательский. Нельзя трогать базовый! Здесь нет лекарства, или вы на поддержке или сами крутитесь.


30. Вопрос: Вопрос по обновлению проекта. Вашего!!!! На ORACLE. Например, в существующей таблице мы добавили поле. И в существующем модуле данных сделали обновление полей таблицы. Форму пишем свою от этого модуля данных. Вы присылаете обновление. Мы его поставили.

1. Что при этом получится с таблицей и нашим полем, если вы тоже правили эту таблицу?

2. Что произойдет с модулем данных?

Ответ: Мы об этом уже говорили. Если хотят полной поддержки, то нашего трогать нельзя и тут ничего не сделаешь. Пусть пользователи делают свои таблицы и свои модули данных даже на наши таблицы. То, о чем ты спрашиваешь, можно делать только централизованно. Иначе с поддержки надо снимать. То, что было нашим, нашим и останется.

Вопрос: Причем тут поддержка? Это вопрос вообще. Что будет, если это сделать?

Ответ: Ты создал таблицу, передал другому, он там изменил поля, ты сделал доработку и отдаешь опять таблицу. Или сломается таблица напрочь, или останется твое. А модули данных точно поедут и тут ничего не сделаешь. Так что до какого то момента в наше пользователям лучше не лезть, а только использовать.

Вопрос: Вообще это не есть хорошо. Поскольку поля в таблицах могут только добавляться, инсталлятор при обновлении должен работать так, чтобы не таблицы не ломались. С модулем данных в принципе все равно, а вот таблицы должны быть рабочими!!!!

А можно поконкретней с таблицей? Какие там будут поля? Старые ваши, плюс наши, плюс ваши новые?

Ответ: Я так понимаю да... А модуль наш закачается. Но!!! Если вы меняли триггеры или индексы - я так понимаю, что оно все умрет и заменится на наше. А вообще мы еще толком upgrade не продумывали :)

Вопрос: Т.е. будут все поля в самой базе данных ORACLE (физически)? А в проекте в типе таблицы какие будут поля? Старые ваши, плюс наши, плюс ваши новые?

^ Ответ: В проекте он синхронизирует и будут все поля - и наши, и ваши. Лучше все-таки в наши таблицы поля через нас добавлять

Вопрос: Почему нельзя таблицы делать общими? Накапливать поля при апгрейде? Это же позволит им делать собственные доработки/разработки на общей базе. Ведь народ конструктор берет.

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

Вопрос: Ну ладно. Почему нельзя сделать полную копию (аналог) модуля (формы), от которой потом делать свое? Руками перебивать - долгое занятие.

Ответ: Хотя бы потому, что там могут быть разные источники данных и имена форм должны отличаться.


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


31. Вопрос: Когда для формы установлено свойство позиция poDesigned, то при разных разрешениях экрана позиция будет разной? А как сохранить ее для разных разрешений?

Ответ: При poDesigned расположение формы (в пикселях) всегда будет таким, каким было в дизайнере форм. Разрешение не влияет. Хотя конечно при 1280x1024 форма будет казаться ближе к углу и меньше размером, чем при 800x600 - пиксели-то разного размера. Но тут уже никак.

Вопрос: А можно как то влиять на расположение окна?

Ответ: Программно? Можно попробовать Form.Left, Form.Top. А почему бы не поставить poDefaultPosOnly и пусть Windows сам определяет, где показать новое окно. Мы везде так делаем.

Вопрос: При 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

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 используется.

Вопрос: Дело не в настройках 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

^ Ответ: А если попробовать сделать в SQLplus

grant 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)

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, Frm1

Set 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 if

end if

Ответ: Так это вы в клиентский набор данных фильтр по 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.ID

Module.Table.Refresh

Module.Table.Locate "ID", ID


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


47. Вопрос: Как подцепить БД АККОРДа?

Ответ: Сначала при установке ПИРСа надо будет установить BDE, потому что обращение к БД АККОРДа возможно только через него. А потом надо создать объект Источник данных и сказать, что он подключается через BDE. Тип сервера ASE11, тип драйвера SYBASE, параметры примерно такие:

DATABASE NAME=Accord

SERVER NAME=server

USER NAME=sa

^ OPEN MODE=READ/WRITE

SCHEMA CACHE SIZE=8

BLOB EDIT LOGGING=

LANGDRIVER=ancyrr

SQLQRYMODE=SERVER

SQLPASSTHRU MODE=SHARED AUTOCOMMIT

DATE MODE=1

SCHEMA CACHE TIME=-1

MAX QUERY TIME=600

MAX ROWS=-1

^ BATCH COUNT=200

ENABLE SCHEMA CACHE=FALSE

SCHEMA CACHE DIR=

HOST NAME=

APPLICATION NAME=

NATIONAL LANG NAME=

ENABLE BCD=FALSE

TDS PACKET SIZE=4096

BLOBS TO CACHE=64

BLOB SIZE=32

CS CURSOR ROWS=1

Вопрос: Я установил БЮДЖЕТИРОВАНИЕ, а какое там имя пользователя и пароль для входа?

^ Ответ: Если Interbase ставился стандартно, то sysdba/masterkey, никаких специфических имен пользователей там нет

Вопрос: А как обновление проекта выполнить?

^ Ответ: Обновление для чего? Если структура данных, то Инструменты - Синхронизация БД.

Вопрос: Вспонил, через Rupgrade.

Ответ: Но бюджетирование вроде и не менялось...

Вопрос: Зато ПИРС менялся. Бюджетирование старое, а ПИРС новый. В Бюджетировании таблица ОБЩИЕ УСТАНОВКИ какому меню соответствует? Вообще как посмотреть соответствие таблицы и меню, где таблица вызывается?

Ответ: Сложно... Надо смотреть, какая процедура открывается из меню, какая там форма, по какому модулю данных, и какие там таблицы в модуле используются.

Вопрос: Ладно, давай поподробнее про АККОРД. Это в сервере настройка подключения делается? Надо просто сервер поднять?

^ Ответ: В принципе можно непосредственно в проекте подключение настроить, не трогая сервер.

Вопрос: То есть нужно запустить дизайнер и создать новый проект?

^ Ответ: Да, если будете с нуля писать, а не в нашем проекте доделывать.

Вопрос: С нуля. Как создать новый проект?

Ответ: Инсталлятор ПИРСа его ставит, если была галочка поставлена - это для Interbase.

Вопрос: Т.е. это псевдоним Project?

Ответ: Да, он самый.

Вопрос: ОК, создали профиль ACCORD. Зашли туда в дизайнере. Как подключение к базе настроить?

^ Ответ: Создаете объект Источник данных.

Вопрос: Поименовать его можно по любому?

Ответ: Да, конечно, от имени ничего не зависит.

Вопрос: Выбираем:

Тип подключения BDE connection

Тип сервера ASE11

Нужно ли ставить галку Использовать псевдоним подключения сервера?

И какой тип драйвера ставить: SYBASE или Sybase System 11?

^ Ответ: SYBASE, другой - это ODBC. галка не нужна, настраивайте параметры прямо в объекте.

Вопрос: А вот этот параметр: SQLQRYMODE=SERVER прямо так и писать? Или вместо SERVER что-то другое?

^ Ответ: Так и писать, там еще есть LOCAL, но он для другого.

Вопрос: Подключение сделали. Как таблицу вывести из базы?

Ответ: Создайте объект "таблица", привяжите к этому источнику, системное имя введите, например, UNIT и нажмите "получить из БД".


Общие вопросы разработки в 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


следующая страница >>