Здравствуйте!
Блоб параметры в процедурах PostgreSQL победить не удалось, а вот та же функциональность через Блоб-поля TFDQuery была достигнута. В целом такой вариант более универсален.
void __fastcall TNNConfig::SaveToDB()
{
if ( Connection && !Connection->Connected )
return;
TMemoryStream* ms = new TMemoryStream();
fFiler = new TNNTextStream( ms );
try {
SaveFilerFromUserEvent();
std::unique_ptr< TFDQuery > quReg( new TFDQuery( this ) );
std::unique_ptr< TFDTransaction > trReg( new TFDTransaction( this ) );
quReg->Connection = Connection;
trReg->Connection = Connection;
quReg->Transaction = trReg.get();
String RK = RegistryKey();
Connection->StartTransaction();
try {
quReg->SQL->Text = "SELECT \"UserRegKey\", \"UserData\" FROM \"UserReg\" where \"UserRegKey\" = :UserRegKey_";
quReg->Params->Items[ 0 ]->DataType = ftString;
quReg->Params->Items[ 0 ]->AsString = RK;
quReg->Open();
if ( quReg->RecordCount == 0 ) {
quReg->Insert();
quReg->Fields->Fields[ 0 ]->AsString = RK;
} else
quReg->Edit();
TBlobField *bf = ((TBlobField *)(quReg->Fields->Fields[ 1 ]));
bf->LoadFromStream( Filer );
quReg->Post();
Connection->Commit();
} catch ( ... ) {
Connection->Rollback();
}
} __finally {
delete fFiler;
fFiler = nullptr;
}
}
bool __fastcall TNNConfig::LoadFromDB()
{
if ( Connection && !Connection->Connected )
return false;
bool B = false;
std::unique_ptr< TFDQuery > quReg( new TFDQuery( this ) );
std::unique_ptr< TFDTransaction > trReg( new TFDTransaction( this ) );
quReg->Connection = Connection;
trReg->Connection = Connection;
quReg->Transaction = trReg.get();
quReg->SQL->Text = "SELECT \"UserRegKey\", \"UserData\" FROM \"UserReg\" where \"UserRegKey\" = :UserRegKey_";
quReg->Params->Items[ 0 ]->DataType = ftString;
quReg->Params->Items[ 0 ]->AsString = RegistryKey();
quReg->Open();
if ( quReg->RecordCount == 1 ) {
TBlobField *bf = ((TBlobField *)(quReg->Fields->Fields[ 1 ]));
bf->SaveToStream( Filer );
B = true;
}
return B;
}
Вопрос закрыт!
Спасибо!
С уважением, Навадвипа Чандра дас.