1. Выборку из базы, насколько я знаю, можно производить только посредством (грубо говоря):
SELECT <SomeStuff|*> FROM <KnownTableName> ...
Вопрос в следующем: есть ли способ посмотреть какие таблицы есть в базе (узнать как они называются), из которых данный пользователь может получать данные. Читал факи по SQL и пролистал в магазине книгу "SQL для чайников". Нигде подобный вопрос не освещается. Видимо, при обучении ставка делается на то, что вы сами админ подопытной базы и знаете, что и из какой таблицы можно взять.
Если более конкретно, то задача состоит в том, чтобы предоставить пользователю ASP скрипта наименование всех таблиц, имеющихся в базе с последующей возможностью формировать запросы. Соединение с базой производится так:
Set DB = Server.CreateObject("ADODB.Connection")
DB.Open "Provider=MSDAORA;user id=blah blah..."
2. Есть также необходимость сохранить информацию, запрошенную пользователем в какой-либо файл для последующего анализа. Объемы информации достаточно большие и могут достигать нескольких десятков гигабайт.
Решение, казалось бы очевидно, я использую метод Save объекта RecordSet с параметром adPersistXML.
Получаю на выходе файл, но слишком большой, чтобы с ним можно было работать.
Вопрос следующий: есть ли какие-либо конверторы полученных таким образом файлов в какой-нибудь более-менее приемлемый формат. Например, база MS Access (.mbd). Может ли Access оперировать такими большими объемами данных?
Пример: RS.Save ".\user_request_dump.xml" , adPersistXML
Все конверторы из XML в Excel/Access, что мне удалось найти жрут всю имеющуюся оперативную память и падают, либо прекращают работать, ничего не сконвертив.
Заранее огромное спасибо за любые ответы и советы.
Здравствуйте, Podbelsky, Вы писали:
P>Здравствуйте.
P>У меня возникли следующие вопросы.
P>1. Выборку из базы, насколько я знаю, можно производить только посредством (грубо говоря): P> SELECT <SomeStuff|*> FROM <KnownTableName> ... P>Вопрос в следующем: есть ли способ посмотреть какие таблицы есть в базе (узнать как они называются), из которых данный пользователь может получать данные. Читал факи по SQL и пролистал в магазине книгу "SQL для чайников". Нигде подобный вопрос не освещается. Видимо, при обучении ставка делается на то, что вы сами админ подопытной базы и знаете, что и из какой таблицы можно взять. P>Если более конкретно, то задача состоит в том, чтобы предоставить пользователю ASP скрипта наименование всех таблиц, имеющихся в базе с последующей возможностью формировать запросы. Соединение с базой производится так: P>Set DB = Server.CreateObject("ADODB.Connection") P>DB.Open "Provider=MSDAORA;user id=blah blah..."
Могу ответить на первую часть вопроса: метод OpenSchema. Из MSDN:
The OpenSchema method returns self-descriptive information about the data source, such as what tables are in the data source, the columns in the tables, and the data types supported.
Поищи по ключевому слову OpenSchema в msdn там много информации и примеров
Здравствуйте, Podbelsky, Вы писали:
P> 2. Есть также необходимость сохранить информацию, запрошенную P> пользователем в какой-либо файл для последующего анализа. Объемы P> информации достаточно большие и могут достигать нескольких десятков P> гигабайт. Решение, казалось бы очевидно, я использую метод Save объекта P> RecordSet с параметром adPersistXML. Получаю на выходе файл, но слишком P> большой, чтобы с ним можно было работать. Вопрос следующий: есть ли P> какие-либо конверторы полученных таким образом файлов в какой-нибудь P> более-менее приемлемый формат. Например, база MS Access (.mbd). Может ли P> Access оперировать такими большими объемами данных? Пример: RS.Save P> ".\user_request_dump.xml" , adPersistXML Все конверторы из XML в P> Excel/Access, что мне удалось найти жрут всю имеющуюся оперативную P> память и падают, либо прекращают работать, ничего не сконвертив.
У-у-у-у-у-у, да ты, братец, жулик! Что же это за запросы? В несколько десятков гигабайт. Здесь не поможет ни XML, ни mdb. Ибо XML это будет парсить долго, а максимальный размер базы Jet — 2Gb. Слушай, ты ведь на Oracle? Тебе, может, про transportable tablespaces почитать? Появились в восьмерке.
-- Всего хорошего!
-- Alex Alexandrov, e-mail: alex_alexandrov@fromru.com
Posted via RSDN NNTP Server 1.8 beta
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, alexandrov_alex, Вы писали:
_>У-у-у-у-у-у, да ты, братец, жулик! Что же это за запросы? В несколько десятков гигабайт. Здесь не поможет ни XML, ни mdb. Ибо XML это будет парсить долго, а максимальный размер базы Jet — 2Gb. Слушай, ты ведь на Oracle? Тебе, может, про transportable tablespaces почитать? Появились в восьмерке.
На самом деле это запросы типа *, которые всю таблицу забирают. Так называемый дамп всей базы.
Вообще я в данной ситуации сам как пользователь, поэтому мне не очень важно на Oracle это все дело или нет. Про transportable tablespaces прочитаю обязательно, спасибо.
У меня есть дамп на 14гб в XML формате, который сгенерился при помощи метода Recordset.Save
Этот кусок нужно приспособить для анализа данных, то бишь чтения/поиска. Вот такая задача.
Отпарсить и сохранить в другой формат могу и сам, пишется не сложно. Вопрос в какой формат лучше этот XML переконвертить, ведь на данный момент в этих 14гб процентов 60-70 избыточной информации.
Excel не подходит сразу, там вроде в 1 лист можно только 2^16-1 строк записывать, плодить листы тоже не очень удобно.
Access судя по вашему ответу более подходящий вариант, 2гб — уже хорошо. Попробую.
_>-- Всего хорошего! _>-- Alex Alexandrov, e-mail: alex_alexandrov@fromru.com
Здравствуйте, Xenia, Вы писали:
X>Могу ответить на первую часть вопроса: метод OpenSchema. Из MSDN:
X>The OpenSchema method returns self-descriptive information about the data source, such as what tables are in the data source, the columns in the tables, and the data types supported.
X>Поищи по ключевому слову OpenSchema в msdn там много информации и примеров
Ага, благодарю. В platform SDK про OpenSchema тоже нашлось.
Еще откопал в книжке по ADO.NET такую вещь:
Dim db As SQLDMO.Database
Dim tbl As SQLDMO.Table
Dim col As SQLDMO.Column
Set db = SQLServer.Databases("DB_Name_here")
For Each tbl In db.Tables
Print "TABLE" & tbl.Name
For Each col In tbl.Columns
Print " : " & col.Name
Next
Next
Пока не пробовал ни первое, ни второе. Если интересно, про результаты сообщу.
Спасибо за ответ.