Чтение структуры БД в окне создания нового источника данных
Чтение структуры БД в окне создания нового источника данных
Здравствуйте.
Возникает проблема при создании нового источника данных если в базе ОЧЕНЬ много объектов.
При создании отчета на нашем хранилище данных создание списка объектов занимает около 6 минут! :brick:
При этом выбирается больше 300 000 записей (из ALL_TAB_COLUMNS).
Используется Oracle.
Можно ли сделать возможность делать чтение схемы не автоматически, а по нажатию кнопки?
Важно, что бы можно было создать новый запрос без чтения схемы.
Слишком уж много это занимает времени.
Возникает проблема при создании нового источника данных если в базе ОЧЕНЬ много объектов.
При создании отчета на нашем хранилище данных создание списка объектов занимает около 6 минут! :brick:
При этом выбирается больше 300 000 записей (из ALL_TAB_COLUMNS).
Используется Oracle.
Можно ли сделать возможность делать чтение схемы не автоматически, а по нажатию кнопки?
Важно, что бы можно было создать новый запрос без чтения схемы.
Слишком уж много это занимает времени.
Чтение структуры БД в окне создания нового источника данных
Я использую два провайдера для Оракла.
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?
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?
Чтение структуры БД в окне создания нового источника данных
Здравствуйте,
Спасибо.
Добавили кнопку Refresh и флажок AutoRefresh в диалог. Проверьте пожалуйста билд от 8 июня.fantomus писал(а):Здравствуйте.
Возникает проблема при создании нового источника данных если в базе ОЧЕНЬ много объектов.
При создании отчета на нашем хранилище данных создание списка объектов занимает около 6 минут! :brick:
При этом выбирается больше 300 000 записей (из ALL_TAB_COLUMNS).
Используется Oracle.
Можно ли сделать возможность делать чтение схемы не автоматически, а по нажатию кнопки?
Важно, что бы можно было создать новый запрос без чтения схемы.
Слишком уж много это занимает времени.
Спасибо.
Чтение структуры БД в окне создания нового источника данных
Здравствуйте,
public abstract StiDatabaseInformation GetDatabaseInformation();
Спасибо.
Нет. За эту операцию отвечает метод из класса StiDatabase (от которого наследуюется StiOracleDatabase). Метод:1. За чтение структуры данных в случае использования "OLE DB Provider for Oracle" отвечает "Oracle Database pack" (Stimulsoft.Report.OracleClient.dll)?
public abstract StiDatabaseInformation GetDatabaseInformation();
Да. Нужна перегрузка метода GetDatabaseInformation(). Посмотрите пример в приложенном файле.2. Если да, то можно самому поиграться с исходниками для получения приемлемого результата?
Не совсем понял этот вопрос.3. Если я использую "Oracle Provider for OLE DB" нужна другая сборка специально для этого провайдера?
Вам будет проще сделать поскольку мы можем не учесть особенностей работы Oracle.4. Если нужна, то что лучше - просить вас ее сделать или самому модифицировать Oracle Database pack?
Спасибо.
- Вложения
-
- StiOleDbDatabase.cs
- (14.79 КБ) 804 скачивания
Чтение структуры БД в окне создания нового источника данных
Здравствуйте.Jan писал(а):Здравствуйте,
Добавили кнопку Refresh и флажок AutoRefresh в диалог. Проверьте пожалуйста билд от 8 июня.
Спасибо.
Большое спасибо, работает!
Как можно программно снять флаг "AutoRefresh"?
Состояние этого флага сохраняется при перезапуске, но хотелось бы отключать его программно.
Кроме того, при первом запуске он включен.
Чтение структуры БД в окне создания нового источника данных
Здравствуйте.
Как я уже писал, я использую 2 провайдера для Oracle - "Microsoft OLE DB Provider for Oracle" и "Oracle Provider for OLE DB".
В обоих случаях по разному читается схема данных и по разному происходит связывание параметров.
С первым вопросом разберемся, а со вторым нужна Ваша помощь.
Суть проблемы: при использовании "Microsoft OLE DB Provider for Oracle" не удается использовать параметры.
Пример:
Я перепробовал в запросе и в названии параметра все комбинации с "двоеточиями" и "собачками" - ":id", "@id".
Не получается.
Ошибки две: "Не все переменные привязаны" или "Неверное выражение".
При этом для "Oracle Provider for OLE DB" все красиво работает (с "двоеточием" в запросе).
Спасибо.
Файл прикрепить видимо забыли...Jan писал(а):За эту операцию отвечает метод из класса StiDatabase (от которого наследуюется StiOracleDatabase). Метод:
public abstract StiDatabaseInformation GetDatabaseInformation();
...
Нужна перегрузка метода GetDatabaseInformation(). Посмотрите пример в приложенном файле.
Уточните, пожалуйста, принцип работы Вашего "Oracle Database pack" с провайдерами.Jan писал(а):Не совсем понял этот вопрос.3. Если я использую "Oracle Provider for OLE DB" нужна другая сборка специально для этого провайдера?
Как я уже писал, я использую 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
Не получается.
Ошибки две: "Не все переменные привязаны" или "Неверное выражение".
При этом для "Oracle Provider for OLE DB" все красиво работает (с "двоеточием" в запросе).
Спасибо.
Чтение структуры БД в окне создания нового источника данных
Здравствуйте,
Спасибо.
Как можно программно снять флаг "AutoRefresh"?
Состояние этого флага сохраняется при перезапуске, но хотелось бы отключать его программно.
Кроме того, при первом запуске он включен.
Код: Выделить всё
StiSettings.Load();
StiSettings.Set("StiSelectDataForm", "AutoRefresh", false);
StiSettings.Save();
Чтение структуры БД в окне создания нового источника данных
Недосмотрел.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 июня еще раз.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)
Сам новый запрос сохраняется нормально, но не отображается в списке объектов.
Кроме того, заметил, что в демке не работают интерактивные отчеты.
Глубже пока не копал.
Спасибо.
Чтение структуры БД в окне создания нового источника данных
Здравствуйте,
select * from table1 where id= ? and id2 = ?
Спасибо.
Да, забыли. Прикрепил.Файл прикрепить видимо забыли...Jan писал(а):За эту операцию отвечает метод из класса StiDatabase (от которого наследуюется StiOracleDatabase). Метод:
public abstract StiDatabaseInformation GetDatabaseInformation();
...
Нужна перегрузка метода GetDatabaseInformation(). Посмотрите пример в приложенном файле.
Как я понял в обоих случаях Вы используете OLE DB. В некоторых случаях (не всегда но бывает) именованные параметры (: @) не работают с некоторыми провайдерами. Обычно помогают неименованные параметры в этом случае. К примеру:Уточните, пожалуйста, принцип работы Вашего "Oracle Database pack" с провайдерами.
Как я уже писал, я использую 2 провайдера для Oracle - "Microsoft OLE DB Provider for Oracle" и "Oracle Provider for OLE DB".
В обоих случаях по разному читается схема данных и по разному происходит связывание параметров.
С первым вопросом разберемся, а со вторым нужна Ваша помощь.
Суть проблемы: при использовании "Microsoft OLE DB Provider for Oracle" не удается использовать параметры.
Пример:Я перепробовал в запросе и в названии параметра все комбинации с "двоеточиями" и "собачками" - ":id", "@id".Код: Выделить всё
select * from table1 where id = :id
Не получается.
Ошибки две: "Не все переменные привязаны" или "Неверное выражение".
При этом для "Oracle Provider for OLE DB" все красиво работает (с "двоеточием" в запросе).
select * from table1 where id= ? and id2 = ?
Спасибо.