Перейти к содержанию
Fire Monkey от А до Я

Navadvipa Chandra das

Пользователи
  • Постов

    3
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Активность репутации

  1. Like
    Navadvipa Chandra das получил реакцию от krapotkin в FireDAC, PostgreSQL процедуры и Blob параметры   
    Здравствуйте!
    Блоб параметры в процедурах 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;
    }
     
    Вопрос закрыт!
    Спасибо!
    С уважением, Навадвипа Чандра дас.
×
×
  • Создать...