FAQ по Centura SQLBase
FAQ по Centura SQLBase
Общие вопросы
Где можно найти дополнительную информацию о продуктах компании Centura?
Где я могу найти информацию о серверах баз данных компании Centura
и проблеме 2000 года?
В каких программных продуктах фирмы Centura решена проблема 2000
года?
Как выбрать подходящее средство разработки?
Нас очень заинтересовала бы система разработки приложений с возможностью
получать СТАНДАРТНЫЙ C++ код. Нет ли в природе чего-нибудь универсального?
Как осуществить перенос SQLBase Server 6.0, работающего в данный
момент под NetWare, на Windows NT Server?
Управление данными
Когда производится удаление из таблицы, где присутствуют внешние
ключи, скорость работы ужасна! Что можно сделать, для ускорения процесса?
При попытке произвести вставку данных в таблицу появляется сообщение
'table in an incomplete state'. В чем причина и что теперь делать?
Возможно, ли модифицировать таблицу с данными с использованием утверждения
select?
Программа выводит сообщение об ошибке "Application Dedlock", что
необходимо сделать?
Сообщения об ошибках
Что означает сообщение об ошибке №63731?
Работа сервера базы данных завершается с ошибкой 703. Что это означает?
Выдается отрицательный номер ошибки. Каково отличие от положительных
кодов возврата?
Почему выдается сообщение об ошибке №00422 “Invalid Servername Length”?
После установки PTF10 для CTD 1.1.2 в программах стала возникать
ошибка: cbi11.exe, ошибка приложения.
Сохраненные Процедуры
Необходимо использовать константу DATETIME_NULL в сохраненных процедурах,
но она не работает. Что происходит?
Платформы
Появляется сообщение об ошибке 'duplicate server ' при попытке установить
SQLBase на Novell.
Появляется ошибка 182 при попытке сделать копию на Novell сервере.
Что это означает?
При закрытии SQLBASE на Novell, выдается сообщение "1.1.14 Module
did not release 1152 resources". В чем заключается проблема?
Как установить SQLBase в виде сервиса Windows’95 до версии 7?
Имеется ли возможность связаться с локальным SQLBase сервером из
16- и 32-разрядных приложений?
Для чего используется системная переменная SQLBASE?
Имеются ли проблемы, при работе с Windows’98?
Почему не загружается SQLBase 7.X в Novell NetWare 4.11 (NDS), хотя
в Начальном Руководстве все описано?
После аварийного отказа сети, SQLBase сервер выводит сообщение "missing
logfiles". Что необходимо делать?
Клиенты Win’95 выдают ошибку "Cannot load sqlspxw.dll" хотя конфигурация
– такая-же как для Win3.1 клиентов. Имеются установленные клиенты Novell. Как можно
устранить ошибку?
Требуется ли обновление клиентских компонент, если обновлена версия
сервера баз данных (5.x - 6.x)?
Какой номер порта TCP/IP используется для SQLBase?
Какие файлы копируются при установке локальной версии SQLBase 7.X?
Инструментальные средства
SQLConsole
При установке SQLConsole 6.0 не удается создать локальную базу
данных! Почему?
SQLTalk
Возможно ли иметь "динамические сценарии" для утилиты TLKNRTR
(старая версия DOS SQLTALK)?
Как можно запустить SqlTalk, чтобы выполнить сценарий автоматически?
SQL Windows
Работа SQLWindows 5.0 с Microsoft SQL Server
Ошибка Connection is busy with results for another hstmt
Quest
При попытке запустить Quest не видно никаких кнопок, кроме "New"
и "Open". Как это устранить?
Centura Team Developer
Почему при инсталляции CTD 1.5 не доступен компонент "Object Compiler"?
При использовании экранных таблиц с динамическими (автоматическими)
колонками, когда курсор уходит из отредактированной ячейки, таблица не получает
сообщение SAM_Validate, как было в SQLWindows.
Может ли SQLWindows работать через 32-хразрядный ODBC?
В программе Sqltalk не работает должным образом режим поиска в
скрипте текста по образцу?
Почему пакет заплаток "Centura Team Developer 1.5.1 PTF1 SqlWindows32
PTF Download 4909" отказывается устанавливаться на свою (1.5.1) версию?
Connectivity
Основные
При попытке вставить пустую строку, производится замена на пробел.
Это можно избежать?
Как посмотреть протокол работы SQLRouters?
Oracle
При использовании внешнего result set выводится ошибка с номером
163 ("Result set not active"). Как этого избежать?
Как необходимо сконфигурировать подключение с Oracle для 16-разрядных
(SQLWindows) приложений?
Требуется вставить/модифицировать данные в базу данных Oracle.
При этом выводится ошибка "ORA-01465 Invalid hex number". Что делается неправильно?
Для числовых значений в формате, отличном от US данные отображаются
неправильно, при выборке из базы данных Oracle. Как этого можно избежать?
Как установить уровень оптимизатора?
Является ли возможным просмотреть Execution Plan для SQL-запросов
Oracle?
Как подключиться из SqlWindows к Oracle 8?
Почему при выполнении запроса, содержащего хранимые функции,
которые возвращают VARCHAR2 (VARCHAR), результаты не передаются в приложение?
Для вызова хранимой процедуры создана функция CTD; внутри нее
вызывается функция SqlPLSQLCommand(). Передача параметров в хранимую процедуру
и из нее осуществляется через параметры функции. Однако значения, возвращаемые
процедурой в эти параметры не попадают.
Что за раздел [ODBCrtr] в sql.ini?
Проблема с работой CTD 1.5.1. под Oracle 8.1.5.
Microsoft SQLServer
На некоторых машинах, с абсолютно идентичными DLL, SQL.INI файлами
и установкой ODBC, производится попытка установки связи. На некоторых машинах выдается
ошибка, на других подключение безаварийно. Как можно устранить эту проблему?
Как можно использовать "begin transaction" и "commit transaction"
в сохраненных процедурах для MS SQL Server (ver. 6.0 или 6.5)?
Как можно конкатенировать столбцы в утверждениях SELECT?
JDBC
Нет доступа к JDBC-драйверам для работы. Что неправильно?
ODBC
При попытке доступа к SQLBase из MS Access выводится сообщение "Table
‘TMP, % # MAU' alredy exist". Как этого избежать?
Используется некоторое программное обеспечение для загрузки данных
в SQLBase с использованием ODBC, но при этом используются кавычки для описания столбцов,
и следовательно SQLBase не распознает их правильно. Имеется ли обходной путь?
Используется CTD/SQLWindows SQLRouter для ODBC. При этом ODBC драйвер
не перечислен в списке доступных драйверов. Что можно сделать?
Как я восстанвить информацию из системного каталога ODBC источника
данных?
При попытке соединяться с источником данных ODBC, появляется ошибка 401
"Cannot connect to database". Как можно избежать этого?
Как можно обойти ошибку 1811 "File not found" при попытке соединения
с ODBC источником данных?
При замене ODBC источника данных, для использования другой базы
данных Centura хранит соединение со старой базой данных. Как это устранить?
Драйвер не поддерживает псевдонимы столбцов. Возможно ли решить
эту проблему?
Quest при обращении к базе дает ошибку Invalid SET parametr. А WinTalk
вообще не видит базу по ODBC.
Общие вопросы
Q: Где можно найти дополнительную информацию о продуктах компании Centura?
A: На сайтах http://www.centurasoft.com и http://www.interface.ru
Q: Где я могу найти информацию о серверах баз данных компании Centura
и проблеме 2000 года?
A: Все новые версии SQLBase соответствуют 2000 году. Более подробную информацию можно
найти на http://www.centurasoft.com/support/tech_info/b
ulletins/cli2000.htm. Ваши прикладные программы, которые обращаются к SQLBase, также
следует проверить. Используйте утилиту, доступную на ftp.centurasoft.com/products/utilities/y2ksqlb.zip
чтобы проанализировать ваши SQLBase базы данных. Пожалуйста, прочитайте ReadMe.txt и
License.txt после извлечения их из .ZIP файла. Раздел "Поведение функции YEAR()" так
же может быть интересным
Q: В каких программных продуктах фирмы Centura решена проблема 2000
года?
A: Проблема 2000 полностью решена для следующих версий самых популярных программных
продуктов:
SQLBase 6.1.2 и выше
Centura Team Developer 1.1.1 и выше
SQL Base Exchange 7.0 и выше.
Всем пользователями более ранних версий продуктов Centura рекомендуется сделать upgrade
на любую из последних версиий. В настоящий момент возможна поставка:
SQLBase 7.0.1 - сервер базы данных для Windows NT/95 или Nowell. Под Windows NT
работает в режиме сервиса (в отличии от версии 6.1.2). Имеет возможность работы с внешними
функциями, подключаемыми из DLL.
SQLBase 7.5 - сервер базы данных для Windows NT/95 или Nowell. Единственный на настоящее
время сервер БД, имеющий внутреннюю систему шифрования информации. C использованием
SQLBase 7.5 безопасная работа в сфере банковских и финансовых технологий, здравоохранения
и других отраслях, требующих повышенной степени защиты информации, стала реальностью.
SQL Base Exchenge 7.0, 7.0.1 и 7.5 – универсальное средство репликации данных между
различными СУБД.
Q: Перед нами стоит задача написать систему производственной себестоимости
(СПС). На данный момент мы пытаемся выбрать подходящее программное обеспечение для этой
задачи.
A: Короткий ответ:
Ответ на поставленный вопрос зависит от целого ряда факторов и условий, уточнение
которых поможет выбрать подходящее программное обеспечение для поставленной задачи. По
грубой оценке задачи можно предложить проверенные на практике многих разработчиков средства:
для разработчиков Centura Team Developer (1.2 - 2.0) - SQLWindows/SQLWindows32, а для
хранения данных SQLBase 6.1/7.5.
Возможный распространенный ответ:
Ответ на поставленный вопрос зависит от целого ряда факторов и условий, из которых
можно выделить следующие главные:
Ориентировочные объемы БД (Мб - Гб)
Количество пользователей в системе (возможно и однопользовательский вариант)
Предполагаемая стоимость работ
Квалификация разработчиков и программистов, доступных для проекта
Требования к быстродействию, надежности и стоимости при эксплуатации системы.
Другие факторы, существенные для конкретной реализации.
Если хотя бы ориентировочно определены перечисленные факторы, то выбор состоит все-таки
из ограниченного числа вариантов:
Большие, затратные системы с большим числом рабочих мест, иерархической структурой,
разработчики высокой квалификации, большие затраты на эксплуатационное ПО, трудоемкой
эксплуатацией, числом рабочих мест >20, длительным этапом проектирования, разработки
и внедрения - СУБД - ORACLE и его родные средства разработки программного обеспечения
(либо SYBASE, либо INFORMIX).
Системы средней размерности, число рабочих мест от 3-15, разработчики квалификации
средней или чуть выше, сносными требованиями проектированию, затратам на ПО и стоимости
эксплуатации, легкость в сопровождении - СУБД SQLBase и средства разработки SQLWindows/
SQLWindows32 (Centura Team Developer CTD 1.5 - 2.0) фирмы CENTURA/Gupta ( либо MS VB
+ MS SQLServer). Кроме того, для данного случая может быть хорошим с точки зрения быстродействия
и стоимости вариант использования RDM/ROM(средства разработки RAIMA DATA MANAGER и
разработки RAIMA OBLECT MANAGER), С++ (например Inprise) и Velocis(СУБД) при числе
рабочих мест до 5-ти.
Для малых систем, однопользовательских систем и систем с числом РМ до 5-ти,
эффективным будет применение С++ (Borland C++Builder предпочтителен по надежности ПО),
правда для квалифицированных программистов, и API для работы с БД (DBD - BDE и др.),
а также средств RDM/ROM (или средств этого же уровня) + СУБД Velocis, при требованиях
к программистам чуть ниже целесообразно использование продуктов CENTURA (SQLWindows/
SQLWindows32 Centura Team Developer CTD 1.5 - 2.0), которые имеют и однопользовательский
вариант и развитые возможности выхода на С/С++. Возможным вариантом является применение
VB и настольных СУБД (MS Access) для программистов более низкой квалификции.
Самым дешевым и простым способом является использование систем электронных таблиц
типа MS EXCEL, однако, никакой гибкости, ненадежность и сложности в обучении пользователей
гарантированы.
Q: Нас очень заинтересовала бы система разработки приложений (скажем,
клиентов баз данных) с возможностью получать СТАНДАРТНЫЙ C++ код. Borland C++ Builder
не очень устраивает: те функции, которые он включает в текст программы, не всегда (и
все реже) поддерживаются другими разработчиками. Microsoft C++ тоже основывается на своих
библиотеках, и хотя это надежнее, все же Microsoft меняет их как перчатки... Нет ли в
природе чего-нибудь более универсального? Просветите, пожалуйста.
A: Вообще в вашем вопросе содержится много неопределенного (какие функции Вас не устраивают,
какие системы классов и почему Вас не удовлетворяют и т.д.), однако, попробую все-таки
ответить.
Если брать мировую практику разработки программ на С и С++, то действительно: оценки
систем программирования Borland C++ и Microsoft C++ не очень высокие: они с трудом попадают
в первый десяток систем разработки на С++. Однако так сложилась тенденция распространения
продуктов в нашей стране, именно они из-за своей доступности (бесплатности) получили
у нас широкое распространение. Так системы Watcom, Zortech C++, Visual Age C++, всегда
у профессиональных программистов ценились выше. Данные системы программирования не часто
появляются на "доступных" CD и торговых фирмах. Кроме того, в Интернет есть большое количество
складов библиотек для С и С++.
Если Вы имеете ввиду средства проектирования программ, в частности то, что называется
CASE-технологиями, то в настоящее время это направление бурно развивается и здесь можно
рассматривать продукты многих фирм-лидеров: Rational, Platinum (+ Logic Works), SilverRun,
Embarcadero, из отечественных CaseAnalitic (SoftArt) и т.д. Информацию о продуктах этих
фирм можно найти на одноименных сайтах. Однако с генерацией кода в них на практике не
так хорошо, поэтому их применение эффективно в первую очередь, все же, на этапах проектирования
и сопровождения.
Вообще, если речь идет о создании приложений и сложных программных систем клиентов баз
данных, то мне, несмотря на то, что я сам являюсь приверженцем языка С и С++, придется
сказать, что использование этого языка для данных целей не является лучшим выбором. Это,
к сожалению, факт. API (например, API для SQLBase), которое предлагается для многих СУБД
не просто в освоении, и, тем более, трудоемкость разработки приложений велика. Хотя этот
вариант нельзя отбрасывать для разработки профессиональных систем.
Наиболее предпочтительным может быть комбинированный вариант: основой приложения являются
специальные средства разработки уровня 4GL (например, SQLWindows компании Centura, Centura
Team Developer, Developer фирмы Oracle и др.), а для более ответственных участков используется
С или С++, функции которых вызываются из приложений при обращении к DLL. Язык SAL, используемый
в SQLWindows очень приближен к С и С++, однако в нем нет той сложности, которые испытывают
разработчики при изучении системы классов, в частности Borland C++ и Microsoft C++, есть
все основы для объектно-ориентированного проектирования и проектирования, коллективной
разработки, создания собственных шаблонов и библиотек, достаточное количество стандартных
и подключаемых объектов (COM и ActivX). Можно много говорить о достоинствах этого варианта,
хотя конечно существуют и недостатки. Многие разработчики для создания программных систем
клиентов баз данных все же предпочитают эти доступные на нашем рынке и не дорогие, даже
по сравнению с Borland C++ и Microsoft C++, средства разработки.
Теперь по вопросу универсальности. Не думаю, что универсальная система программирования
Вас больше устроит, так как с универсальностью очевидно теряется простота и прозрачность
для создания систем. Здесь, по-видимому, нужен здравый компромисс.
Извините за некоторые общие рассуждения, возможно Вам знакомые, но более конкретный
ответ на Ваш вопрос возможен только при уточнении исходных посылок: какой класс задач-приложений
Вы хотите создавать, какими ресурсами располагаете, каков уровень ваших программистов
(средний или высокий, для низкого я бы порекомендовал VB), почему Вас не устраивают все-таки
функции и классы Borland C++ и Microsoft C++ и т.д.
Q: Не подскажете, какими средствами можно решить следующую задачу:
Имеется официально купленный SQLBase 6.0 for Netware 25 Users. Установлен на NetWare
Server 4.1.
Сейчас стоит задача перевода всей сети на платформу Windows NT.
В связи с этим возникает вопрос: Как осуществить перенос SQLBase Server 6.0, работающего
в данный момент под NetWare, на Windows NT Server?
Подскажите, пожалуйста, как это лучше осуществить технически и какие программные
средства необходимо приобрести для решения этой задачи дополнительно.
A: Начну с конца. Если у Вас в комплекте SQLBase 6.0 нет дистрибуции для SQLBase
под Windows NT Server, то Вам необходимо приобрести этот продукт. В настоящее время лучшая
версия SQLBase 7.5.1. Она, кроме того, обеспечивает три уровня защиты данных и доступа.
Цены на версии (в зависимости от числа пользователей) есть на сайте www.interface.ru.
Если дистрибуция есть, то приобретать ничего не надо. Кроме того, если у Вас старый SQLWindows,
желательно поменять его на CTD 1.5.1 (до 15 апреля есть льготный вариант приобретения
мощнейшей версии CTD 2000 - она выйдет летом - бесплатно, купившим CTD 1.5.1).
После установки на NT SQLBase требуются минимальные штатные настройки сервера и клиента,
детально описанные в документации. В принципе возникает две задачи: подключение к серверу
и перенос данных из старых баз SQLBase на новые.
Первая задача решается настройками в SQL.INI на сервере и клиенте (протоколы связи должны
быть одинаковыми TCP/IP). На клиенте нужно поменять настройки COMDLL в секции [winclient]
или [win32client] на sqlwsock и sqlws32 соответвенно (отмечу попутно, что если у серверов
разные имена, то могут одновременно работать несколько серверов на разных платформах).
На сервере в доступном только ему (!) SQL.INI, нужно произвести настройки данного вашего
сервера, указав COMDLL, требуемого типа в секции [dbnt25sv]
servername=server1,<ваша COMDLL для связи>,
для NT это может быть также sqlws32 для протокола TCP/IP:
servername=server1, sqlws32.
Вторая задача связана с переносом данных на новый сервер. Возможно, Вы это знаете,
но я все-таки отмечу детали. На старом сервере нужно выполнить с SQLTalk команду UNLOAD
для вашей БД (connect и set server обязательны). Затем создать БД с таким же именем на
новом сервере и выполнить с SQLTalk команду LOAD с указанием того же файла. Детали:
файл с информацией должен быть доступен серверу (расположен на сетевых томах); при новой
версии сервера в этом файле возможно потребуется вручную поменять номер версии выгруженной
БД (это в начале файла выгрузки).
Я думаю, что Вы по достоинству оценили надежность SQLBase и SQLWindows. Отмечу, что
новые версии не менее надежны и обладают многими хорошими дополнительными возможностями.
Управление данными
Q: Когда производится удаление из таблицы, где присутствуют внешние
ключи, скорость работы ужасна! Что можно сделать, для ускорения процесса?
A: Решение заключается в том, что внешние ключи должны быть установлены после того,
как будет создан индекс на ссылочную колонку в каждой дочерней таблице. Для каждой таблицы
с внешним ключом:
1) Удалить внешний ключ.
2) Создать индекс на колонку, используемую ключем.
3) Воссоздать внешний ключ.
Q: При попытке произвести вставку данных в таблицу появляется сообщение
'table in an incomplete state'. В чем причина и что теперь делать?
A: Похоже на то, что индекс, который был установлен при создании первичного ключа,
был удален. Удалите первичный ключ, создайте индекс, и заново создайте первичный ключ.
Это должно решить проблему.
Q: Возможно, ли модифицировать таблицу с данными с использованием
утверждения select?
A: Для SQLBase версии 6. x.x можно производить модификацию с использованием SUBSELECT.
В SQLBase версии 7.0 впервые представлена функция, выполняющая подобные действия. Имеется
превосходный пример для SQLWindows, показывающий данную методику, доступный на сайте
http://www.centurasoft.com/support/tech_info/knowledge_base/sbsinfo/t1tot2.zip
Q: Программа выводит сообщение об ошибке "Application Dedlock", что
необходимо сделать?
A: Эта ошибка происходит, когда несколько программ пытаются установить блокировки
на одной и той же странице в базе данных, при этом уже имеется блокировка на странице
от других приложений. Блокировки устанавливаются, когда происходит обращение к данным,
и зависят от уровня изоляции.
Например:
Пользователь 1 имеет блокировку на Странице 45, нуждается в блокировке на Странице
107.
Пользователь 2 имеет блокировку на Странице 107, нуждается в блокировке на Странице
45.
Оба приложения блокируются. SQLBASE выбирает один из процессов и завершает вторую задачу.
Методика уменьшения подобных проблем следующая.
В программах необходимо откорректировать порядок insert/update/delete для устранения
ситуаций одновременной блокировки.
Сообщения об ошибках
Q: Что означает сообщение об ошибке №63731?
A: Такой номер сообщения об ошибке недопустим. Однако существует правило для определения
реального номера ошибки. Для ошибок, чей номер выше 60000, необходимо использовать
формулу пересчета “(65536 - [Номер ошибки]) * (-1)”. В данном случае получаем (65536
- 63731) * (-1) = -1805 “TimeOut”.
Q: Работа сервера базы данных завершается с ошибкой 703. Что это
означает?
A: Ошибка 703 - это вероятно аппаратная проблема. Выполните "Check Database", и посмотрите
результат. Сервер базы данных не завершит своей работы, когда будет обнаружена ошибка.
Если "Check Database" обнаруживает ошибку в индекес, удалите, а затем воссоздайте индекс.
Если "Check Database" находит ошибку в странице, Вы должны найти разрушенные строки.
Создайте новую таблицу с такой же структурой, как у разрушенной таблицы, затем вставьте
все, не разрушенные строки в новую таблицу, удалите старую разрушенную таблицу, и переименуйте
недавно созданную таблицу по имени удаленной таблицы. Этот способ позволит сохранить
не разрушенные данные. После того, как устранены все неполадки и создана резервная
копия, необходимо произвести UNLOAD/DROP DATABASE/CREATE DATABASE/LOAD или REORGANZE.
Эта операция полностью восстановит вашу базу данных. См. также:
http://www.centurasoft.com/support/tech_info/knowledge_base/sbsinfo/sbsrecov.html
Q: Выдается отрицательный номер ошибки. Каково отличие от положительных
кодов возврата?
A: Отрицательная ошибка означает, что сервер базы данных произвел RollBack. В SQLBase
RollBack может быть ограничен последней компилированной командой или всей транзакцией.
Положительная ошибка означает, что транзакция все еще активна (то есть программа может
выбрать, выполнять COMMIT либо RollBack).
Q: Почему выдается сообщение об ошибке №00422 “Invalid Servername
Length”?
A: Многие клиенты не работают с более новыми серверами, и возникновение ошибки №00422
не возможно. Эта проблема возникает, когда пользователь Centura Tem Developer переходит
от SQLBase 6.x на SqlBase 7.x. Необходимо заменить SQLWNTM.DLL и COMDLLS на более новые
версии.
Q: После установки PTF10 для CTD 1.1.2 в программах стала возникать
ошибка: cbi11.exe Ошибка приложения. Инструкция по адресу "0х0000434f" обратилась
к памяти по адресу "0x0000434f". Память не может быть "read". Как можно устранить
ошибку?
A: Короткий ответ:
Для ответа на Ваш явно вопрос недостаточно информации. Опишите место, оператор, действие,
при котором возникает эта ошибка. Опишите среду (ОС, ЭВМ и др.) на которой возникает
ошибка. Во время выполнения или при работе в режиме интерпретатора 'cbi11.exe? Попробуйте
сделать .EXE, и запустить с DEPLOY.
Возможный распространенный ответ:
Для ответа на Ваш явно вопрос недостаточно информации. Опишите место, оператор,
действие, при котором возникает эта ошибка. Опишите среду (ОС, ЭВМ и др.) на которой
возникает ошибка. Во время выполнения или при работе в режиме интерпретатора 'cbi11.exe?
Попробуйте сделать .EXE, и запустить с DEPLOY.
Кроме того, надеюсь, что Вас не обидят мои следующие рекомендации для попытки выхода
из создавшегося положения.
Аксиома 1: 99.99% ошибок все-таки на совести программиста и разработчика. Если
в это не верить, то программирование нужно бросать.
Аксиома 2: Выход из создавшегося положения есть, и чаще всего не один!
Ну а если всерьез, то попробуйте следующие действия, возможно, они выведут Вас из
кризисной ситуации:
Квалифицируйте ссылки на все дочерние объекты переменные, особенно, если их имена
совпадают с названиями в других окнах (например: form1.df1).
Не используйте сомнительные объекты (например - QO) функции и DLL, особенно внешнего
и собственного происхождения. Если не использовать нельзя, основательно их протестируйте.
Проверьте собственные классы, если они есть, попробуйте упростить и использовать
стандартные объекты для эксперимента.
Проверьте работоспособность системы на стандартных примерах, входящих в комплект
CDT, и если на них не пойдет, то сообщите дополнительно, указав название примера.
Восстановите начальную версию и проверьте на ней Ваши программы. Если программы
пойдут, то делайте выводы сами.
Попробуйте Ваши программы на более старших версиях, например на CTD 1.5.1 (тестовую
версию можно скачать на сайте www.interface.ru).
Если программы пойдут, опять же делай те выводы, если не пойдут ищите ошибку в своей
программе.
Используйте известные Вам методы локализации ошибок, например с помощью корректного
комментирования. Локализуете ошибку вплоть до оператора или объекта. Замените или
измените его.
Если ошибка проявляется аналогично в разных программах, то попытайтесь найти общее
между этими программами. Если на некоторых программах, например стандартных, SAMPLах
не возникает, то сравните их.
Сохраненные Процедуры
Q: Необходимо использовать константу DATETIME_NULL в сохраненных
процедурах, но она не работает. Что происходит?
A: Имеется ошибка использования этой константы в SQLBase версии 6.X. В SQLBase 7.0.1.
это было исправлено.
Платформы
Q: Появляется сообщение об ошибке 'duplicate server ' при попытке
установить SQLBase на Novell.
A: NLM определил, что имеется другой сервер с таким же именем, которое определено
в SQL.INI файле сервера. ERROR.SQL файл определяет " Remedy:Verify that the server
being installed does not already exit on the network". Проверьте SQL.INI файл сервера,
в секции определения имени сервера. Измените имя. Убедитесь, что нет других серверов
в сети, использующих то же имя сервера.
Q: Появляется ошибка 182 при попытке сделать копию на Novell сервере.
Что это означает?
A: Сообщение об ошибке 182 указывает, что SQLBASE не может создать резервный файл.
Убедитесь, что имеется достаточное дисковое пространство для копирования, и каталог
существует. Также убедитесь, что копия делается 'ON SERVER' и правильно указан путь.
На пример: Server1:sysbackups.
Q: При закрытии SQLBASE на Novell, выдается сообщение "1.1.14 Module
did not release 1152 resources". В чем заключается проблема?
A: Это - временное событие. Ресурсы станут свободными через несколько минут.
Q: Как установить SQLBase в виде сервиса Windows’95 до версии 7?
A: Сервисом в Windows’95 – это обычные программы, запущенные в момент начальной загрузки.
Они выполнятся прежде, чем кто-либо зарегистрируется в системе. Чтобы настроить сервис,
запустите REGEDIT.EXE, и перейдите к разделу HKEY_LOCAL_MACHINE_SOFTWAREMicrosoftWindowsCurrentVersionRunservices.
Вставьте новое элемент и дайте ему уникальное имя, типа "SQLBASESERVER". Установите
значение этого элемента равным полному пути и имени файла сервера базы данных, например
"C:centuradbnt1sv.EXE". Чтобы выполнялся минимизированный запуск, перед указанием
пути необходимо вписать "start/m".
Q: Имеется ли возможность связаться с локальным SQLBase сервером
из 16- и 32-разрядных приложений?
A: Прежде чем появился SQLBase для Win’95, существовали локальные 16-разрядные SQLBase
сервера (DBWSERVR.EXE и DBWINDOW.EXE). Они были довольно просты в настройке и управлении.
С появлением SQLBase для Win’95 (DBNT1SV. EXE) возникло несколько соображений, которые
следует принять во внимание:
SQLBase для Win’95 - 32-разрядный сервер и может использовать большее количество
памяти, чем было возможно с 16-разрядными серверами.
16-разрядные программы могут соединяться с SQLBase для Win’95 через 16-разрядный
протокол WinSock TCP/IP.
SQLBase для Win’95 не запускается автоматически при обращении к базе данных из
16-разрядных приложений.
Конфигурирование протокола TCP/IP для Win’95 на машине, которая не имеет сетевых адаптеров,
может быть сложным и не совсем удачным делом. Шаги, перечисленные ниже разработаны для
оказания помощи при установке и конфигурировании TCP/IP для Win’95 так, чтобы к SQLBase
серверу для Win’95 можно было обращаться и 16- и 32-разрядным приложениям.
Если Вы уже установили TCP/IP на вашей машине с Windows’95 и он работает правильно, проделайте
несколько шагов для конфигурации SQLBase. Эти шаги подразумеваюьт, что Вы знакомы с SQLEDIT:
Используйте SQLEdit, чтобы сконфигурировать сервер для Win’95 ([dbnt1sv)], поддерживающий
Anonymous Pipe (SQLAPIPE.DLL) для 32-разрядных приложений и WinSock TCP/IP (SQLWSOCK.DLL)
для 16-разрядных приложений. Дополнительно, установите имя сервера, которое будет
выглядеть приблизительно так - "LOCAL32".
Используйте SQLEdit, чтобы сконфигурировать Win’95 клиента ([win32client)] для
связи по протоколу Anonymous Pipe.
Используйте SQLEdit, чтобы cконфигурировать Win-3.X клиента ([winclient)] для
связи по TCP/IP (WinSock). Дополнительно необходимо установить значение параметра
“serverpath” равным " LOCAL32, localhost/ * ".
Запустите SQLBase сервер для Win’95.
Теперь Вы готовы связываться с сервером из 16- или 32-разрядных версий SQLTalk
для Windows и других приложений.
Если у Вас не установлен TCP/IP протокол, проделуйте следующие шаги, чтобы сконфигурировать
TCP/IP для Win’95:
В диалоге установки сетевых ресурсов(Панель управления), нажмите кнопку Add. Отобразится
диалог Выбор Сетевых Компонент.
Выберите Сетевой Протокол, и нажмите кнопку Add. Появится диалог Выбора Сетевого
Протокола.
Выберите Microsoft и TCP/IP как Сетевой Протокол, и нажмите кнопку OK. Появится
диалог Выбор Устройства.
Если Вы не имеете сетевой карты, выберите Microsoft и Контроллер удаленного доступа
и нажимите кнопку OK. Диалог Выбор Сетевых Компонент снова отображается с установленными
сетевыми компонентами.
Если Вы выполняете установку для обеспечения связи с локальным 32-разрядным SQLBase,
важно обратить внимание, что единственными компонентами, которые требуются, являются
Контроллер удаленного доступа и TCP/IP. Чтобы удалить ненужные сетевые компоненты,
пометьте любой из них и нажмите кнопку Remove.
Как только Вы удовлетворитесь установленными сетевыми компонентами, нажмите кнопку
OK. На этом шаге может быть запрошен дистрибутив Windows 95. Как только все шаги
будут пройдены, отобразится диалог Изменения Параметров настройки Системы.
Нажмите кнопку Yes, для перезапуска компьютера с новыми настройками сетевых параметров.
После перезапуска компьютера, произведите настройку SQLBase и SQLTalk, как описано
выше.
Q: Для чего используется системная переменная SQLBASE?
A: Имеется системная переменная SQLBASE, которая указывает на каталог, в котором SQLBASE
должен искать файлы SQL.INI, ERROR.SQL, MESSAGE.SQL, COUNTRY.SQL, и MAIN.INI. Эта системная
переменная была создана для решения проблем пользователей, имеющих многочиленные копии
одних и тех же файлов на компьютере.
Чтобы определить GUPTA каталог, добавьте следующую строку в ваш AUTOEXEC.BAT:
SET SQLBASE = C:GUPTA
Если Вы устанавливаете системную переменную SQLBASE, просмотр будет проводиться только
в этом каталоге. В противном случае, порядок поиска для вышеупомянутых файлов следующий:
Текущий каталог
SQLBASE (текущего диска)
Корневая директория (текущего диска)
Каталоги, определенные системной переменной PATH
Каталоги определенные системной переменной DPATH (только для OS/2 2.0).
Вы можете устанавливать системную переменную SQLBASE, и на клиенте и на сервере.
Q: Имеются ли проблемы, при работе с Windows’98?
A: Centura Software Corporation сертифицирует 32-разрядные программы для использования
в Windows’98. Для получения дальнейшей информации посетите:
http://www.centurasoft.com/support/tech_info/bulletins/win98warn.html
Q: Почему не загружается SQLBase 7.X в Novell NetWare 4.11 (NDS),
хотя в Начальном Руководстве все описано?
A: Существуют ошибки в руководстве. Общий порядок загрузки должен быть:
load dsapi
load spxs
load dfd
load dll -------- это не учтено в начальном руководстве ----------
load tlispxds
load exfmgrnw
load dbnwsrvr
Согласно интерактивной документации p.12-9 пакет включает snapin файл для nwadmin
<CNWA16. DLL>. Этот файл отсутствует. В данный момент Вы не можете управлять SQLBase
в NWADMIN.
Интерактивная документация p. 12-2 не содержит полной конфигурации. Конфигурация
(кроме вышеупомянутой ошибки) правильна в Начальном Руководстве.
Дополнительная информация может быть найдена по следующему адресу:
http://www.centurasoft.com/support/tech_info/bulletins/ndsdocpr.html
Q: После аварийного отказа сети, SQLBase сервер выводит сообщение
"missing logfiles". Что необходимо делать?
A: Иногда происходит то, что последний журнал был в использовании базой данных в момент
аварийного отказа файлового сервера. В этом случае сервер может удалить журнал в момент
перезапуска. Восстановление журнала возможно с помощью с FILER.EXE.
Q: Клиенты Win’95 выдают ошибку "Cannot load sqlspxw.dll" хотя конфигурация
– такая-же как для Win3.1 клиентов. Имеются установленные клиенты Novell. Как можно устранить
ошибку?
A: См. http://www.centurasoft.com/support/tech_info/knowledge_base/sbsinfo/fileli~1.html
Всякий раз, когда Вы получаете сообщение "Cannot load library ...", это указывает,
что Вы или не можете загрузить указанную DLL, или один из ее компонент. Убедитесь,
что всего компоненты существуют.
Q: Требуется ли обновление клиентских компонент, если обновлена
версия сервера баз данных (5.x - 6.x)?
A: Рекомендуется сделать это, для обеспечения доступа к новым свойствам сервера баз
данных.
Q: Какой номер порта TCP/IP используется для SQLBase?
A: По умолчанию SQLBase использует 2155 порт, но использование ключевого слова LISTENPORT
в SQL.INI в разделе протокола клиента, может изменять его. В зависимости от версии
сервера настройки протокола должны быть подобны нижеуказанному:
[ <Servername>. < Tcp/ip протокол >]
Listenport = <portnumber>
Если Вы не используете значение portnumber по умолчанию, оно должно быть явно указано
в ключевом параметре SERVERPATH в SQL.INI клиента в разделе клиент. Настройки должны
выглядеть следующим образом:
[ Winclient.wsock | win32client. ws32]
Serverpath = <servername>. < Hostname | ip адрес >, <portnumber> / <servicename1>
| {*, servicenamen >}
Имеется пример, использования 32-разрядного сервера и 32-разрядного пользователя:
[ Dbntsrvr. ws32]
Listenport = 2500
[ Win32client. ws32]
Serverpath = server1,127. 0. 0. 1,2500/island, video, payroll
Q: Какие файлы копируются при установке локальной версии SQLBase
7.X?
A: Имеется документ, доступный по адресу:
http://www.centurasoft.com/support/tech_info/knowledge_base/sbsinfo/SQLBaseFileInfo.html
в котором присутствует список файлов, устанавливаемых с SQLBase DeskTop v7. 0.0, вместе
с их описаниями.
Инструментальные средства
SQLConsole
Q: При установке SQLConsole 6.0 не удается создать локальную базу
данных! Почему?
A: Вам необходимо создать локальную базу данных для SQLConsole, используя следующие
шаги:
Запуститься в режиме TOOLS ONLY.
В меню 'Options’ будут видны две опции, 'Create SQLConsole database' и 'Enable
automatic features’. Опция 'create' работает нестабильно. Выберите опцию 'enable'.
При этом зпустится локальный сервер и будет произведена попытка соединения с локальной
базой данных. Будет выдана ошибка, предупреждающая о том, что не возможно соединиться
с базой данных и предложением создавать локальную базу данных. Выберите ‘Да’.
SQLTalk
Q: Возможно ли иметь "динамические сценарии" для утилиты TLKNRTR
(старая версия DOS SQLTALK)?
A: TLKNRTR может быть запущен, как программа, управляемая с помощью пакетных файлов
DOS. Параметр INPUT=CommandFile передает в TLKNRTR набор команд, которые должны быть
выполнены. В качестве примера можно воспользоваться следующим кодом:
@ECHO OFF
rem set variables
Set BkpDir = \ machinevolbackupdir
Set DB = MyDB
Set DBSRV = MyServer
Set Auth = sysadm/password
rem create the commandfile
echo set server % DBSRV %; > tmp.cmd
echo connect % DB % % 1 Auth %; >> tmp.cmd
echo backup database from % DB % to % BkpDir % on server; >> tmp.cmd
echo release log; >> tmp.cmd
echo backup log from % DB % to % BkpDir % on server; >> tmp.cmd
echo exit; >> tmp.cmd
rem execute the commandfile
tlknrtr noconnect bat input = tmp.cmd output = tmp.log
del tmp.cmd
Q: Как можно запустить SqlTalk, чтобы выполнить сценарий автоматически?
A: Используйте следующие параметры:
SQLTALK BAT INPUT = <skriptfile.wts> OUTPUT < = Logfile >
SQL Windows
Q: При использовании SQLWindows 5.0 с Microsoft SQL Server
у меня возник вопрос. Используем SalTblPopulate для заполнения таблицы. Если количество
записей слишком большое, то появляются проблемы. Высвечивается 100 записей (по умолчанию),
остальные остаются пустыми. Если я ставлю 32753 (максимально допустимое количество загружаемых
строк), то программа вешается намертво. Вероятно, я неправильно работаю с таблицей. Как
это делать правильно?
A: Во-первых, нужно уточнить условия, при которых возникает эта ситуация, и обстоятельства
применения функции:
Используется ODBC или механизмы связи через SQL роутер для Microsoft SQL Server
и какие версии данных продуктов.
Каковы размеры оперативной памяти на Вашей ЭВМ (таблица храниться в ОП) и возможно
свободное пространство локального HDD.
Размер отдельной записи при выборке (FETCH) в таблицу.
Во-вторых, при реальной практике применения (просмотра) таблиц фактически невозможно
использовать такую большую выборку (Максимум 300 - 400 записей), так как пользователь
практически не в состоянии выполнять навигацию по таким выборкам и реально это не нужно,
только ему это на до корректно и доходчиво объяснить, учитывая его психологию. Мы обычно
выдаем порцию записей в таблицу (300 - 1000), на экран выводим общий размер выборки (
функция - SqlGetResultSetCount) и даем пользователю предупреждение о не полностью заполненной
таблице. В окне выборки представлены ее критерии, так что пользователь быстро привыкает
их задавать (например, первые буквы фамилии) для уменьшения объема выборки. Кроме того,
повышается оперативность его работы: он не ждет долго заполнения таблицы (как в QUEST,
кстати, попробуйте им обратится к Вашей таблице: может быть это все-таки Ваша ошибка)
В-третьих, при использовании SQLBase CENTURA/GUPTA разных версий совместно с SQLWindows
я такую ситуацию не встречал и не получал информацию от других программистов.
В-четвертых, проверьте согласование по синтаксису использования связующих (BIND) переменных
в запросе. В разных серверах и их версиях разные возможности и механизмы, так что могут
быть ограничения. К сожалению, не так детально, как бы хотелось, знаком с особенностями
Microsoft SQL Server.
В-пятых, возможно, вы используете триггеры или процедуры на сервере, для Microsoft
SQL Server это критично, если формирование выборки не завершено (стр. 1-21,22,4-6 электронной
книги ccon.pdf - книга Connecting Centura Objects to Databases из CTD 2.0 Matterhorn).
В-шестых, если вы используете ODBC, обратите внимание на настойки в секции
[odbcrtr] для Microsoft SQL Server, буферы и т.д.
Q: При использовании SQLWindows 5.0 с Microsoft SQL Server
в первом окне таблица, заполняемая с помощью функции SalTblPopulate и TBL_FillNormal,
т.е. все записи еще не прочитаны из базы и соединение остается открытым. Если в этот
момент выполнить другой запрос (любой) с другим Sql Handle, то появляется ошибка 20055
(Connection is busy with results for another hstmt). Похоже, это связано со свойством
DBPROP_MULTIPLECONNECTIONS MS SQL Server'а. Как решить эту проблему?
A: В документации (4-7, 4-19 электронной книги ccon.pdf - книга Connecting
Centura Objects to Databases из CTD 2.0 Matternhorn, я думаю и в более ранних версиях
документов это тоже есть - книги по Connection с другими СУБД) по этому поводу сказано:
(начало цитаты)
Microsoft SQL Server 6.x provides backend support for scrollable cursors (result
set cursors that scroll both backwards and forwards). Consequently, you cannot create
front end result sets (FERS) if you turn on result set mode.
You must turn on result set mode to have more than one result set open at the same
time. If result set mode is off, you must fetch all of the rows from one result set
before you can SELECT another result set. If you try to SELECT a result set before
fetching all the rows of a previously retrieved result set, you get the error:
[Microsoft][ODBC SQL Server Driver]Connection is busy with result for another hstmt
(Конец цитаты)
Таким образом, желательно для вашего случая включить режим выборки (You must turn
on result set mode). Как это делается, Вам необходимо уточнить в документации по Microsoft
SQL Server.
Quest
Q: При попытке запустить Quest не видно никаких кнопок, кроме "New"
и "Open". Как это устранить?
A: Quest ищет файл "QUEST.INI", который включает описания всех кнопок. Необходимо
повторно установить SQLWINDOWS/QUEST, чтобы получить правильные настройки. Либо можно
указать правильный путь "questdir" в файле WIN.INI в разделе [QUEST].
Centura Team Developer
Q: Почему при инсталляции CTD 1.5 не доступен компонент "Object Compiler"?
A: Object Compiler не был включен в поставку CTD 1.5, как сказано в сведениях к версии
1.5.1 "по причине нехватки времени". По этой причине в поставку не включены также Object
Nationalizer и Lotus Notes QuickObject. Эти компоненты включены в поставку CTD 1.5.1
Q: CTD 1.1.2: При использовании экранных таблиц с динамическими
(автоматическими) колонками, когда курсор уходит из отредактированной ячейки, таблица
не получает сообщение SAM_Validate, как было в SQLWindows.
A: Это ошибка CTD 1.1.2. Она исправлена в PTF и в версии 1.5.
Q: Может ли SQLWindows может работать и через 32-хразрядный ODBC?
A: К сожалению прямой ссылки, на документацию о совместном использовании SQLWindows
(я понимаю как 16-ти разрядную версию) ODBC32 я пока не нашел. Но, судя, по тому, как
работают 16-ти разрядные приложения с 32-ти разрядными, например QUEST и локальный
SQLBase 7.1 или ERWIN 2.6 c ним же, то на этот вопрос можно ответить отрицательно.
Для SQLWindows нужен 16-ти разрядный ODBC. Кроме того, из логики взаимодействия, конструирования
и передачи параметров в приложениях, следует, что без дополнительных "примочек" такое
взаимодействие невозможно.
Q: В программе Sqltalk не работает должным образом режим поиска
в скрипте текста по образцу. При первоначальном нажатии кнопки "Найти далее" выполняется
поиск образца. При повторном нажатии кнопки "Найти далее" поиск не осуществляется.
Повторный поиск выполняется успешно, если закрыть окно "Поиск" и заново открыть.
Можно ли исправить ситуацию? У нас:
- Sqltalk 7.0.1
- sqltne.dll 7.0.1 -PTF4
- sqlwntm.dll 7.0.1 -PTF4
- tlkc32.dll 7.0.1
A: У Вас, по всей видимости, используется библиотека - (tlkc32.dll 7.0.1) из версии
CTD 1.5.1, в которой действительно проявляется перечисленная ситуация. Размер и дата
создания этой библиотеки - 384 512 б и 01.03.1999. В предыдущей версии этой DLL, из
CTD 1.5 этой ошибки нет (Размер и дата создания старой библиотеки - 378 880 б и 03.06.1998.).
Не проявляется эта ошибка и в последующих версиях CTD, даже в BETA 1 Matternhorn. Рекомендуем
Вам вернуться к прежней версии этой библиотеки, пока не появиться новый PTF, в котором
данная ошибка ликвидирована.
При необходимости мы можем переслать Вам рабочую версию библиотеки tlkc32.dll по e-mail
или FTP.
Q: Несмотря на многие глюки, мы собираемся и дальше разрабатывать
на CTD. Кстати, Вы не знаете, почему пакет заплаток на CTD 1.5.1 (именно! дословно:"Centura
Team Developer 1.5.1 PTF1 SqlWindows32 PTF Download 4909") отказывается устанавливаться
на свою (1.5.1) версию, сообщая, что не находит CTD 1.5._0_? Мы-то его скачали в слабой
надежде что кое-какие ошибки среды вдруг да будут исправлены, но видно жить нам с ними
дальше. Самое печальное, то что CTD 2, имея какие-то не особо необходимые новшества,
наверно опять не устранит старые глюки. Например, на NT 4.0 sp4-5-6 (не на одной машине)
CTD версий 1.0-1.5-1.5.1 одинаково валится через раз - на третий после запуска приложения
в среде дизайнера, или при открытии новой копии дизайнера при вызове библиотеки из
модуля.
A: Во-первых, к сожалению, сам не устанавливал заплатки, поэтому ответить на
этот вопрос однозначно не могу, мы свяжемся со службой сопровождения CENTURA, и как
только появится ответ его Вам перешлем.
Однако уже в этом положении можно попробовать что-то сделать. Хотя, возможно вы уже
шли этим путем, осмелюсь предложить следующие варианты:
Тяжелый вариант. Попробуйте установить сначала CTD 1.5.0 (если конечно
версия доступна, есть смысл проверить и с совсем старой CB 1.02), затем на нее поставить
CTD 1.5.1. Только после этого поставить заплатку (PTF).
Вариант с реестром. На машине, где установлена CTD 1.5.0 сделайте экспорт
реестра для разделов связанных с CENTURA (лучше всего искать по каталогу, где сидит
CENTURA). Далее, обязательно предварительно сохранив собственный реестр, сделать
импорт разделов реестра, а затем снова попытаться поставить заплатку (можно, для
отдельного варианта, как и в первом случае, переустановить CTD 1.5.1).
Вариант с правкой реестра. Пройтись по реестру и вручную поправить разделы,
связанные с CENTURA. Основанием правки может быть распечатка реестра с другого компьютера,
где стоит CTD 1.5.0. Далее действия аналогичны.
Проверка ресурсов. Проверить наличие ресурсов памяти HDD, для установки
заплатки, и свободного места на системном диске.
INI. Может быть поискать ссылки на версию в INI файлах, сделать там временную
правку на 1.5.0, или в соответствии с INI другого компьютера, затем попробовать поставить
заплатку и вернуть состояние INI-файлов.
Во-вторых, вообще считаю использование заплаток на продукты не очень корректным действием,
так как система отлаживается в комплексе и ожидать от нее нормальной работы после такой
операции сомнительно, нужен полный релиз для новых версий.
В-третьих, полностью разделяю Ваше мнение о том, что не будете отказываться от
SQLWindows. Я рассматривал многое продукты для разработчиков информационных бизнес
систем и нахожу в SQLWindows неоспоримые преимущества. Даже с научных позиций такого
"пространственного" представления сложных программных образований, как OUTLINE, нет
нигде, кроме того такого, профессионально (но не сложного для восприятия и запоминания)
подобранного набора функций и возможностей, как в CENTURA/GUPTA, я не встречал в других
даже очень мощных, а поэтому "сложных" средствах разработки приложений, не буду их
перечислять.
В целом согласен, что превращение SQLWindows в супермощную систему (в том числе и
для WEB) может ее сгубить. Будущее SQLWindows в вылизывании глюков, что достижимо в
короткие сроки!
Connectivity
Основные
Q: При попытке вставить пустую строку, производится замена на пробел.
Это можно избежать?
A: Маршрутизатор базы данных Centura ведет себя следующим образом:
Client entry |
Oracle |
Informix |
MS SQLServer |
Sybase |
IBM DB2 |
Empty string(“”) |
NULL |
Space |
Space |
Space(constant)
NULL(bind var) |
Space |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
space |
Space |
Space |
Space |
Space |
Space |
STRING_Null |
NULL |
NULL |
NULL |
NULL |
NULL |
Чтобы избежать проблемы вставки пробела, добавьте ключевое слово "SetZeroLengthStringsToNull
= 1" в SQL.INI в секции [WinClient] и [Win32Client].
Q: Как посмотреть протокол работы SQLRouters?
A: В SQLWindows или CTD, Вы можете отслеживать работу маршрутизаторов, добавив строку
следующего вида log = <имя файла> в SQL.INI, в секции указанные в таблице:
SQLRouter Section 16-bit Section 32-bit
Sybase [winclient.sybw] [win32client.syb32]
Oracle [winclient.oraw] [win32client.ora32]
ODBC [winclient.odbw] [win32client.odb32]
Oracle
Q: При использовании внешнего result set выводится ошибка с номером
163 ("Result set not active"). Как этого избежать?
A: Это сообщение об ошибке обычно связано FRS*:* файлами, которые не удалены в случае
аварийного отказа. Прежде, чем запускать программу, изучите каталог TEMP (C:TEMP или
подобный) и удалите все файлы, начинающиеся с "FRS". Дополнительную информацию можно
получить по адресу:
http://www.centurasoft.com/support/tech_info/knowledge_base/ctdinfo/error163.html
Q: Как необходимо сконфигурировать подключение с Oracle для 16-разрядных
(SQLWindows) приложений?
A: Запустите SETUP.EXE из каталога "Window" CD Oracle, чтобы установить 16-разрядного
клиента. После этого запустите 16-разрядный NET*EASY, чтобы сконфигурировать псевдоним
базы данных, например.
Database Alias: MyDB
Protocol: TCP/IP
Host Name: 192.1.11.28
Database Instance: MyDB
Далее, запустите 16-разрядный SQLPlus (Oracle для Windows) чтобы проверить соединение
с базой данных, использующей псевдоним MyDB. Если связь не может быть установлена,
это - проблема установки Oracle.
Так-же запустите SQLTalk, чтобы связаться с тем же самым псевдонимом базы данных. Для
этого требуются правильные установки программного обеспечения для Oracle и следующих
секций в SQL.INI:
[ Winclient.dll]
Comdll = sqloraw
[ Oragtwy]
Remotedbname = MyDB, TNS:MYDB
Q: Требуется вставить/модифицировать данные в базу данных Oracle.
При этом выводится ошибка "ORA-01465 Invalid hex number". Что делается неправильно?
A: Возможно один из ваших столбцов в базе данных имеет тип "LONG ROW". Для работы
с таким типом данных необходимо произвести следующее преобразование SqlSetLongBindDatatype(nBindVarNumber,
nDatatype) между выражениями SqlPrepare() и SqlExecute().
Q: Для числовых значений в формате, отличном от US данные отображаются
неправильно, при выборке из базы данных Oracle. Как этого можно избежать?
A: Вы должны изменить параметры настройки для тысяч и десятичных разделителей на международный
формат. Необходимо выполнить следующий набор команд:
ALTER SESSION SET NLS_NUMERIC_CHARACTER = ‘.,’
Выполнив следующую команду, Вы можете изменить параметры установки дат:
ALTER SESSION SET NLS_DATE_FORMAT = ' YYYY-MM-DD-HH24. MI.SS'
Направление сортировки:
ALTER SESSION SET NLS_LANGUAGE = GERMAN.
Q: Как установить уровень оптимизатора?
A: Параметры настройки оптимизатора могут быть изменены с помощью команды:
ALTER SESSION SET OPTIMIZER_GOAL = <уровень>
Где уровень – это одно из следующих значений:
RULE |
Rule-based optimization(index) |
CHOOSE |
Cost-based optimization(index+amount of data+location of data) |
FIRST_ROW |
Cost-based optimization for the first rows of the result set |
ALL_ROWS |
Cost-based optimization for the entire result set |
Q: Является ли возможным просмотреть Execution Plan для SQL-запросов
Oracle?
A: Oracle отображает execution plan для объектов базы данных с помощью команды "EXPLAIN
PLAN". Чтобы воспользоваться этой командой необходимо убедиться, что таблица "PLAN_TABLE"
существует. Ее описание находится в файле UTLXPLAN.SQL:
CREATE TABLE PLAN_TABLE (
statement_id varchar2 (30),
timestamp date,
remarks varchar2 (80),
operation varchar2 (30,
options varchar2 (30),
object_node varchar2 (128),
object_owner varchar2 (30),
object_name varchar2 (30),
object_instance numeric,
object_type varchar2 (30),
optimizer varchar2 (255),
search_columns numeric,
id numeric,
parent_id numeric,
position numeric,
cost numeric,
cardinality numeric,
bytes numeric,
other_tag varchar2 (255),
other long);
Q: Как подключиться из SqlWindows к Oracle 8?
A: Используйте 16-битный SqlNet 2.3, поставляемый с Oracle 7.3. По умолчанию устанавливается
32-разрядный клиент для Windows’NT, 95 или 98. Чтобы установить 16-битный SqlNet, необходимо
войти в каталог Windows на CD Oracle и запустите 16-битный установщик.
Q: Почему при выполнении запроса, содержащего хранимые функции,
которые возвращают VARCHAR2 (VARCHAR), результаты не передаются в приложение?
A: Это связано с тем, что максимальная длина VARCHAR2 в ORACLE – 2000 символов, что
трактуется OraGtwy как LONG VARCHAR, даже если явно указать меньшую длину возвращаемого
значения (например, VARCHAR(80)), поэтому данные следует принимать в переменные (или
поля) типа Long String.
Q: Для вызова хранимой процедуры создана функция CTD; внутри нее
вызывается функция SqlPLSQLCommand(). Передача параметров в хранимую процедуру и из нее
осуществляется через параметры функции. Однако значения, возвращаемые процедурой в эти
параметры не попадают.
A:Для обмена данными с хранимой процедурой следует использовать локальные переменные,
а затем из них передавать значения в параметры.
Q: Что за раздел [ODBCrtr] в sql.ini? Насколько я понял, это
настройки роутера. Но в документации я по этому вопросу ничего не нашел. Хотелось бы
узнать о них по подробнее.
A: Короткий ответ:
Раздел ODBCrtr в sql.ini использовался в ранних версиях SQLBase для определения
удаленной (remotedbname) БД для QDBC взаимодействия. В настоящее время он
заменен на настройки в файле ODBC.INI. Смотрите соответствующие разделы документации
по SQLBASE Connection. Подробнее о старой версии раздела [ODBCrtr] в sql.ini можно
посмотреть в документации версии 5.2 (или 6.0) SQLBase Книга "SQLNetwork: Guide to
GUPTA Connectivity " стр. 3. 24. В версии 7.5 SQLBase этот раздел [ODBCrtr] может использоваться
для определения параметра buffrow (и других) для контроля за буферизацией
ODBC взаимодействия ( см. стр. 8-11, 4-8, 4-10 и др. электронной книги ccon.pdf - книга
Connecting Centura Objects to Databases из CTD 2.0 Matternhorn).
Возможный распространенный ответ:
Раздел ODBCrtr в sql.ini использовался в ранних версиях SQLBase для определения
удаленной (remotedbname) БД для QDBC взаимодействия. В документации версии
5.2 (или 6.0) SQLBase Книга "SQLNetwork: Guide to GUPTA Connectivity " на стр. 3. 24.
Сказано буквально следующее:
(начало цитаты)
ODBC remotedbname
Section [odbcrtr]
Syntax remotedbname=db_name, connect__string
Description db_name specifies the database. The name cannot be more
than 8 characters.
The connect _string contains one required value, the DSN, which is the
name of the data source as returned by SQLDataSources. This value must match the
DSN value defined in ODBC. INI.
The connect string can also contain a user name (UID) and password (PWD) for
Quest or SQLWindows login dialog boxes. User name and password can be defined
in three places: in ODBC. INI, in SQL. INI, and at runtime; each one of these
locations takes precedence over its predecessor (that is, a UID and PWD in SQL.
INI override any ODBC. INI entries). If no user name or password are specified
in files, you are prompted at runtime for the security information. Values in
the connect string may be separated by semi-colons (;).
For more information about ODBC. INI and the connect string, read your ODBC
driver manuals.
Example This example specifies a database called DEMO. It connects to
a data source called MYDB, which is defined in ODBC.INI with SYSADM/SYSADM as
the user name and password.
remotedbname=DEMO, DSN=MYDB;UID=SYSADM; PWD=SYSADM
(конец цитаты)
Не вдаваясь в детальный перевод, можно сказать, что информация об удаленной БД ODBC
дублировалась в нескольких местах: ODBC.INI и SQL.INI. Для последних версий SQLBase
эта неопределенность была преодолена. В документации на SQLBase 7.1 - 7.5 уже, хотя
и коротко сказано свежующее ( электронная книга Connecting Centura Objects to Databases
- ссоn.pdf, раздел Connect search order стр. 1-8):
(начало цитаты)
A slight variation applies to SQLRouter/ODBC and SQLRouter/Microsoft SQL Server. Instead
of searching the [odbcrtr] section of SQL.INI for a remotedbname
statement, the application tries to find an ODBC data source name in the ODBC.INI
file that matches the target database name. Otherwise, the processing is the same as
for all the other SQLRouters.
(конец цитаты)
Все настройки для удаленных БД на базе ODBC в частности для SQLRouter/ODBC и SQLRouter/Microsoft
SQL Server введены в файл настроек ODBC.INI (или в DDC.INI для последних версий CTD.
DDC database connectivity configuration). Нужно посмотреть соответствующие разделы
документации, связанные с настройкой драйверов ODBC на вашем компьютере. В версии 7.5
SQLBase этот раздел [ODBCrtr] может использоваться для определения параметра buffrow(и
других) для контроля за буферизацией ODBC взаимодействия ( см. стр. 8-11, 4-8,
4-10 и др. электронной книги ccon.pdf - книга Connecting Centura Objects to Databases
из CTD 2.0 Matternhorn). Кроме того, старый раздел поддерживался для коммуникаций в
OS/2 и роутеров ДОС dbxlocal, dbrouter и dbxcompbo.
Q: Проблема с работой CTD 1.5.1. под Oracle 8.1.5.
A: В Интернет на сайте www.centurasoft.com
есть такая информация. Хотя Ваша проблема, по-моему решена, т.к. новых звонков от Вас
не последовало, я все-таки решил Вам ее сообщить в первозданном виде. Может быть, она
будет полезна в дальнейшем.
Tech Alert
September 10, 1999
CTD 1.1.2 or 1.5.x and Oracle 8.1.5 ( Oracle 8i )
Description:
CTD Applications fail to connect to Oracle 8i (also called Oracle 8.1.5)
Solution:
There are actually two solutions to the problem.
You can install the Oracle NET8 client software from Oracle 8.0.5 and it will communicate
correctly with Oracle 8i. You can also use the SQL*Net 2.3 client software from Oracle
7.
-OR-
Use the Oracle 8i (8.1.5) client software and manually add the following entry into
the Registry at location:
HKEY_LOCAL_MACHINESOFTWAREORACLE
Add the following string value:
ORAOCI ORACLIENT8.DLL
and you will be able to successfully use the Oracle 8i (8.1.5) client software.
You will still
need to run the VIEW8.ORA and PLSVIEW8.ORA scripts, logged on as "SYS", in order
to use the Database Explorer with Oracle 8i.
Note: This information only applies to Centura 32-bit applications, not to SQLWindows
16-bit applications, because the Oracle 8i client software is exclusively 32-bit.
Microsoft SQLServer
Q: На некоторых машинах, с абсолютно идентичными DLL, SQL.INI
файлами и установкой ODBC, производится попытка установки связи. На некоторых машинах
выдается ошибка, на других подключение безаварийно. Как можно устранить эту проблему?
A: Эта ошибка связана с проблемой определения путей загрузки DLL. Необходимо исследовать,
как загружаются необходимые модули на машинах с нормальной свяью и сравнить со сбойными
машинами. Некоторые драйверы устанавливает ODBC Администратор(ODBC32. DLL). Это приводит
к несоответствию версий ODBC Engine.
Q: Как можно использовать "begin transaction" и "commit transaction"
в сохраненных процедурах для MS SQL Server (ver. 6.0 или 6.5)?
A: Если необходимо использовать "begin transaction" и "commit transaction" (или
"rollback transaction") в сохраненных процедурах для MS SQL Server(ver 6.0, или 6.5)
включите AUTOCOMMIT перед вызовом сохраненных процедур:
Call OdrPrepareProc(hSql, 'Call myproc ', ")
Call SqlSetParameter (hSql, DBP_AUTOCOMMIT, TRUE, ")
Call SqlExecute (hSql)
Call SqlSetParameter (hSql, DBP_AUTOCOMMIT, FALSE, ")
Если нет установки AUTOCOMMIT ON, Centura SQL/API неявно добавляет "begin tran"
прежде, чем вызывается любое DML утверждение и "commit tran" когда вызывается SqlImmediate('COMMIT’).
Процедура сообщит об ошибке возврата транзакции:
Create procedure myproc
AS
If @@ TRANCOUNT < > 0
begin
return -1 - - error
end
...
begin tran
-- make some DML here
.....
If <ERROR>
rollback tran
else
commit tran
Q: Как можно конкатенировать столбцы в утверждениях SELECT?
A: Использование ‘||’ не отрабатывается.
SQL Server использует знак '+' для конкатенации столбцов, как показано в следующем
примере:
SELECT colA + colB + colC FROM tableD INTO :sVar
JDBC
Q: Нет доступа к JDBC-драйверам для работы. Что неправильно?
A:
Убедитесь, что используется коммерческий выпуск JDBC драйвера а не файлы .class
от бета выпуска.
Переименуйте каталог установоки следующим образом: C:Centuracenturajavasqlbase
Чтобы зарегистрировать драйвер, необходимо использовать следующий способ включения:
"centura.java.sqlbase.SqlbaseDriver "
Чтобы проверить подключение JDBC, используйте утилиту JDBCTest, доступную на http://www.intersolv.com
ODBC
Q: При попытке доступа к SQLBase из MS Access выводится сообщение
"Table ‘TMP, % # MAU' alredy exist". Как этого избежать?
A: Детальная информация по этой теме доступна по адресу:
http://www.centurasoft.com/support/tech_info/bulletins/access~1.html
Q: Используется некоторое программное обеспечение для загрузки
данных в SQLBase с использованием ODBC, но при этом используются кавычки для описания
столбцов, и следовательно SQLBase не распознает их правильно. Имеется ли обходной путь?
A: При использовании приложений, которые создают SQL-запросы подобно "INSERT INTO
"INETLOG"("ClientHost", ..) ... " для вставки данных в SQLBase, существует проблема
в том, что кавычки в именах столбцов и таблиц не воспринимаются. Обходным вариантом
является следующий шаг. Необходимо создать таблицы и столбцы с кавычками в именах.
Например:
CREATE TABLE "INETLOG"("ClientHost" char (255), ...)
В SQLBASE.
Либо переименуйте уже существующие таблицы.
Q: Используется CTD/SQLWindows SQLRouter для ODBC. При этом ODBC
драйвер не перечислен в списке доступных драйверов. Что можно сделать?
A: Невозможно проверить все ODBC драйверы. Если драйвер совместим с ODBC 2.0, то
он должен работать. Если имеются трудности с типами данных, обратитесь к интерактивной
справке для получения информации о DCC.INI.
Q: Как я восстанвить информацию из системного каталога ODBC источника
данных?
A: Это может быть выполнено с помощью непосредственного подключения ODBC API. Либо
с помощью использования ODBCTESTX.OCX(свободно распространяемый ActiveX компонент),
который работает с ODBC API.
Q: При попытке соединяться с источником данных ODBC, появляется
ошибка 401 "Cannot connect to database". Как можно избежать этого?
A: Centura сохраняет информацию об ODBC в файле по имени GUPTA.INI. Это, как предполагается,
делает соединение с источником данных быстрее. Этот файл хранится в каталоге, который
содержит ODBC32.DLL. Рекомендуется удалить GUPTA.INI прежде, чем будет соединение
с ODBC источником данных. Это предотвратит ошибку, при правильно сконфигурированом
ODBC.
Q: Как можно обойти ошибку 1811 "File not found" при попытке соединения
с ODBC источником данных?
A: Centura сохраняет информацию об ODBC в файле по имени GUPTA.INI. Это, как предполагается,
делает соединение с источником данных быстрее. Этот файл хранится в каталоге, который
содержит ODBC32.DLL. Рекомендуется удалить GUPTA.INI прежде, чем будет соединение
с ODBC источником данных. Это предотвратит ошибку, при правильно сконфигурированом
ODBC.
Q: При замене ODBC источника данных, для использования другой базы
данных Centura хранит соединение со старой базой данных. Как это устранить?
A: Centura сохраняет информацию об ODBC в файле по имени GUPTA.INI. Это, как предполагается,
делает соединение с источником данных быстрее. Этот файл хранится в каталоге, который
содержит ODBC32.DLL. Рекомендуется удалить GUPTA.INI прежде, чем будет соединение
с ODBC источником данных. Это предотвратит ошибку, при правильно сконфигурированом
ODBC.
Q: Драйвер не поддерживает псевдонимы столбцов. Возможно ли решить
эту проблему?
A: Для версии 6. 1. x утверждение, подобное 'SELECT NAME AS CUSTNAME FROM TABLE'
всегда возвращает первоначальное имя столбца. Хуже, когда вычисляемые столбцы, агрегаты
и т.д. в запросе не возвращают заголовки вообще. SQLBASE 7.0.1 имеет новый ODBC драйвер,
версии 3.01.0006. Используя этот драйвер можно прекрасно выполнять запросы типа:
SELECT COMPANY_NAME AS NAME FROM COMPANY;
SELECT INVOICE_NO, SYM(ITEM_PRICE) AS X, AVG(ITEM_PRICE) AS Y FROM INVOICE_ITEM
GROUP BY 1;
SELECT @LEFT(COMPANY_NAME, 4) AS SPLITNAME FROM COMPANY;
Q: Quest при обращении к базе дает ошибку Invalid SET parameter.
А WinTalk вообще не видит базу по ODBC.
А: Нужно проверить настройки драйверов ODBC Quest, совершенно точно эта программа
(Quest) работает с ODBC наборами. Возможно, потребуется переустановить драйверы,
а затем определить настройки соответствующих наборов данных. С WinTalk, как с промежуточным
продуктом, были проблемы с доступом в БД и, в частности, ODBC наборами. Используйте
SQLTalk с обновленными DLL и все возможности, даже LOAD и UNLOAD, будут доступны.
Из SQLWindows доступ к ODBC наборам также работает нормально (при правильной настройке
драйверов).
Interface Ltd.
Tel: +7 (095) 135-5500, 135-2519
E-mail: mail@interface.ru
http://www.interface.ru
Ваши замечания и предложения направляйте по адресу: webmaster@interface.ru
|