A: На сайтах http://www.centurasoft.com и http://www.interface.ru
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()" так
же может быть интересным
A: Проблема 2000 полностью решена для следующих версий самых популярных программных продуктов:
Q: Перед нами стоит задача написать систему производственной себестоимости (СПС). На данный момент мы пытаемся выбрать подходящее программное обеспечение для этой задачи.
A: Короткий ответ:
Ответ на поставленный вопрос зависит от целого ряда факторов и условий, уточнение которых поможет выбрать подходящее программное обеспечение для поставленной задачи. По грубой оценке задачи можно предложить проверенные на практике многих разработчиков средства: для разработчиков Centura Team Developer (1.2 - 2.0) - SQLWindows/SQLWindows32, а для хранения данных SQLBase 6.1/7.5.
Возможный распространенный ответ:
Ответ на поставленный вопрос зависит от целого ряда факторов и условий, из которых можно выделить следующие главные:
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. Отмечу, что новые версии не менее надежны и обладают многими хорошими дополнительными возможностями.
A: Решение заключается в том, что внешние ключи должны быть установлены после того, как будет создан индекс на ссылочную колонку в каждой дочерней таблице. Для каждой таблицы с внешним ключом:
A: Похоже на то, что индекс, который был установлен при создании первичного ключа,
был удален. Удалите первичный ключ, создайте индекс, и заново создайте первичный ключ.
Это должно решить проблему.
A: Для SQLBase версии 6. x.x можно производить модификацию с использованием SUBSELECT.
В SQLBase версии 7.0 впервые представлена функция, выполняющая подобные действия. Имеется
превосходный пример для SQLWindows, показывающий данную методику, доступный на сайте
http://www.centurasoft.com/support/tech_info/knowledge_base/sbsinfo/t1tot2.zip
A: Эта ошибка происходит, когда несколько программ пытаются установить блокировки на одной и той же странице в базе данных, при этом уже имеется блокировка на странице от других приложений. Блокировки устанавливаются, когда происходит обращение к данным, и зависят от уровня изоляции.
Например:
Методика уменьшения подобных проблем следующая.
В программах необходимо откорректировать порядок insert/update/delete для устранения
ситуаций одновременной блокировки.
A: Такой номер сообщения об ошибке недопустим. Однако существует правило для определения
реального номера ошибки. Для ошибок, чей номер выше 60000, необходимо использовать
формулу пересчета “(65536 - [Номер ошибки]) * (-1)”. В данном случае получаем (65536
- 63731) * (-1) = -1805 “TimeOut”.
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
A: Отрицательная ошибка означает, что сервер базы данных произвел RollBack. В SQLBase
RollBack может быть ограничен последней компилированной командой или всей транзакцией.
Положительная ошибка означает, что транзакция все еще активна (то есть программа может
выбрать, выполнять COMMIT либо RollBack).
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: Выход из создавшегося положения есть, и чаще всего не один!
Ну а если всерьез, то попробуйте следующие действия, возможно, они выведут Вас из кризисной ситуации:
A: Имеется ошибка использования этой константы в SQLBase версии 6.X. В SQLBase 7.0.1.
это было исправлено.
A: NLM определил, что имеется другой сервер с таким же именем, которое определено
в SQL.INI файле сервера. ERROR.SQL файл определяет " Remedy:Verify that the server
being installed does not already exit on the network". Проверьте SQL.INI файл сервера,
в секции определения имени сервера. Измените имя. Убедитесь, что нет других серверов
в сети, использующих то же имя сервера.
A: Сообщение об ошибке 182 указывает, что SQLBASE не может создать резервный файл.
Убедитесь, что имеется достаточное дисковое пространство для копирования, и каталог
существует. Также убедитесь, что копия делается 'ON SERVER' и правильно указан путь.
На пример: Server1:sys\backups.
A: Это - временное событие. Ресурсы станут свободными через несколько минут.
A: Сервисом в Windows’95 – это обычные программы, запущенные в момент начальной загрузки.
Они выполнятся прежде, чем кто-либо зарегистрируется в системе. Чтобы настроить сервис,
запустите REGEDIT.EXE, и перейдите к разделу HKEY_LOCAL_MACHINE_SOFTWARE\Microsoft\Windows\CurrentVersion\Runservices.
Вставьте новое элемент и дайте ему уникальное имя, типа "SQLBASESERVER". Установите
значение этого элемента равным полному пути и имени файла сервера базы данных, например
"C:\centura\dbnt1sv.EXE". Чтобы выполнялся минимизированный запуск, перед указанием
пути необходимо вписать "start/m".
A: Прежде чем появился SQLBase для Win’95, существовали локальные 16-разрядные SQLBase сервера (DBWSERVR.EXE и DBWINDOW.EXE). Они были довольно просты в настройке и управлении. С появлением SQLBase для Win’95 (DBNT1SV. EXE) возникло несколько соображений, которые следует принять во внимание:
A: Имеется системная переменная SQLBASE, которая указывает на каталог, в котором SQLBASE
должен искать файлы SQL.INI, ERROR.SQL, MESSAGE.SQL, COUNTRY.SQL, и MAIN.INI. Эта системная
переменная была создана для решения проблем пользователей, имеющих многочиленные копии
одних и тех же файлов на компьютере.
Чтобы определить \GUPTA каталог, добавьте следующую строку в ваш AUTOEXEC.BAT:
SET SQLBASE = C:\GUPTA
Если Вы устанавливаете системную переменную SQLBASE, просмотр будет проводиться только в этом каталоге. В противном случае, порядок поиска для вышеупомянутых файлов следующий:
A: Centura Software Corporation сертифицирует 32-разрядные программы для использования
в Windows’98. Для получения дальнейшей информации посетите:
http://www.centurasoft.com/support/tech_info/bulletins/win98warn.html
A: Существуют ошибки в руководстве. Общий порядок загрузки должен быть:
load dsapi
load spxs
load dfd
load dll -------- это не учтено в начальном руководстве ----------
load tlispxds
load exfmgrnw
load dbnwsrvr
A: Иногда происходит то, что последний журнал был в использовании базой данных в момент
аварийного отказа файлового сервера. В этом случае сервер может удалить журнал в момент
перезапуска. Восстановление журнала возможно с помощью с FILER.EXE.
A: См. http://www.centurasoft.com/support/tech_info/knowledge_base/sbsinfo/fileli~1.html
Всякий раз, когда Вы получаете сообщение "Cannot load library ...", это указывает,
что Вы или не можете загрузить указанную DLL, или один из ее компонент. Убедитесь,
что всего компоненты существуют.
A: Рекомендуется сделать это, для обеспечения доступа к новым свойствам сервера баз
данных.
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
A: Имеется документ, доступный по адресу:
http://www.centurasoft.com/support/tech_info/knowledge_base/sbsinfo/SQLBaseFileInfo.html
в котором присутствует список файлов, устанавливаемых с SQLBase DeskTop v7. 0.0, вместе
с их описаниями.
A: Вам необходимо создать локальную базу данных для SQLConsole, используя следующие шаги:
A: TLKNRTR может быть запущен, как программа, управляемая с помощью пакетных файлов DOS. Параметр INPUT=CommandFile передает в TLKNRTR набор команд, которые должны быть выполнены. В качестве примера можно воспользоваться следующим кодом:
@ECHO OFF
rem set variables
Set BkpDir = \\ machine\vol\backupdir
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
A: Используйте следующие параметры:
SQLTALK BAT INPUT = <skriptfile.wts> OUTPUT < = Logfile >
A: Во-первых, нужно уточнить условия, при которых возникает эта ситуация, и обстоятельства применения функции:
В-третьих, при использовании 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.
A: Quest ищет файл "QUEST.INI", который включает описания всех кнопок. Необходимо
повторно установить SQLWINDOWS/QUEST, чтобы получить правильные настройки. Либо можно
указать правильный путь "questdir" в файле WIN.INI в разделе [QUEST].
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, и как только появится ответ его Вам перешлем.
Однако уже в этом положении можно попробовать что-то сделать. Хотя, возможно вы уже шли этим путем, осмелюсь предложить следующие варианты:
В-третьих, полностью разделяю Ваше мнение о том, что не будете отказываться от SQLWindows. Я рассматривал многое продукты для разработчиков информационных бизнес систем и нахожу в SQLWindows неоспоримые преимущества. Даже с научных позиций такого "пространственного" представления сложных программных образований, как OUTLINE, нет нигде, кроме того такого, профессионально (но не сложного для восприятия и запоминания) подобранного набора функций и возможностей, как в CENTURA/GUPTA, я не встречал в других даже очень мощных, а поэтому "сложных" средствах разработки приложений, не буду их перечислять.
В целом согласен, что превращение SQLWindows в супермощную систему (в том числе и для WEB) может ее сгубить. Будущее SQLWindows в вылизывании глюков, что достижимо в короткие сроки!
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 |
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]
A: Это сообщение об ошибке обычно связано FRS*:* файлами, которые не удалены в случае
аварийного отказа. Прежде, чем запускать программу, изучите каталог TEMP (C:\TEMP или
подобный) и удалите все файлы, начинающиеся с "FRS". Дополнительную информацию можно
получить по адресу:
http://www.centurasoft.com/support/tech_info/knowledge_base/ctdinfo/error163.html
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
A: Возможно один из ваших столбцов в базе данных имеет тип "LONG ROW". Для работы
с таким типом данных необходимо произвести следующее преобразование SqlSetLongBindDatatype(nBindVarNumber,
nDatatype) между выражениями SqlPrepare() и SqlExecute().
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.
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 |
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);
A: Используйте 16-битный SqlNet 2.3, поставляемый с Oracle 7.3. По умолчанию устанавливается
32-разрядный клиент для Windows’NT, 95 или 98. Чтобы установить 16-битный SqlNet, необходимо
войти в каталог Windows на CD Oracle и запустите 16-битный установщик.
A: Это связано с тем, что максимальная длина VARCHAR2 в ORACLE – 2000 символов, что
трактуется OraGtwy как LONG VARCHAR, даже если явно указать меньшую длину возвращаемого
значения (например, VARCHAR(80)), поэтому данные следует принимать в переменные (или
поля) типа Long String.
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 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.
Не вдаваясь в детальный перевод, можно сказать, что информация об удаленной БД 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_MACHINE\SOFTWARE\ORACLE\
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.
A: Эта ошибка связана с проблемой определения путей загрузки DLL. Необходимо исследовать,
как загружаются необходимые модули на машинах с нормальной свяью и сравнить со сбойными
машинами. Некоторые драйверы устанавливает ODBC Администратор(ODBC32. DLL). Это приводит
к несоответствию версий ODBC Engine.
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
A: Использование ‘||’ не отрабатывается.
SQL Server использует знак '+' для конкатенации столбцов, как показано в следующем
примере:
SELECT colA + colB + colC FROM tableD INTO :sVar
A:
A: Детальная информация по этой теме доступна по адресу:
http://www.centurasoft.com/support/tech_info/bulletins/access~1.html
A: При использовании приложений, которые создают SQL-запросы подобно "INSERT INTO
"INETLOG"("ClientHost", ..) ... " для вставки данных в SQLBase, существует проблема
в том, что кавычки в именах столбцов и таблиц не воспринимаются. Обходным вариантом
является следующий шаг. Необходимо создать таблицы и столбцы с кавычками в именах.
Например:
CREATE TABLE "INETLOG"("ClientHost" char (255), ...)
В SQLBASE.
Либо переименуйте уже существующие таблицы.
A: Невозможно проверить все ODBC драйверы. Если драйвер совместим с ODBC 2.0, то
он должен работать. Если имеются трудности с типами данных, обратитесь к интерактивной
справке для получения информации о DCC.INI.
A: Это может быть выполнено с помощью непосредственного подключения ODBC API. Либо
с помощью использования ODBCTESTX.OCX(свободно распространяемый ActiveX компонент),
который работает с ODBC API.
A: Centura сохраняет информацию об ODBC в файле по имени GUPTA.INI. Это, как предполагается,
делает соединение с источником данных быстрее. Этот файл хранится в каталоге, который
содержит ODBC32.DLL. Рекомендуется удалить GUPTA.INI прежде, чем будет соединение
с ODBC источником данных. Это предотвратит ошибку, при правильно сконфигурированом
ODBC.
A: Centura сохраняет информацию об ODBC в файле по имени GUPTA.INI. Это, как предполагается,
делает соединение с источником данных быстрее. Этот файл хранится в каталоге, который
содержит ODBC32.DLL. Рекомендуется удалить GUPTA.INI прежде, чем будет соединение
с ODBC источником данных. Это предотвратит ошибку, при правильно сконфигурированом
ODBC.
A: Centura сохраняет информацию об ODBC в файле по имени GUPTA.INI. Это, как предполагается,
делает соединение с источником данных быстрее. Этот файл хранится в каталоге, который
содержит ODBC32.DLL. Рекомендуется удалить GUPTA.INI прежде, чем будет соединение
с ODBC источником данных. Это предотвратит ошибку, при правильно сконфигурированом
ODBC.
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 наборам также работает нормально (при правильной настройке
драйверов).