![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
EDBEngineError
Climber © (2006-10-09 06:37:00)Где фиксить EDBEngineError "Temporary table resourse limit"?.
Спасибо.
Игорь Шевченко (2006-11-09 12:48:00) [61]Jeer © (09.11.06 11:55) [25]
sniknik © (09.11.06 12:14) [26]
ANB © (09.11.06 12:33) [28]
У меня задача выгрузить из базы данных в некий (неважно какой) внешний источник все данные. Однимзапросом. В таблице базы данных порядка миллиона записей, в каждой записи приличное количество полей.
База данных - Firebird.
Единственное, до чего я не дошел - это до ADO, ну и ладно. Наследник DataSet нужен бо удобно Open, Close, Next, Eof и FieldByName
ANB (2006-11-09 12:33:00) [62]По аналогии могу предположить, что нужен не наследник TDataSet. Из вкладки InterBase я накопал TIBSQL.
Из dbExpress может подойти TSQLQuery (хоть он и является наследником TDataSource). Ща попробуй выгрести им немелкую таблицу из оракла
ANB (2006-11-09 12:24:00) [63]
> Игорь Шевченко © (09.11.06 11:47) [24]
TOracleQuery (из DOA). К сожалению, это тебе не подойдет, но можно поискать аналоги.
sniknik (2006-11-09 12:14:00) [64]> желательно использовать что-то совсем примитивное, не кэширующее и не буферизующее данные. Например, DbExpress.
попробуй еще ADO ;о)), OLEDB драйвер можно вот этот
http://www.zstyle.com.ua/rus/iboledb_prod.htm
у меня с ним получались довольно большие выборки (обмен), и без всяких проблем насколько помню (параметры записи, и количество строк указать не смогу, не помню).
причем никаких "извращений" типа подбора режима выборки не делал, пользовался по умолчанию клиентским курсором и двунаправленным рекордсетом (все одно все данные мне нужны были на клиенте + отображать в гриде тоже нужно было. т.е. ... ну понятно ;о))
Jeer (2006-11-09 11:55:00) [65]
> у IBExpress обнаружились свои глюки.
Кто бы сомневался: вся жизнь - борьба с глюками, ладно бы только со своими.:)
IBExpert ?
Игорь Шевченко (2006-11-09 11:47:00) [66]На всякий случай, может, кому интересно - у IBExpress обнаружились свои глюки.
Получается, что для последовательного чтения данных большого запроса, возвращающего много некоротких полей, среди которых встречаются BLOB'ы, желательно использовать что-то совсем примитивное, не кэширующее и не буферизующее данные. Например, DbExpress.
Anatoly Podgoretsky (2006-11-07 17:03:00) [67]Трудно найти эту гайку в БДЕ
Не расчитано оно было на это
Игорь Шевченко (2006-11-07 16:24:00) [68]sniknik © (07.11.06 14:50) [19]
Вариант - это я IBExpress'ом буду пользоваться, если нету гайки в BDE
glitch=false
Я, собстна, обратился к сообществу с целью поиска той самой гайки.
Запрос разделять я не буду принципиально, объяснять причины этой принципиальности не буду тоже :)
Desdechado (2006-11-07 16:18:00) [69]Обходной маневр, но все же:
можно пропробовать в самом IB создать EXTERNAL TABLE c символьнымиполями, куда выгрузить внутренним запросом типа INSERT... SELECT... нужные данные. А уж потом играться с текстовиком.
ЗЫ Если создать не символьные поля, то всякие INTEGER будут в бинарном виде туда запиханы.
Anatoly Podgoretsky (2006-11-07 14:55:00) [70]> Игорь Шевченко (07.11.2006 14:07:15) [15]
Оно не обязано прислушиваться, особенно раз речь про Interbase, но оно может прислушаться.
Драйвер FoxPro не родной, ограниченый, мне помогала установка драйвера dBase IV после этого у меня стали создаваться _sql....dbf файлы
sniknik (2006-11-07 14:50:00) [71]по моему единственный вариант остался - делить запрос на несколько.
а кстати, поля какого типа char(50) или varchar(50)? если это имеет значение для BDE/найтивных драйверов :), там же нет строк с переменной длинной.
может размер им "пооптимизировать"? ;) (ну если в какоето максимум 5 символов пишут, а оно по общему формату = 50... в BDE то сделает во временной по определяемому размеру а не по фактическому... лишние мегабайты)
даже если нельзя менять структуру но можно же
select
CAST(Field1 AS Char(20)), //хотя само поле Char(50), но там всего 20 значимых
CAST(Field2 ...
...
попробовать так.
Игорь Шевченко (2006-11-07 14:23:00) [72]Desdechado © (07.11.06 14:14) [16]
> После изменения настроек БДЕ нужно перестартовывать приложения,
> использующие БДЕ, чтобы изменения вступили в силу.
Даже если бы ты не написал этой фразы в форуме ее пишет BDE Administrator :)
Игорь Шевченко (2006-11-07 14:22:00) [73]Jeer © (07.11.06 14:02) [14]
> Зачем тут BDE ?
>
> Почему бы ODBC, например, не использовать ?
Не хотелось бы обсуждать вопрос BDE / не BDE.
В самом последнем случае будут использоваться стандартные компоненты доступа к Interbase, но это приведет к довольно большим изменениям, а это время.
Desdechado (2006-11-07 14:14:00) [74]> Попробовал поменять Default Driver с Paradox на Dbase и FoxPro. Результат не изменился ни на йоту.
После изменения настроек БДЕ нужно перестартовывать приложения, использующие БДЕ, чтобы изменения вступили в силу.
Игорь Шевченко (2006-11-07 14:07:00) [75]Desdechado © (07.11.06 13:53) [12]
Попробовал поменять Default Driver с Paradox на Dbase и FoxPro. Результат не изменился ни на йоту. Как застревала на 457856-й записи при последовательном чтении, так и продолжает.
Сокращение количества полей в запросе помогает, но поля-то нужны.
Не хотелось бы отказываться от BDE, может как-то можно полечить...
Jeer (2006-11-07 14:02:00) [76]
> Игорь Шевченко © (07.11.06 13:41) [11]
> База данных из откуда производится выборка - Interbase (Firebird).
> Если BDE под результат каждого запроса
Зачем тут BDE ?
Почему бы ODBC, например, не использовать ?
Anatoly Podgoretsky (2006-11-07 14:01:00) [77]> Игорь Шевченко (07.11.2006 13:41:11) [11]
> Если BDE под результат каждого запроса создает парадоксовскую таблицу
Не обязательно, зависит от драйвера по умолчанию, и временные таблицы часто создаются для формирования результата, так же как и в других СУБД, просто БДЕ имеет сильные ограничения на размер и другие вещи, все таки он ориентирован на FAT и разработан ой как давно.
> Навалом спейса. 17 гигабайт минимум.
Не играет роли, ограничение на файлы идет по ДОСу
> С этого места пожалуйста подробнее - что за внешний файл, когда содается, где про это написано, как избавиться ?
Никак, принципы работы, UniDirectional тут не причем, в случае UniDirectional такой файл всегда создается. При том создается не один файл, создается в папке PrivateDir
Попробуй сменить драйвер по умолчанию на dBase может поможет, все таки более простой и экономный формат, особенно dBase VII.
Desdechado (2006-11-07 13:53:00) [78]> что за внешний файл, когда содается, где про это написано, как избавиться ?
Дык, БДЕ при выполнении запросов практически всегда (кроме очень мелких результатов) сбрасывает результаты на диск в Session.PrivateDir. Причем, как я писал в Desdechado © (07.11.06 13:05) [7], в формате default driver.
Избавиться от этих файлов, имхо, невозможно. А вот форматом можно попробовать поиграться.
Игорь Шевченко (2006-11-07 13:41:00) [79]sniknik © (07.11.06 13:06) [8]
База данных из откуда производится выборка - Interbase (Firebird). Если BDE под результат каждого запроса создает парадоксовскую таблицу, то я не совсем понимаю.
Почему не хочу разбивать запрос - запрос служит источником для перегрузки в другой формат и городить огород в данном случае не представляется целесообразным.
> * If you're joining three or more large tables, try to split
> the query in two
Нет, таблица одна.
> * There's not enough space on the drive where your private
> directory is
Навалом спейса. 17 гигабайт минимум.
> * There's not enough space on the drive where your Windows
> TEMP folder is
Навалом спейса.
> * This could be a variation of the "Insufficient disk space.
> " error
Во-первых спейса навалом, во-вторых от сообщения об ошибке одидаются не вариации на тему а точное указание ейной (ошибки) причины.
> * This could be caused by the blocksize for the table being
> too small.
Blocksize менялся с 2048 до 32768 - эффект от изменения BlockSize не замечен.
> * This can happen if the resulting answer table will be
> larger than 512 MB and the query includes sorting and removing
> duplicates, that is a query with Check. When tables are
> that large, use CheckPlus to skip the sorting.
Сортировки нету.
Запрос выглядит как
select
Field1,
Field2,
Field3,
Field4,
.... далее со всеми остановками до станции Можайск
from
Table1
where
Field3 <> someliteral;
Desdechado © (07.11.06 13:06) [9]
> И не должно, ибо временный файл создается до того, как результат
> выборки попадает в квери. А UniDirectional влияет только
> на буферизацию внутри программы, а не на внешний файл.
С этого места пожалуйста подробнее - что за внешний файл, когда содается, где про это написано, как избавиться ?
sniknik (2006-11-07 13:09:00) [80]40*50*500000 - 953мг.
> This can happen if the resulting answer table will be larger than 512MB ....