DBC konteiner

DBC konteiner slouží pro uchování informací o tabulkách a položkách , které z důvodu kompatibility nemohly být přítomny ve struktuře tabulek. Dále se v něm ukládají uložené procedury, pohledy, spojení na vzdálená data, relace a definice referenční integrity.

1) Struktura DBC konteineru

DBC konteiner je pouhá VFP tabulka. Lze ji tedy otevřít a přehrabovat se v ní. Je nutno míti na paměti, že neodborný zásah může způsobit problémy při otevírání samotné databáze, pohledů či tabulek. Při neopatrném přepsání položky "Property" dochází k pádu samotné VFP.

Tab. 1.0 Struktura DBC konteineru
Název Typ Velikost Popis
OBJECTID I 4 ID objektu
PARENTID I 4 ID otcovkého objektu
OBJECTTYPE C 10 Typ objektu, viz Tab. 1.1
OBJECTNAME C 128 Název objektu
PROPERTY M bin 4 Memo pole pro uchování vlastností
CODE M bin 4 Memo pole pro uchování P-kódu uložených procedur
RIINFO C 6 Příznak pro objekt typu "RELACE", že je vygenerována RI.
Pokud je hodnota ICR, pak jednotlivá písmena znamenají:
ICR - Update Ignorován, Cascade Delete,Restriktivní Insert
USER M 4 Memo pole pro vlastní použití

Tab. 1.1 Tabulka typů objektů
Kód Popis
Database Databáze
Table Tabulka
Index Index
Field Položka
Relation Relace
Connection Spojení
View Pohled

Každý objekt má ID ("OBJECTID"), které ho jednoznačně identifikuje v rámci DBC konteineru a zároveň v položce "PARENTID" je ID otcovského objektu.

Databáze vlastní tabulky, pohledy ,spojení a je též vlastníkem sama sebe a několika dalších objektů viz Tab. 1.2 .
Tabulka vlastní položky,indexy a relace.
Pohled vlastní položky a relace.

Tab. 1.2 Seznam objektů po založení DBC konteineru
Název ID Popis
Database 1 Samotná databáze
TransactionLog 2 ??? - Patrně záznamy o transakcích
StoredProceduresSource 3 V položce "CODE" jsou uloženy zdrojové kódy procedur včetně procedur RI
StoredProceduresObject 4 V položce "CODE" jsou uloženy P-kódy procedur včetně procedur RI
StoredProceduresDependencies 5 ???

Následná tabulka zobrazuje možný obsah DBC konteineru, pokud jej otevřeme pomocí příkazu USE a zobrazíme v browsu.

Tab. 1.3 Ukázka z DBC konteineru
OBJECTID PARENTID OBJECTTYPE OBJECTNAME PROPERTY CODE RIINFO USERID
1 1 Database Database Memo memo   memo
2 1 Database TransactionLog memo memo   memo
3 1 Database StoredProceduresSource memo Memo   memo
4 1 Database StoredProceduresObject memo Memo   memo
5 1 Database StoredProceduresDependencies memo memo   memo
14 1 Connection Connect1 Memo memo   memo
15 1 Table XXT001 Memo memo   memo
16 15 Field Pol1 Memo memo   memo
20 15 Index XXI001 Memo memo   memo
22 15 Relation Relation 1 Memo memo ICR memo
30 1 View View1 Memo memo   memo
31 30 Field Polx Memo memo   memo

2) Vlastnosti objektů

Samotné vlastnosti objektů jsou uloženy v poli "PROPERTY". Každá vlastnost je tvořena blokem bytes.
<L0> <L1> <L2> <L3> <N0> <N1> <B0> ... <Bn> <Hodnota>
Kde <L0><L3> určuje celou délku bloku. Jde o 32 Unsigned Integer.
<N0> a <N1> určuje délku ID vlastnosti v bytes. Jde o 16 Unsigned Integer.
<B0> ... <Bn> je ID vlastnosti. Jde o n Unsigned Integer (kompletní seznam vlastností je v tabulce Tab. 2.1).
Zbytek bloku zabírá vlastní hodnota.

Hodnota dosahuje několika typů jak ukazuje tabulka Tab. 2.0.

Tab. 2.0 Tabulka typů vlastností
Kód Popis
char Řetězec ukončený znakem CHR(0)
bool Logická hodnota 1 - .T., 0 -.F.
byte Numerická hodnota o velikosti 1 byte
uir Hodnota typu 32 integer bez znaménka zapsaná v obráceném sledu.
Vlastnosti dosahující hodnoty -1 jsou zapsány jako 0xFFFFFFFF

Největší zvláštností je hodnota uir, která je uložena v obráceném sledu, než je zvykem. Další výjimku tvoří hodnota -1, která je uložena jako 0xFFFFFFFF. Hodnota typu bool je uložena pomocí jednoho byte, kde hodnota 1 odpovídá .T. a 0 odpovídá .F. .

Tab. 2.1 Tabulka vlastností jednotlivých objektů
Objekt
Vlastnost ID Typ Ukázková hodnota Ukázková vlastnost (Dec) Ukázková vlastnost (Nativní tvar) Verze VFP Poznámka
 Databáze
Comment 7 char Toto je můj komentář 28_0_0_0_1_0_7_Toto je můj komentář_0 1C000000010007Toto je můj komentář00 3.0  
Version 24 uir 10 11_0_0_0_1_0_24_0_0_0_10 0B0000000100180000000A 3.0
VFP 3.0-6.0Vždy 10
VFP 7.0Vždy 11
DBCEvents 86 bool 1 8_0_0_0_1_0_86_0_0_0_01 0800000001005600000001 7.0  
DBCEventFileName 87 char xx.prg 14_0_0_0_1_0_87_xx.prg_0 08000000010057xx.prg00 7.0  
 
 Tabulka
Path 1 char data\tb.dbf 19_0_0_0_1_0_1_data\tb.dbf_0 13000000010001data\tb.dbf00 3.0  
SubType 2 byte 1 8_0_0_0_1_0_2_1 0800000001000201 3.0 Vždy 1
Comment 7 char Toto je můj komentář 28_0_0_0_1_0_7_Toto je můj komentář_0 1C000000010007Toto je můj komentář00 3.0  
RuleExpression 9 char Table_Valid() 21_0_0_0_1_0_9_Table_Valid()_0 15000000010009Table_Valid()00 3.0  
RuleText 10 char "Nemáte přístup k tabulce" 34_0_0_0_1_0_10_"Nemáte přístup k tabulce"_0 2200000001000A"Nemáte přístup k tabulce"00 3.0  
InsertTrigger 14 char INSTrig() 17_0_0_0_1_0_14_INSTrig()_0 1100000001000EINSTrig()00 3.0  
UpdateTrigger 15 char UPDTrig() 17_0_0_0_1_0_15_UPDTrig()_0 1100000001000FUPDTrig()00 3.0  
DeleteTrigger 16 char DELTrig() 17_0_0_0_1_0_16_DELTrig()_0 11000000010010DELTrig()00 3.0  
PrimaryKey 20 char Uziv_ID 15_0_0_0_1_0_20_Uziv_ID_0 0F000000010014Uziv_ID00 3.0  
 
 Položka
Comment 7 char Toto je můj komentář 28_0_0_0_1_0_7_Toto je můj komentář_0 1C000000010007Toto je můj komentář00 3.0  
RuleExpression 9 char Field_Valid() 21_0_0_0_1_0_9_Field_Valid()_0 15000000010009Field_Valid()00 3.0  
RuleText 10 char "Hodnota neodpovídá..." 31_0_0_0_1_0_10_"Hodnota neodpovídá..."_0 1F00000001000A"Hodnota neodpovídá..."00 3.0  
DefaultValue 11 char Date() 14_0_0_0_1_0_11_Date()_0 0E00000001000BDate()00 3.0  
Caption 56 char Datum odeslání 22_0_0_0_1_0_56_Datum odeslání_0 16000000010038Datum odeslání00 3.0  
DisplayClass 50 char _mujtextbox 19_0_0_0_1_0_50__mujtextbox_0 13000000010032_mujtextbox00 5.0  
DisplayClassLibrary 51 char XXCLASS.VCX 19_0_0_0_1_0_51_XXCLASS.VCX_0 13000000010033XXCLASS.VCX00 5.0  
InputMask 54 char XX 10_0_0_0_1_0_54_XX_0 0A000000010036XX00 3.0  
Format 55 char !! 10_0_0_0_1_0_55_!!_0 0A000000010037!!00 3.0  
 
 Index
Primary/Candidate 17 bool 1 8_0_0_0_1_0_17_1 0800000001001101 3.0  
 
 Relace
ChildTag 13 char InMesto 15_0_0_0_1_0_13_InMesto_00 0F00000001000DInMesto00 3.0  
ParentTable 18 char TaMesto 15_0_0_0_1_0_18_TaMesto_00 0F000000010012TaMesto00 3.0  
ParentTag 19 char InUlice 15_0_0_0_1_0_19_InUlice_00 0F000000010013InUlice00 3.0  
 
 Spojení
Comment 7 char Toto je můj komentář 28_0_0_0_1_0_7_Toto je můj komentář_0 1C000000010007Toto je můj komentář00 3.0  
DataSource 29 char MS SQL 14_0_0_0_1_0_29_MS SQL_0 0E00000001001DMS SQL00 3.0  
Asynchronous 64 bool 1 8_0_0_0_1_0_64_1 0800000001004001 3.0  
BatchMode 65 bool 1 8_0_0_0_1_0_65_1 0800000001004101 3.0  
ConnectString 66 char DSN=test;pwd=bla 24_0_0_0_1_0_66_DSN=test;pwd=bla_0 18000000010042DSN=test;pwd=bla00 3.0  
ConnectTimeout 67 uir 1 11_0_0_0_1_0_67_0_0_0_15 0B00000001004300000015 3.0  
DispLogin 68 byte 1 8_0_0_0_1_0_68_1 0800000001004401 3.0  
DispWarnings 69 bool 1 8_0_0_0_1_0_69_1 0800000001004201 3.0  
IdleTimeout 70 uir 0 11_0_0_0_1_0_70_0_0_0_0 0B00000001004600000000 3.0  
QueryTimeout 71 uir 0 11_0_0_0_1_0_71_0_0_0_0 0B00000001004700000000 3.0  
Password 72 char heslo 13_0_0_0_1_0_72_heslo_0 0D000000010048heslo00 3.0  
Transactions 73 byte 1 8_0_0_0_1_0_73_1 0800000001004901 3.0  
UserId 74 char admin 13_0_0_0_1_0_74_admin_0 0D00000001004Aadmin00 3.0  
WaitTime 75 uir 100 11_0_0_0_1_0_75_0_0_0_100 0B00000001004B00000064 3.0  
PacketSize 78 uir 0 11_0_0_0_1_0_78_0_16_0_0 0B00000001004E00001600 3.0  
Database 79 char master 14_0_0_0_1_0_79_master_0 0E00000001004Fmaster00 3.0  
DisconnectRollback 89 bool 0 8_0_0_0_1_0_89_0 0800000001005901 9.0  
 
 Pohled
SubType 2 byte 6 8_0_0_0_1_0_2_6 0800000001000206 3.0 6 - lokální, 7 - vzdálený
Comment 7 char Toto je můj komentář 28_0_0_0_1_0_7_Toto je můj komentář_0 1C000000010007Toto je můj komentář00 3.0  
RuleExpression 9 char View_Valid() 20_0_0_0_1_0_9_View_Valid()_0 14000000010009View_Valid()00 3.0  
RuleText 10 char "Nemáte přístup k pohledu" 34_0_0_0_1_0_10_"Nemáte přístup k pohledu"_0 2200000001000A"Nemáte přístup k pohledu"00 3.0  
ParameterList 12 char Pol1,"C";Pol2,"D" 25_0_0_0_1_0_12_Pol1,"C";Pol2,"D"_0 1900000001000CPol1,"C";Pol2,"D"00 3.0  
BatchUpdateCount 28 uir 1 11_0_0_0_1_0_28_0_0_0_1 0B00000001001C00000001 3.0  
ConnectName 32 char Moje_Spojeni 20_0_0_0_1_0_32_Moje_Spojeni_0 14000000010020Moje_Spojeni00 3.0  
FetchMemo 36 bool 1 8_0_0_0_1_0_36_1 0800000001002401 3.0  
FetchSize 37 uir 100 11_0_0_0_1_0_37_0_0_0_100 0B00000001002500000064 3.0  
MaxRecords 39 uir -1 11_0_0_0_1_0_39_255_255_255_255 0B000000010027FFFFFFFF 3.0  
ShareConnection 40 bool 1 8_0_0_0_1_0_40_1 0800000001002801 3.0  
SourceType 41 byte 1 8_0_0_0_1_0_41_1 0800000001002901 3.0  
SQL 42 char SELECT * FROM TaMesto 29_0_0_0_1_0_42_SELECT * FROM TaMesto_0 1D00000001002ASELECT * FROM TaMesto00 3.0  
Tables 43 char TaMesto 15_0_0_0_1_0_43_TaMesto_0 0F00000001002BTaMesto00 3.0  
SendUpdates 44 bool 1 8_0_0_0_1_0_44_1 0800000001002C01 3.0  
UpdateType 46 byte 1 8_0_0_0_1_0_46_1 0800000001002E01 3.0  
UseMemoSize 47 uir 255 11_0_0_0_1_0_47_0_0_0_255 0B00000001002F000000FF 3.0  
WhereType 48 byte 3 8_0_0_0_1_0_48_3 0800000001003003 3.0  
Prepared 80 bool 0 8_0_0_0_1_0_80_0 0800000001005000 5.0  
CompareMemo 81 bool 1 8_0_0_0_1_0_81_1 0800000001005110 5.0  
FetchAsNeeded 82 bool 0 8_0_0_0_1_0_82_0 0800000001005200 5.0  
Offline 83 bool 0 8_0_0_0_1_0_83_0 0800000001005300 5.0  
AllowSimultaneousFetch 88 bool 0 8_0_0_0_1_0_88_0 0800000001005800 8.0  
 
 Položka v pohledu
 (Zbylé vlastnosti jsou stejné jako u Položky)
UpdateName 35 char TaMesto.Pol1 20_0_0_0_1_0_35_TaMesto.Pol1_0 14000000010023TaMesto.Pol100 3.0  
KeyField 38 bool 1 8_0_0_0_1_0_38_1 0800000001002601 3.0  
Updatable 45 bool 1 8_0_0_0_1_0_45_1 0800000001002D01 3.0  
DataType 77 char C(40) 13_0_0_0_1_0_77_C(40)_0 0D00000001004DC(40)00 3.0  
  77 char D 9_0_0_0_1_0_77_D_0 0900000001004DD00 3.0  
 
 Neznámé vlastnosti
TimeStamp 76 ???? ???? ???? ???? 3.0  
  84 ???? ???? ???? ???? 3.0  
  85 ???? ???? ???? ???? 3.0  

K dispozici je utilita pro načítání a ukládaná všech vlastností do DBC konteineru. Příklad použítí je hned na začátku.





Použitý materiál:
Doug Henning: SPECIAL REPORT - Visual FoxPro Data Dictionary,Pinnacle Publishing Inc.,Kent,1995, ISBN 1-880935-41-4