Проблемы с базами данных

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


  1. Убедиться, что в окне среды разработки открыто окно вывода событий: Вид > Панели Инструментов > Окно вывода событий (View > Toolbars > Output).


  1. Нажать правой кнопкой в окне вывода событий (обычно оно расположено в правом нижнем углу окна среды разработки) и из появившегося меню выбрать пункт «Настройки» (Settings).



  1. В диалоге настроек протокола активировать опцию «Сообщения баз данных» (Database Messages).



Активация этой опции приведёт к выводу не экран сообщений ошибок, связанных с процессами базы данных.



ОБЩИЕ ВОПРОСЫ


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


Database: Error: Error to add new register[CMD_ADD].

База данных: Ошибка: Ошибка при добавлении новой строки [CMD_ADD].


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


Вопрос: При попытке подключиться к серверу базы данных MySQL, я получаю сообщение:


Object is not set to an instance of an object.

Объект не имеет экземпляра.


Ответ: Ошибка возникает при наличии условий:

Для решения этой проблемы нужно проверить наличие используемой таблицы, а также версию используемого сервера БД.


Вопрос: Почему интерфейс баз данных автоматически закрывает некоторые соединения?


Ответ: По умолчанию, интерфейс баз данных может оперировать максимум 1000 соединений. Как только этот максимум достигнут, самые долгие соединения автоматически закрываются, чтобы позволить новым соединениям выполнить своё предназначение. Окно вывода событий комментирует при этом, какое соединение было закрыто, и какая выполненная команда была последней.


Можно увеличить максимальное число соединений, изменив файл приложения следующим образом:


[StDB]

MaxConnections=number_of_connections


Однако стоит помнить, что увеличение соединений с базой снизит производительность приложения.


Вопрос: Я создал строку соединения с помощью окна Свойств связи с данными. Когда я нажимаю кнопку «Тестировать» (Test), появляется сообщение «Тест пройден» (Test succeeded). Но когда я запускаю приложение, интерфейс баз данных сообщает об ошибке, и отказывает в сохранении данных.


Ответ: Окно Свойств связи с данными использует интерфейс OLE DB. Интерфейс взаимодействие IWS и баз данных проходит через ADO.NET. Поэтому на Вашей машине может быть установлен поставщик OLE DB, и отсутствовать ADO.NET. Также возможна такая ситуация, что используемый Вами поставщик ADO.NET не включён в файл StADOSvr.ini. Пожалуйста, обратитесь в раздел Шлюз баз данных среды для получения более подробной информации о включении поставщика в .ini файл.


Вопрос: Почему при обновлении одной строки в объекте Таблица, происходит обновления нескольких строк в связанной базе данных?


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


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


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


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


Ответ: Такая ситуация может возникнуть в случае отсутствия платформы .Net Framework на CE устройстве или отсутствия используемого Вами поставщика базы данных. Попытайтесь использовать удалённый шлюз базы (Соединение с базой через удалённого поставщика).


Вопрос: Почему при попытке подключения к базе я получаю сообщение


Error to create connection class

Ошибка при создании класса соединения        ?


Ответ: На Вашей машине отсутствует поставщик, который Вы пытаетесь использовать. Это сообщение обычно дополняется именем поставщика; например, если Вы пытаетесь использовать Sybase, к сообщению добавляется [iAnywhere.Data.AsaClient.AsaConnection]. Поставщиком в этом случае является iAnywhere.Data.AsaClient. Проверить наличие установленного поставщика можно, просмотрев Панель управления > Администрирование > Microsoft .Net Framework x.x Configuration. Поставщик должен находиться в списке сборочного КЭШа.


Вопрос: Что делать, если на машине есть сборочный кэш поставщика (обычно .dll файл), но он не отображается в списке?


Ответ: Если сборка обладает жестким именем, то можно зарегистрировать её в КЭШе, используя программу gcautil. Или скопировать сборку в ту же папку, что и StADOSvr.exe (обычно, это папка […]\InduSoft Web Studio v6.1\Bin).


Вопрос: Я не могу получить доступ к таблице базы из связанно объекта Таблица в том случае, если присутствует какое-то условие выборки. Если условие выборки отсутствует, то всё работает нормально. Почему такое происходит?


Ответ: Вам следует проверить пункты:


  1. Проделать шаги, описанные в самом начале раздела и внимательно прочитать сообщения об ошибках. Эти сообщения могут подсказать, где допущена ошибка, например, указание неправильного имени столбца, или неверного формата данных.


  1. Некоторые базы данных начинают некорректно работать, если в качестве имён столбцов использованы служебные слова. Поэтому следует избегать использования таких имён, как Time, Date, Numeric и т.д.


  1. Если имена столбцов начинаются со слов AND или OR (например, ORange), следует заключить их в квадратные скобки: [ORange].


  1. Если вы используете SQL Server CE, могут возникать проблемы при обработке запросов по строковым столбцам. Было выяснено, что фильтры выборок не обрабатывают данные типа NCHAR. Однако они работают, если определить тип этих данных как NVARCHAR(<Number>). Попытайтесь создать новую таблицу с теми же данными, но другим типом, например:


CREATE TABLE Table1 (Name NVARCHAR(128), Age Numeric, Sex NVARCHAR(1))



ORACLE


Вопрос: При потере соединения с базой Oracle, оно не восстановилось. При этом я получил такое сообщение


Database: Error: ORA-03114: not connected to ORACLE


Это ошибка интерфейса баз данных IWS?


Ответ: У .Net поставщика Oracle могут возникать ошибки управления пула соединений. Вам нужно установить QFE 830173. Более подробную информацию можно найти по ссылке http://support.microsoft.com/default.aspx?scid=kb;en-us;830173.


Вопрос: Почему при попытке получения доступа к базе, я получаю сообщение


ORA-00162: external dbid length 19 is greater than maximum (16)        ?


Ответ: На момент написания этого документа, существовала некая особенность .Net поставщика Oracle: Server Name (SERVER/TNS) имя сервера не могло превышать 16 символов. В целях устранения этой проблемы нужно сократить имя сервера. Для этого можно изменить файл \WINDOWS\system32\drivers\etc\hosts, добавив в него экземпляр с менее длинным серверным именем. К примеру, имя сервера 192.168.89.99 состоит из 13 символов, его можно уменьшить до 3 символов, добавив в указанный файл строку:


192.168.89.98  ora


Теперь Server Name будет выглядеть как ORA/TNS вместо 192.168.89.98/TNS.



MYSQL


Вопрос: При попытке доступа к базе данных с локальной машины, все работает нормально, но при переносе приложения на удалённую машину появляется сообщение с отказом в доступе.


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


Вопрос: Почему, когда я синхронизирую удалённую и локальную MySQL базы данных или использую резервирование приложения, открытое соединение с интерфейсом ADO.NET никогда не закрывается?


Ответ: Нужно открыть диалог настроек баз данных и дезактивировать опцию «Создавать автоматически» (Automatically create).



SYBASE


Вопрос: Я задавал настройки базы Sybase с помощью кнопки загрузки. При нажатии кнопки тестирования, оно проходило удачно, но при запуске приложения получал сообщение


Database: Error: Parse error: DSN 'MyDatabase' does not exist.


В чём ошибка?


Ответ: Для получения информации см. раздел Приложение F Sybase.


Вопрос: Почему при потыке подключения к базе Sybase, я получаю сообщение ошибки


Error to create connection class [iAnywhere.Data.AsaClient.AsaConnection]        ?


Ответ: На Вашем компьютере отсутствует поставщик ADO.NET. Программа установки базы данных имеет в наличии опцию по установке поставщика. Необходимо вернуть к установке базы и убедиться, что эта опция была выбрана.



SQL SERVER CE


Вопрос: Почему при попытке получения доступа к базе SQL Server CE, я получаю от шлюза следующее сообщение:


TypeLoad failure


Ответ: Такое сообщение обычно появляется при отсутствии установленного на CE устройстве .NET поставщика SQL Server CE.


Вопрос: Из-за чего может возникнуть сообщение ошибки:


There is a file sharing violation. A different process might be using the file?


Ответ: В данный момент времени работает ещё одна программа, использующая ту же SQL Server CE базу. К примеру, такая ситуация может сложиться при использовании в текущий момент времени программу настройки SQL Server CE.


Created with the Freeware Edition of HelpNDoc: Full featured multi-format Help generator