Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

EDBEngineError


Страницы:   1 2 3 4 5

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 ....


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо