Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];




Вниз

Значение BLOCKSIZE в таблице. 


sniknik   (2002-03-20 13:04) [0]

Нужно в программе узнать с каким значением BLOCKSIZE создавалась таблица. Для определения максимального размера. Если кто кинет ссылку на описание структуры DB буду очень благодарен.



deleon   (2002-03-20 14:02) [1]

А функция DbiGetCursorProps не подходит ?



deleon   (2002-03-20 14:06) [2]

(с)Degisy Software:

type
HDR_PARADOX = packed record
{000}RecLen: Word; { record length (including record header) }
{002}HdrLen: Word; { header length }
{004}Keyed : Byte; { flag keyed table or not }
{005}BlockSize: Byte;{ data block size code in kb }
{006}NumRecs: Longint; { number of records in file }
{010}NumBlUsed: Word; { number of blocks in use }
{014}BlFirst: Word; { First data block (always 1) }
{016}BlLast: Word; { Last data block }
{018}Rsrv1: array[0..14]of Byte;
{033}NumFlds: Byte; { number of fields }
{034}Rsrv2: Byte;
{035}NumKeyFlds: Word;{ number of keyed fields }
{037}Rsrv3: array[0..19]of Byte;
{057}Version: Byte;{ version of file }
{058}Rsrv4: array[0..14]of Byte;
{073}AutoInc: Integer;{ autoincrement value }
{077}BlFrstFree: Word;{ first free block }
{079}Rsrv5: array[0..40]of Byte;
{120}OffsFlds: Word;{ start of field description array }
end;



sniknik   (2002-03-20 14:13) [3]

Спасибо DbiGetCursorProps вполне подходит. Не знаю как в первый раз смотрел но просмотрел параметр iBlockSize в структуре CURProps.



deleon   (2002-03-20 14:55) [4]

Если что, раскажу как поменять :)



sniknik   (2002-03-20 15:03) [5]

В смысле? на рабочей таблице? я счас просто создаю новую и переписываю данные. Старые таблицы версии 4.0 B.S. 2048 новые v7.0 B.S. 32768.

Кстати видел пишут ограничения по размеру таблици максимум 4Gb, я как ни считал максимум 2Gb получается. у тебя как?



deleon   (2002-03-20 15:09) [6]

Возьми Database Workshop 4.12
в нем можно менять TableLevel, а также BlockSize!
http://www.dbwork.kuban.ru
--------------------------------------
Если интересует как все это добро программно применить
к существующей таблице без копирования - пиши!



sniknik   (2002-03-20 15:22) [7]

Конечно интересует. И именно програмно желательно без сторонних компонентов. Так как?



deleon   (2002-03-20 16:24) [8]

(c)Degisy Software (как обычно :)

function Bde_SetBlockSize(Table: TTable; BlockSize: Cardinal): DbiResult;
var
hDb : hDbiDb;
TblDesc : CRTblDesc;
IsActive : boolean;
OptDesc : FLDDesc;
OptData : DBIPATH;
Value : DBINAME;
CurProp : CURProps;
begin
IsActive := Table.Active;
if not( IsActive )then Table.Active := True;
{ Get Cursor Props }
Result := DbiGetCursorProps(Table.Handle, CurProp);
if( Result = DBIERR_NONE )and
( StrIComp(CurProp.szTableType, szPARADOX) = 0 )or
( StrIComp(CurProp.szTableType, szDBASE) = 0 )or
( StrIComp(CurProp.szTableType, szFOXPRO) = 0 )then
begin
{ Prepare descriptors }
FillChar(OptDesc, SizeOf(FLDDesc), 0);
FillChar(TblDesc, SizeOf(CRTblDesc), 0);
StrPCopy(Value, IntToStr(BlockSize));
StrPCopy(OptDesc.szName, "BLOCK SIZE");
OptDesc.iFldType := fldZSTRING;
OptDesc.iLen := StrLen(Value) + 1;
StrCopy(TblDesc.szTblName, CurProp.szName);
StrCopy(TblDesc.szTblType, CURProp.szTableType);
StrCopy(OptData, Value);
TblDesc.iOptParams := 1;
TblDesc.pfldOptParams := @OptDesc;
TblDesc.pOptData := @OptData;
{ Modify table level }
Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
try
Table.DisableControls;
Table.Active := False;
Result := DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False);
Check(Result);
finally
Table.Active := IsActive;
Table.EnableControls;
end;
end;
end;

Единственное, придется подобрать значение блока, не все прокатывают, нормальные (1024,2048,4096,8192,32768)

Ну а TableLevel меняется похожим способом :)



sniknik   (2002-03-20 16:33) [9]

Еще раз спасибо. Буду разбиратся. А значение блока можно в BDE администраторе взять для каждого левела.
Я тут пытался нестандартный задать 65536 так не взяла собака! :) установила в 16384. Пытался чтобы у таблици был максимум 4Gb. 8192 - кстати тоже не покатит, кажется.



deleon   (2002-03-20 16:58) [10]

Будут вопросы - пиши!




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.053 c
7-32993           XM-AD                 2002-01-17 09:59  2002.04.11  
Эмуляция пользователя!?


1-32862           AlexBeliy             2002-03-29 12:45  2002.04.11  
DLL


4-33015           zoid                  2002-02-11 14:49  2002.04.11  
Пресловутый TrayIcon - проблема с PopupMenu


1-32872           Ivann                 2002-03-29 14:47  2002.04.11  
Как вставить картинку в TStatusbar?


3-32656           OlegE                 2002-03-20 09:26  2002.04.11  
Создание EXCEPTIONS в хранимой процедуре