|
Тема |
GET RDB$DEFAULT_VALUE |
|
Автор | EFEX (Нерегистриран) | |
Публикувано | 05.10.05 18:51 |
|
|
Преди да почна да ровя като журналист в л..но...
Ако някой знае ..pleasseee... help'МИ... :))))
(БД IBase6.x)(C++)
искам да прочета стойноста по подразбиране на полето в таблица
-------
"FIELD1" TIMESTAMP DEFAULT 'NOW' NOT NULL,
"FIELD2" INTEGER DEFAULT 1024.
т.е. искам да извлека (DEFAULT 'NOW') && (DEFAULT 1024) като текст ли като стойност ли де да знам и аз как е записано.
RDB$DEFAULT_VALUE във RDB$RELATION_FIELDS e BLOB
(възможно е и да не чета вярното поле)
ето кода:
==========================================
PDBFieldProp *DBFieldProp; //мисля тази структура ви е ясна
IBQuery->Close();
IBQuery->SQL->Clear();
IBQuery->SQL->Add("SELECT A.RDB$FIELD_POSITION+1, A.RDB$FIELD_NAME, A.RDB$DEFAULT_VALUE, A.RDB$NULL_FLAG,");
IBQuery->SQL->Add(" C.RDB$TYPE, C.RDB$TYPE_NAME, B.RDB$FIELD_LENGTH");
IBQuery->SQL->Add("FROM RDB$RELATION_FIELDS A");
IBQuery->SQL->Add(" LEFT JOIN RDB$FIELDS B ON A.RDB$FIELD_SOURCE = B.RDB$FIELD_NAME");
IBQuery->SQL->Add(" LEFT JOIN RDB$TYPES C ON C.RDB$TYPE=B.RDB$FIELD_TYPE");
IBQuery->SQL->Add("WHERE A.RDB$RELATION_NAME = :TABLENAME");
IBQuery->SQL->Add(" AND (C.RDB$FIELD_NAME='RDB$FIELD_TYPE')");
IBQuery->SQL->Add("ORDER BY RDB$FIELD_POSITION");
try{
IBQuery->Prepare();
IBQuery->Params->Items[0]->AsString = TableName; // тук напишете вашата таблица
IBQuery->Open();
while ( !IBQuery->Eof ){
DBFieldProp = new PDBFieldProp();
DBFieldProp->RDBNAME = IBQuery->Fields->Fields[1]->AsString;
DBFieldProp->RDBDEFAULT = IBQuery->Fields->Fields[2]->AsString;
if ( IBQuery->Fields->Fields[2]->IsBlob() ){
void *MyBuffer = malloc(IBQuery->Fields->Fields[2]->DataSize); // тук дебъгера дава DataSize = 0 ??
IBQuery->Fields->Fields[2]->GetData(MyBuffer,true);
DBFieldProp->RDBDEFAULT = IBQuery->Fields->Fields[2]->AsString;
delete MyBuffer;
}
DBFieldProp->RDBNOTNULL = (IBQuery->Fields->Fields[3]->AsInteger == 1);
DBFieldProp->RDBTYPE = IBQuery->Fields->Fields[4]->AsInteger;
DBFieldProp->RDBTYPENAME = IBQuery->Fields->Fields[5]->AsString;
DBFieldProp->RDBLENGTH = IBQuery->Fields->Fields[6]->AsInteger;
ListTables->AddObject(IBQuery->Fields->Fields[1]->AsString.Trim(),(TObject*)(DBFieldProp));
IBQuery->Next();
}
}catch(...){
IBQuery->Close();
}
IBQuery->Close();
======================================================
не съм сигурен че и с BLOB-a действам както трябва но кода за BLOB e ОТ хелпа..
Има само един начин да станеш човек: ...........................
(а защо се интересуваш)
|
| |
|
|
|