Чтение структуры БД в окне создания нового источника данных

Обсуждение Stimulsoft Reports.NET
fantomus
Сообщения: 215
Зарегистрирован: 22 апр 2009, 06:41
Откуда: Kyiv, Ukraine

Чтение структуры БД в окне создания нового источника данных

Сообщение fantomus »

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

Возникает проблема при создании нового источника данных если в базе ОЧЕНЬ много объектов.
При создании отчета на нашем хранилище данных создание списка объектов занимает около 6 минут! :brick:
При этом выбирается больше 300 000 записей (из ALL_TAB_COLUMNS).
Используется Oracle.

Можно ли сделать возможность делать чтение схемы не автоматически, а по нажатию кнопки?

Важно, что бы можно было создать новый запрос без чтения схемы.
Слишком уж много это занимает времени.
fantomus
Сообщения: 215
Зарегистрирован: 22 апр 2009, 06:41
Откуда: Kyiv, Ukraine

Чтение структуры БД в окне создания нового источника данных

Сообщение fantomus »

Я использую два провайдера для Оракла.
Microsoft OLE DB Provider for Oracle и Oracle Provider for OLE DB.
Скомпилировал и использую "Oracle Database pack".
Второй провайдер - это разработка самого Оракла. Есть у них на сайте.
В обоих случаях чтение данных идет медленно, а результаты различны.
В первом случае не для всех объектов есть колонки, а во втором вообще нет колонок.
Приходится создавать источник (без колоник), а потом заходить в его редактирование и кнопкой создавать все колонки.
Оно то работает, но неудобно.
Oracle Client 9.2.

Вопросы:
1. За чтение структуры данных в случае использования "OLE DB Provider for Oracle" отвечает "Oracle Database pack" (Stimulsoft.Report.OracleClient.dll)?
2. Если да, то можно самому поиграться с исходниками для получения приемлемого результата?
3. Если я использую "Oracle Provider for OLE DB" нужна другая сборка специально для этого провайдера?
4. Если нужна, то что лучше - просить вас ее сделать или самому модифицировать Oracle Database pack?
Jan
Сообщения: 495
Зарегистрирован: 19 фев 2009, 11:14

Чтение структуры БД в окне создания нового источника данных

Сообщение Jan »

Здравствуйте,
fantomus писал(а):Здравствуйте.

Возникает проблема при создании нового источника данных если в базе ОЧЕНЬ много объектов.
При создании отчета на нашем хранилище данных создание списка объектов занимает около 6 минут! :brick:
При этом выбирается больше 300 000 записей (из ALL_TAB_COLUMNS).
Используется Oracle.

Можно ли сделать возможность делать чтение схемы не автоматически, а по нажатию кнопки?

Важно, что бы можно было создать новый запрос без чтения схемы.
Слишком уж много это занимает времени.
Добавили кнопку Refresh и флажок AutoRefresh в диалог. Проверьте пожалуйста билд от 8 июня.

Спасибо.
Jan
Сообщения: 495
Зарегистрирован: 19 фев 2009, 11:14

Чтение структуры БД в окне создания нового источника данных

Сообщение Jan »

Здравствуйте,
1. За чтение структуры данных в случае использования "OLE DB Provider for Oracle" отвечает "Oracle Database pack" (Stimulsoft.Report.OracleClient.dll)?
Нет. За эту операцию отвечает метод из класса StiDatabase (от которого наследуюется StiOracleDatabase). Метод:

public abstract StiDatabaseInformation GetDatabaseInformation();
2. Если да, то можно самому поиграться с исходниками для получения приемлемого результата?
Да. Нужна перегрузка метода GetDatabaseInformation(). Посмотрите пример в приложенном файле.
3. Если я использую "Oracle Provider for OLE DB" нужна другая сборка специально для этого провайдера?
Не совсем понял этот вопрос.
4. Если нужна, то что лучше - просить вас ее сделать или самому модифицировать Oracle Database pack?
Вам будет проще сделать поскольку мы можем не учесть особенностей работы Oracle.

Спасибо.
Вложения
StiOleDbDatabase.cs
(14.79 КБ) 803 скачивания
fantomus
Сообщения: 215
Зарегистрирован: 22 апр 2009, 06:41
Откуда: Kyiv, Ukraine

Чтение структуры БД в окне создания нового источника данных

Сообщение fantomus »

Jan писал(а):Здравствуйте,
Добавили кнопку Refresh и флажок AutoRefresh в диалог. Проверьте пожалуйста билд от 8 июня.
Спасибо.
Здравствуйте.

Большое спасибо, работает!

Как можно программно снять флаг "AutoRefresh"?
Состояние этого флага сохраняется при перезапуске, но хотелось бы отключать его программно.
Кроме того, при первом запуске он включен.
fantomus
Сообщения: 215
Зарегистрирован: 22 апр 2009, 06:41
Откуда: Kyiv, Ukraine

Чтение структуры БД в окне создания нового источника данных

Сообщение fantomus »

Здравствуйте.
Jan писал(а):За эту операцию отвечает метод из класса StiDatabase (от которого наследуюется StiOracleDatabase). Метод:
public abstract StiDatabaseInformation GetDatabaseInformation();
...
Нужна перегрузка метода GetDatabaseInformation(). Посмотрите пример в приложенном файле.
Файл прикрепить видимо забыли...
Jan писал(а):
3. Если я использую "Oracle Provider for OLE DB" нужна другая сборка специально для этого провайдера?
Не совсем понял этот вопрос.
Уточните, пожалуйста, принцип работы Вашего "Oracle Database pack" с провайдерами.
Как я уже писал, я использую 2 провайдера для Oracle - "Microsoft OLE DB Provider for Oracle" и "Oracle Provider for OLE DB".
В обоих случаях по разному читается схема данных и по разному происходит связывание параметров.
С первым вопросом разберемся, а со вторым нужна Ваша помощь.
Суть проблемы: при использовании "Microsoft OLE DB Provider for Oracle" не удается использовать параметры.
Пример:

Код: Выделить всё

select * from table1 where id = :id
Я перепробовал в запросе и в названии параметра все комбинации с "двоеточиями" и "собачками" - ":id", "@id".
Не получается.
Ошибки две: "Не все переменные привязаны" или "Неверное выражение".
При этом для "Oracle Provider for OLE DB" все красиво работает (с "двоеточием" в запросе).

Спасибо.
Jan
Сообщения: 495
Зарегистрирован: 19 фев 2009, 11:14

Чтение структуры БД в окне создания нового источника данных

Сообщение Jan »

Здравствуйте,
Как можно программно снять флаг "AutoRefresh"?
Состояние этого флага сохраняется при перезапуске, но хотелось бы отключать его программно.
Кроме того, при первом запуске он включен.

Код: Выделить всё

StiSettings.Load();
StiSettings.Set("StiSelectDataForm", "AutoRefresh", false);
StiSettings.Save();
Спасибо.
fantomus
Сообщения: 215
Зарегистрирован: 22 апр 2009, 06:41
Откуда: Kyiv, Ukraine

Чтение структуры БД в окне создания нового источника данных

Сообщение fantomus »

Jan писал(а): Добавили кнопку Refresh и флажок AutoRefresh в диалог. Проверьте пожалуйста билд от 8 июня.
Спасибо.
Недосмотрел.
Возникает ошибка при сохранении нового запроса "Query New":

System.NullReferenceException: Object reference not set to an instance of an object.
at Stimulsoft.Report.Dictionary.Design.StiSelectDataForm.BuildDataSources()
at Stimulsoft.Report.Dictionary.Design.StiSelectDataForm.tbNewQuery_Click(Object sender, EventArgs e)
at Stimulsoft.Controls.Win.DotNetBar.BaseItem.RaiseClick(eEventSource source)
at Stimulsoft.Controls.Win.DotNetBar.BaseItem.InternalMouseUp(MouseEventArgs objArg)
at Stimulsoft.Controls.Win.DotNetBar.PopupItem.InternalMouseUp(MouseEventArgs objArg)
at Stimulsoft.Controls.Win.DotNetBar.ButtonItem.InternalMouseUp(MouseEventArgs objArg)
at Stimulsoft.Controls.Win.DotNetBar.BaseItem.InternalMouseUp(MouseEventArgs objArg)
at Stimulsoft.Controls.Win.DotNetBar.GenericItemContainer.InternalMouseUp(MouseEventArgs objArg)
at Stimulsoft.Controls.Win.DotNetBar.Bar.OnMouseUp(MouseEventArgs e)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at Stimulsoft.Controls.Win.DotNetBar.Bar.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Сам новый запрос сохраняется нормально, но не отображается в списке объектов.
Кроме того, заметил, что в демке не работают интерактивные отчеты.
Глубже пока не копал.
Jan
Сообщения: 495
Зарегистрирован: 19 фев 2009, 11:14

Чтение структуры БД в окне создания нового источника данных

Сообщение Jan »

Здравствуйте,
fantomus писал(а):
Jan писал(а): Добавили кнопку Refresh и флажок AutoRefresh в диалог. Проверьте пожалуйста билд от 8 июня.
Спасибо.
Недосмотрел.
Возникает ошибка при сохранении нового запроса "Query New":

System.NullReferenceException: Object reference not set to an instance of an object.
at Stimulsoft.Report.Dictionary.Design.StiSelectDataForm.BuildDataSources()
at Stimulsoft.Report.Dictionary.Design.StiSelectDataForm.tbNewQuery_Click(Object sender, EventArgs e)
at Stimulsoft.Controls.Win.DotNetBar.BaseItem.RaiseClick(eEventSource source)
at Stimulsoft.Controls.Win.DotNetBar.BaseItem.InternalMouseUp(MouseEventArgs objArg)
at Stimulsoft.Controls.Win.DotNetBar.PopupItem.InternalMouseUp(MouseEventArgs objArg)
at Stimulsoft.Controls.Win.DotNetBar.ButtonItem.InternalMouseUp(MouseEventArgs objArg)
at Stimulsoft.Controls.Win.DotNetBar.BaseItem.InternalMouseUp(MouseEventArgs objArg)
at Stimulsoft.Controls.Win.DotNetBar.GenericItemContainer.InternalMouseUp(MouseEventArgs objArg)
at Stimulsoft.Controls.Win.DotNetBar.Bar.OnMouseUp(MouseEventArgs e)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at Stimulsoft.Controls.Win.DotNetBar.Bar.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Сам новый запрос сохраняется нормально, но не отображается в списке объектов.
Кроме того, заметил, что в демке не работают интерактивные отчеты.
Глубже пока не копал.
Обе ошибки исправлены. Скачайте билд от 8 июня еще раз.

Спасибо.
Jan
Сообщения: 495
Зарегистрирован: 19 фев 2009, 11:14

Чтение структуры БД в окне создания нового источника данных

Сообщение Jan »

Здравствуйте,
Jan писал(а):За эту операцию отвечает метод из класса StiDatabase (от которого наследуюется StiOracleDatabase). Метод:
public abstract StiDatabaseInformation GetDatabaseInformation();
...
Нужна перегрузка метода GetDatabaseInformation(). Посмотрите пример в приложенном файле.
Файл прикрепить видимо забыли...
Да, забыли. Прикрепил.

Уточните, пожалуйста, принцип работы Вашего "Oracle Database pack" с провайдерами.
Как я уже писал, я использую 2 провайдера для Oracle - "Microsoft OLE DB Provider for Oracle" и "Oracle Provider for OLE DB".
В обоих случаях по разному читается схема данных и по разному происходит связывание параметров.
С первым вопросом разберемся, а со вторым нужна Ваша помощь.
Суть проблемы: при использовании "Microsoft OLE DB Provider for Oracle" не удается использовать параметры.
Пример:

Код: Выделить всё

select * from table1 where id = :id
Я перепробовал в запросе и в названии параметра все комбинации с "двоеточиями" и "собачками" - ":id", "@id".
Не получается.
Ошибки две: "Не все переменные привязаны" или "Неверное выражение".
При этом для "Oracle Provider for OLE DB" все красиво работает (с "двоеточием" в запросе).
Как я понял в обоих случаях Вы используете OLE DB. В некоторых случаях (не всегда но бывает) именованные параметры (: @) не работают с некоторыми провайдерами. Обычно помогают неименованные параметры в этом случае. К примеру:

select * from table1 where id= ? and id2 = ?

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