Ошибка Stimulsoft.Report.OracleClient

Обсуждение Stimulsoft Reports.NET
Alexandr
Сообщения: 15
Зарегистрирован: 23 июл 2008, 10:31

Ошибка Stimulsoft.Report.OracleClient

Сообщение Alexandr »

Здравствуйте.
Рассматривается вопрос приобретения вашего продукта.
Скачал демо-версию, скачал с форума сборку Stimulsoft.Report.OracleClient (ссылка http://www.stimulsoft.com/ru/Downloads/ ... tabase.zip битая)
Все это подключил, запустил, создал отчет.
Пишу вложенный запрос:
SELECT u.*, g.* FROM users u, (SELECT * FROM groups) g

Нажимаю кнопку "Получить все колонки"
Вылетает ошибка, колонки не создаются:
{"Syntax Error: Expecting identifier or quoted identifier."}
StackTrace:
at System.Data.OracleClient.DbSqlParser.Parse2(String statementText)
at System.Data.OracleClient.OracleDataReader.FillSchemaTable(DataTable schemaTable)
at System.Data.OracleClient.OracleDataReader.GetSchemaTable()
at System.Data.ProviderBase.DataReaderContainer.GetSchemaTable()
at System.Data.ProviderBase.SchemaMapping..ctor(DataAdapter adapter, DataSet dataset, DataTable datatable, DataReaderContainer dataReader, Boolean keyInfo, SchemaType schemaType, String sourceTableName, Boolean gettingData, DataColumn parentChapterColumn, Object parentChapterValue)
at System.Data.Common.DataAdapter.FillSchemaFromReader(DataSet dataset, DataTable datatable, SchemaType schemaType, String srcTable, IDataReader dataReader)
at System.Data.Common.DataAdapter.FillSchema(DataTable dataTable, SchemaType schemaType, IDataReader dataReader)
at System.Data.Common.DbDataAdapter.FillSchemaInternal(DataSet dataset, DataTable datatable, SchemaType schemaType, IDbCommand command, String srcTable, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillSchema(DataTable dataTable, SchemaType schemaType, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillSchema(DataTable dataTable, SchemaType schemaType)
at Stimulsoft.Report.Dictionary.StiOracleAdapterService.GetColumnsFromData(StiData data, StiDataSource dataSource) in ..\Stimulsoft.Report.OracleClient\StiOracleAdapterService.cs:line 91
at Stimulsoft.Report.Dictionary.Design.StiDataStoreSourceEditForm.tbRetrieveColumns_Click(Object sender, EventArgs e)

Если вызываю построитель запросов, то опять вываливается ошибка:
{"ORA-00942: таблица или представление пользователя не существует\n"}
StackTrace:
at System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc)
at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals)
at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, ArrayList& resultParameterOrdinals)
at System.Data.OracleClient.OracleCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.OracleClient.OracleCommand.ExecuteReader()
at Stimulsoft.Database.StiOracleMetadataProvider.PrepareSQLDatasetInternal(String sql, Boolean schemaOnly) in ..\Stimulsoft.Report.OracleClient\StiOracleMetadataProvider.cs:line 195
at Stimulsoft.Database.BaseMetadataProvider.ExecSQL(String sql, Boolean schemaOnly)
at Stimulsoft.Database.BaseSyntaxProvider.IsTableExists(String ATableName, BaseMetadataProvider AMetadataProvider)

но построитель запросов "взлетает" и запрос выполняется нормально.

В чем может быть проблема?
(Где скачать нормальную сборку Stimulsoft.Report.OracleClient?)

Спасибо.
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Ошибка Stimulsoft.Report.OracleClient

Сообщение Edward »

Здравствуйте.

Скачать Oracle-адаптер можно со странички Downloads:

http://www.stimulsoft.com/Downloads.aspx

Ссылка с форума действительно не работает. Исправлено.

Что касается проблемы извлечения колонок из запросов с подзапросами, то она действительно есть. Решить её пока не удастся, доступно исправление только для .Net1.1:
http://support.microsoft.com/default.as ... -us;892464

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

Для Вашего случая это такая последовательность действий:
SELECT * FROM users
Нажимаете 'Retrieve Columns'
SELECT * FROM groups
Нажимаете 'Retrieve Columns'
И записываете необходимый текст запроса: SELECT u.*, g.* FROM users u, (SELECT * FROM groups) g

Немного неудобно, но другого решения для получения всех колонок, когда есть подзапросы, пока нет. Это все равно быстрее, чем забивать вручную :)

Если у Вас есть идеи, как решить проблему, будем признательны.

Спасибо.
Alexandr
Сообщения: 15
Зарегистрирован: 23 июл 2008, 10:31

Ошибка Stimulsoft.Report.OracleClient

Сообщение Alexandr »

Здравствуйте.

Спасибо, ссылка работает.

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

begin .GetNewMessages( :user_id, :cnt); end;

Данная процедура с параметрами (in user_id, out cnt )

Эти параметры привязаны к переменным (в поле "выражение" проставил имя переменной (объявил в словаре) без всяких дополнительных знаков), для переменных в словаре поставил значения по умолчанию.

При нажатии на кнопку "Получить все колонки" вылетает сообщение:
---------------------------

---------------------------
ORA-01008: не все переменные привязаны

---------------------------
OK
---------------------------

SQL- монитор (програмулина для перехвата запросов) выдает следующее:

begin .GetNewMessages( :user_id, :cnt); end;
Runtime error occurred: 1008 (ORA-01008: не все переменные привязаны)

а должен (отображается при нажатии на "Выполнить запрос"):
begin .GetNewMessages( :user_id, :cnt); end;
:cnt = 0
:user_id = 0

т.е. в переменную, которую я создал для передачи в качестве OUT параметра, не подхватывается значение по умолчанию, либо я что то не так сделал.
Как быть, где ошибка?
Alexandr
Сообщения: 15
Зарегистрирован: 23 июл 2008, 10:31

Ошибка Stimulsoft.Report.OracleClient

Сообщение Alexandr »

И еще один вопрос, в качестве OUT параметра может быть курсор (в параметрах источника данных такой тип есть), в словаре такого типа данных, при создании переменной, нет.
Как в этом случае (приведите пример, если можно)?

Спасибо.
Alexandr
Сообщения: 15
Зарегистрирован: 23 июл 2008, 10:31

Ошибка Stimulsoft.Report.OracleClient

Сообщение Alexandr »

АУ, есть кто живой?
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Ошибка Stimulsoft.Report.OracleClient

Сообщение Edward »

Безусловно, живые есть, можете даже не сомневаться :)

Вы можете сами добавить необходимый тип в Словарь Данных:

Stimulsoft.Base.StiTypeWrapper.SimpleTypes.Add(typeof(yourType));

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

Спасибо.
Alexandr
Сообщения: 15
Зарегистрирован: 23 июл 2008, 10:31

Ошибка Stimulsoft.Report.OracleClient

Сообщение Alexandr »

Может это не совсем идея, я просто не знаю как это сделать:
в отчетах предполагалось использовать сложные запросы, но т.к. есть проблема с вытаскиванием колонок (руками добавлять это не есть хорошо),
без которых отчет не выполняется, появилась альтернативная идея использовать хранимые процедуры, но хранимые процедуры могут возвращать
несколько курсоров в качестве OUT параметров, которые будут использоваться для привязки к DataBand и иже с ними.

Отсюда вопрос: как использовать хранимые процедуры в данном случае (нужен небольшой ликбез)? (возможно я просто не разобрался)
Может у вас есть пример работы с процедурами, если можно ссылку или пример отчета.
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Ошибка Stimulsoft.Report.OracleClient

Сообщение Edward »

Вот ссылка на страничку с flash-роликами:

http://www.stimulsoft.com/LiveDemos.aspx

Там же ролики для работы с хранимыми процедурами и параметрами:

http://www.stimulsoft.com/livedemos/Rep ... eters.html
http://www.stimulsoft.com/livedemos/Rep ... ers_2.html
http://www.stimulsoft.com/livedemos/dat ... igner.html

Для простых запросов и хранимых процедур никаких проблем с извлечением колонок нет.

Но если запрос сложный и параметры содержатся в большом количестве, то извлечь колонки все равно возможно. Для этого:
- Все параметры в запросе замените произвольными их значениями, подзапросы тоже надо убрать.
- Нажмите "Извлечь колонки".
- Верните запрос в исходное состояние

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

По поводу OUT параметров, оптимальным будет вариант, если Вы вышлете на support[at]stimulsoft.com необходимые таблицы и соответсвующие хранимые процедуры для стандартной учетной записи HR или какую-то свою схему с оописанием того, что Вам необходимо получить. Постараемся решить задачу на конкретной базе. Из практики это самый верный вариант. :)

Спасибо.



Спасибо.
Alexandr
Сообщения: 15
Зарегистрирован: 23 июл 2008, 10:31

Ошибка Stimulsoft.Report.OracleClient

Сообщение Alexandr »

Ссылки посмотрел, действительно нет вопросов с простыми процедурами и запросами,
но, к сожалению, с моем случае простыми процедурами и запросами не обойтись.
Также я не представляю сколько времени займет создание порядка сотни отчетов с 30 полями (выполнение нескольких процедур),
если все колонки создавать вручную. С поддержкой курсоров было бы гораздо проще.

Выслал на support@stimulsoft.com пример процедуры и табличек. Надеюсь, что проблема решится.

Спасибо.
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Ошибка Stimulsoft.Report.OracleClient

Сообщение Edward »

Пример получен, спасибо.

Мы известим Вас о наших результатах по e-mail и в этом топике.

Спасибо.
Ответить