Exemplo n.º 1
0
//---------------------------------------------------------------------------
__fastcall TFormReport::TFormReport(TComponent* Owner, TMyFields fields,
         AnsiString QueryString, AnsiString filename, bool hidePokupatel, bool hideDate)
   : TForm(Owner)
{
   id_partner = -1;
   a = true;
   DateEnd->Date = Date();
   DateStart->Date = Date();
   Report = new TFReport();
   Fields = fields;
   QueryStr = QueryString;
   ReportFileName = filename;
   FrameList1->Query = CreateQuery(this, DateReplace(QueryString), true);
   FrameList1->Query->Name = "NaklDS";
   FrameList1->Query->OnFilterRecord = IBQuery1FilterRecord;
   Refresh();
   FrameList1->Query->Filtered = true;
   if(hidePokupatel){
      EditPartner->Visible = false;
      cxLabel3->Visible = false;
      EditGroup->Top = EditPartner->Top;
      EditGroup->Top = EditPartner->Top;
      cxLabel1->Top = cxLabel3->Top;
   }
   if(hideDate){
      DateStart->Visible = false;
      DateEnd->Visible = false;
   }

//   DateEnd->Properties->OnChange = DateChange;
//   DateStart->Properties->OnChange = DateChange;

}
Exemplo n.º 2
0
//---------------------------------------------------------------------------
// Змінює дані строки в таблиці.
//---------------------------------------------------------------------------
bool UpdateTable(AnsiString tname, int identity, TMyColumns args, AnsiString id_name)
{
   bool rezult = true;
   TMyColumns::iterator iter;
   AnsiString str = "update "+tname+" set ";
   unsigned int i=0;
   for(iter = args.begin(); iter != args.end(); ++iter)
   {
      str += iter->first + "=:p_"+iter->first + (i == args.size()-1?" ":", ");
      i++;
   }
   str += " where "+((id_name == NULL)? ("ID_" + tname) : id_name)+" = :p_ID_"+tname;
   TIBQuery *q = CreateQuery(0, str, false);
   i=0;
   for(iter = args.begin(); iter != args.end(); ++iter)
   {
      q->ParamByName("p_"+iter->first)->Value = iter->second;
      i++;
   }
   try{
      if(identity > 0)
      {
         q->ParamByName("p_ID_"+tname)->Value = identity;
         q->ExecSQL();
         q->Transaction->Commit();
      }else{
         rezult = false;
      }
   }catch(...){
      rezult = false;
   }
   delete q;
   return rezult;
}
Exemplo n.º 3
0
//---------------------------------------------------------------------------
__fastcall TPartnerListForm::TPartnerListForm(TComponent* Owner, TPartnerType pt)
   : TForm(Owner)
{
   FrameList1->Query = CreateQuery(this, "select id_partner, namepartner, saldo, info from Partner", true);
   Refresh();
   switch (pt)
   {
      case ptPokupec:
        RadioButtonPokupec->Checked = true;
        RadioButtonPostach->Enabled = false;
        RadioButtonRashod->Enabled = false;
      break;
      case ptPostach:
        RadioButtonPostach->Checked = false;
        RadioButtonPostach->Checked = true;
        RadioButtonPokupec->Enabled = false;
        RadioButtonRashod->Enabled = false;
      break;
      case ptRashod:
        RadioButtonPokupec->Enabled = false;
        RadioButtonPostach->Enabled = false;
        RadioButtonRashod->Checked = true;
      break;
      case ptAll:
        RadioButtonPostach->Checked = false;
        RadioButtonPostach->Checked = true;
      break;
   }
}
Exemplo n.º 4
0
//---------------------------------------------------------------------------
// Удаляє строку з таблиці.
//---------------------------------------------------------------------------
bool DeleteFromTable(AnsiString tname, int identity,bool message, AnsiString id_name )
{
   bool rezult = true;
   bool del = false;
   if(message)
   {
      if(MessageDlg("Ви дійсно хочете знищити запис?",
         mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
      {
         del = true;
      }
   }else{
      del = true;
   }
   TIBQuery *q = CreateQuery(0,
       "delete from "+tname+" where "+((id_name == NULL)? ("ID_" + tname) : id_name)+" = "+IntToStr(identity)
   , false);
   try
   {
      if(del){
         q->ExecSQL();
         q->Transaction->Commit();
      }else{
         rezult = false;
      }
   }catch(...){
      rezult = false;
   }
   delete q;
   return rezult;
}
Exemplo n.º 5
0
//---------------------------------------------------------------------------
// Вставляє стоку в таблицю.
//---------------------------------------------------------------------------
int InsertIntoTable(AnsiString tname, TMyColumns args)
{
   int rezult = true;
   TMyColumns::iterator iter;
   AnsiString str = "insert into "+tname+" (";
   AnsiString str_p = " values (";
   unsigned int i=0;
   for(iter = args.begin(); iter != args.end(); ++iter)
   {
      str += iter->first + (i == args.size()-1?" ) ":", ");
      str_p += ":p_"+iter->first + (i == args.size()-1?" ) ":", ");
      i++;
   }
   str += str_p;
   TIBQuery *q = CreateQuery(0, str, false);
   for(iter = args.begin(); iter != args.end(); ++iter)
   {
      q->ParamByName("p_"+iter->first)->Value = iter->second;
      i++;
   }
   try{
      q->ExecSQL();
      q->Transaction->Commit();
//      q->SQL->Clear();
 //     q->SQL->Add( "select @@identity as 'id'" );
//      q->Open();
 //     rezult = q->FieldByName("id")->AsInteger;
   rezult = 0;
   }catch(...){
      rezult = false;
   }
   delete q;

   return rezult;
}
Exemplo n.º 6
0
//----------------------------------------------------------------------------
void PointInPolyhedron::CreateScene ()
{
    mScene = new0 Node();
    mWireState = new0 WireState();
    mRenderer->SetOverrideWireState(mWireState);

    // Create a semitransparent sphere mesh.
    VertexFormat* vformatMesh = VertexFormat::Create(1,
        VertexFormat::AU_POSITION, VertexFormat::AT_FLOAT3, 0);
    TriMesh* mesh = StandardMesh(vformatMesh).Sphere(16, 16, 1.0f);
    Material* material = new0 Material();
    material->Diffuse = Float4(1.0f, 0.0f, 0.0f, 0.25f);
    VisualEffectInstance* instance = MaterialEffect::CreateUniqueInstance(
        material);
    instance->GetEffect()->GetAlphaState(0, 0)->BlendEnabled = true;
    mesh->SetEffectInstance(instance);

    // Create the data structures for the polyhedron that represents the
    // sphere mesh.
    CreateQuery(mesh);

    // Create a set of random points.  Points inside the polyhedron are
    // colored white.  Points outside the polyhedron are colored blue.
    VertexFormat* vformat = VertexFormat::Create(2,
        VertexFormat::AU_POSITION, VertexFormat::AT_FLOAT3, 0,
        VertexFormat::AU_COLOR, VertexFormat::AT_FLOAT3, 0);
    int vstride = vformat->GetStride();

    VertexBuffer* vbuffer = new0 VertexBuffer(1024, vstride);
    VertexBufferAccessor vba(vformat, vbuffer);
    Float3 white(1.0f, 1.0f, 1.0f);
    Float3 blue(0.0f, 0.0f, 1.0f);
    for (int i = 0; i < vba.GetNumVertices(); ++i)
    {
        Vector3f random(Mathf::SymmetricRandom(),
            Mathf::SymmetricRandom(), Mathf::SymmetricRandom());

        vba.Position<Vector3f>(i) = random;

        if (mQuery->Contains(random))
        {
            vba.Color<Float3>(0, i) = white;
        }
        else
        {
            vba.Color<Float3>(0, i) = blue;
        }
    }

    DeleteQuery();

    mPoints = new0 Polypoint(vformat, vbuffer);
    mPoints->SetEffectInstance(VertexColor3Effect::CreateUniqueInstance());

    mScene->AttachChild(mPoints);
    mScene->AttachChild(mesh);
}
Exemplo n.º 7
0
//---------------------------------------------------------------------------
int __fastcall TDocPrihod::GetNewNomer()
{
   int result = -1;
   TIBQuery * q = CreateQuery(0, "select gen_id(gen_nomer_prihod,1) from rdb$database", true);
   if(!q->FieldByName("gen_id")->IsNull)
      result = q->FieldByName("gen_id")->AsInteger;
   FNomer = result;
   return result;
}
Exemplo n.º 8
0
unsigned int Database::Rewrite()
{
    std::string new_filename(m_filename);
    new_filename += ".new";
    FILE *f = fopen(new_filename.c_str(), "w+");
    if (!f)
    {
	TRACE << "Can't write timer database: " << errno << "\n";
	return (unsigned)errno;
    }

    fprintf(f, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
    fprintf(f, "<timerdb>\n");

    db::QueryPtr qp = CreateQuery();
    qp->Where(qp->Restrict(tv::epg::STATE, db::NE, tv::epg::NONE));

    for (db::RecordsetPtr rs = qp->Execute();
	 rs && !rs->IsEOF(); 
	 rs->MoveNext())
    {
	unsigned int state = rs->GetInteger(tv::epg::STATE);

	if (state == NONE || state == CANCELLED)
	    continue;

	fprintf(f, "<record><id>%u</id>"
		"<title>%s</title>"
		"<description>%s</description>"
		"<start>%u</start>"
		"<end>%u</end>"
		"<channel>%u</channel>"
		"<state>%s</state></record>\n",
		rs->GetInteger(ID),
		util::XmlEscape(rs->GetString(TITLE)).c_str(),
		util::XmlEscape(rs->GetString(DESCRIPTION)).c_str(),
		rs->GetInteger(START),
		rs->GetInteger(END),
		rs->GetInteger(CHANNEL),
		statemap[state]);
    }
    fprintf(f, "</timerdb>\n");

    if (ferror(f))
    {
	fclose(f);
	unlink(new_filename.c_str());
	return (unsigned)errno;
    }
    fclose(f);

    int rc = ::rename(new_filename.c_str(), m_filename);
    if (rc)
	return (unsigned)errno;
    return 0;
}
Exemplo n.º 9
0
//---------------------------------------------------------------------------
float __fastcall TKassa::GetOplataNakladna(int Nomer, int Partner)
{
   float result = 0;
   TIBQuery * q = CreateQuery(NULL,
   " select sum(suma) sumaoplata from kassa where typedok = 2 and nomerdok = "
   +   IntToStr(Nomer)+ " and id_partner = "+IntToStr(Partner),true);
   result = q->FieldByName("sumaoplata")->AsFloat;
   delete q;
   return result;
}
Exemplo n.º 10
0
//---------------------------------------------------------------------------
void __fastcall TDocPrihod::Delete()
{
   if(MessageDlg("¬и действительно хотите удалить целый документ?",
         mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
   {
      TIBQuery * q = CreateQuery(0, "delete from prihod where nomer = " + IntToStr(FNomer), true);
      delete q;
   }

}
Exemplo n.º 11
0
//---------------------------------------------------------------------------
void TRashod::Fill(int id)
{
   TIBQuery * q = CreateQuery(0, "select * from rashod where id_rashod="+IntToStr(id),true);
   FID_Rashod = q->FieldByName("ID_Rashod")->AsInteger;
   FID_Partner = q->FieldByName("ID_Partner")->AsInteger;
   FCina = q->FieldByName("Cina")->AsFloat;
   FKilxkist = q->FieldByName("Kilxkist")->AsFloat;
   FID_Tovar = q->FieldByName("ID_Tovar")->AsInteger;
   FNomer = q->FieldByName("Nomer")->AsInteger;
   FDataDok = q->FieldByName("datadok")->AsDateTime;
}
Exemplo n.º 12
0
//---------------------------------------------------------------------------
void __fastcall TKassa::Fill(int id)
{
   TIBQuery * q = CreateQuery(0, "select * from kassa where id_kassa="+IntToStr(id),true);
   FID_Kassa = q->FieldByName("id_kassa")->AsInteger;
   FID_Partner = q->FieldByName("ID_Partner")->AsInteger;
   FSuma = q->FieldByName("Suma")->AsFloat;
   FTypeDok = (TTypeDok)q->FieldByName("TypeDok")->AsInteger;
   FNomerDok = q->FieldByName("NomerDok")->AsInteger;
   FData = q->FieldByName("Data")->AsDateTime;
   FComment = q->FieldByName("Comment")->AsString;
   FPartner = new TPartner(q->FieldByName("id_partner")->AsInteger);
   delete q;
}
Exemplo n.º 13
0
 bool Connection::Exists( std::string const& tn )
 {
     bool rtv = false;
     if( !qExists )
     {
         qExists = CreateQuery( "SELECT count(*) FROM sqlite_master WHERE type = 'table' AND name = ?" );
     }
     ( *qExists ).Add( tn );
     qExists->Execute( [ &]( Sqlite::DataReader& dr )
     {
         rtv = dr.ReadInt32() > 0;
     } );
     return rtv;
 }
Exemplo n.º 14
0
//---------------------------------------------------------------------------
void TDocPrihod::Fill(int nomer)
{
   TIBQuery * q = CreateQuery(0,
   "select nomer, datadok, id_partner, sum(kilxkist*cina) as suma from prihod where nomer = "
   +IntToStr(nomer)+
   " group by nomer, datadok, id_partner"
                     ,true);
   FDataDok = q->FieldByName("datadok")->AsDateTime;
   FNomer = nomer;
   FSuma = q->FieldByName("suma")->AsFloat;
   if(!FPartner)
      FPartner = new TPartner(q->FieldByName("id_partner")->AsInteger);

}
// @cmember Retrieves the query which was passed to the tag.
CCFXQuery*
CCFXRequestImpl::GetQuery()
{
	// Query _request.getQuery()
	jmethodID getQuery = _env->GetMethodID( _env->GetObjectClass( _request ), "getQuery",
												"()Lcom/allaire/cfx/Query;" );
	if ( getQuery == NULL )
		throw new CCFXExceptionImpl( "Failed to get _request.getQuery() method", "CCFXRequestImpl::GetQuery" );
	
	jobject query = _env->CallObjectMethod( _request, getQuery );
	if ( query == NULL )
		return NULL;
		
	return CreateQuery( query );
}	
Exemplo n.º 16
0
//---------------------------------------------------------------------------
__fastcall TPrihodForm::TPrihodForm(TComponent* Owner, TDocPrihod * doc)
   : TDocumentForm(Owner)
{
   Report = new TFReport();
   Document = doc;
   DocToForm();
   FrameList1->Query = CreateQuery(this, 
         "select p.id_prihod, p.id_tovar,t.kod, t.nametovar,p.kilxkist, p.cina "
         " from Tovar t, Prihod p "
         " where p.nomer = "+IntToStr(Document->Nomer)+
         " and p.id_tovar = t.id_tovar"
         ,true);
   FrameList1->Query->Name = "PrihodDS";
   Refresh();
}
// @cmember Adds a query to the template which contains this tag.
CCFXQuery*
CCFXRequestImpl::AddQuery( LPCSTR lpszName, CCFXStringSet* pColumns )
{
	if ( ( lpszName == NULL ) || ( pColumns == NULL ) ) 
		return NULL;
	
	// Query _response.addQuery( String name, String[] columns )
	jmethodID addQuery = _env->GetMethodID( _env->GetObjectClass( _response ), "addQuery",
									"(Ljava/lang/String;[Ljava/lang/String;)Lcom/allaire/cfx/Query;" );
	if ( addQuery == NULL )
		throw new CCFXExceptionImpl( "Failed to get _response.addQuery() method", "CCFXRequestImpl::AddQuery" );
	
	jobjectArray columns = ((CCFXStringSetImpl*)pColumns)->ToJavaObjectArray( _env );
	jstring name = _env->NewStringUTF( lpszName );
	
	return CreateQuery( _env->CallObjectMethod( _response, addQuery, name, columns ) );
}
Exemplo n.º 18
0
BOOL CLController::Restore( void )
{	// 모든 군주 시스템 협력 객체들의 복원
	CQuery* pQuery	= CreateQuery();
	if( !pQuery )
		return FALSE;
	CTElection* pElection	= static_cast<CTElection*>( m_pLord->GetElection() );
	CLEvent* pEvent		= static_cast<CLEvent*>( m_pLord->GetEvent() );
	CTLordSkill* pSkills	= static_cast<CTLordSkill*>( m_pLord->GetSkills() );
	
	if( m_pLord->Restore( pQuery ) && pElection->Restore( pQuery )
		&& pEvent->Restore( pQuery ) && pSkills->Restore( pQuery ) )
	{
		SAFE_DELETE( pQuery );
		return TRUE;
	}
	SAFE_DELETE( pQuery );	
	return FALSE;
}
Exemplo n.º 19
0
void CDbController::DbHandler( void )
{
	CQuery* pQuery	= CreateQuery();
	if( !pQuery )
		return;
	SetQueryObject( pQuery );

	BOOL bReturnValue	= FALSE;
	DWORD dwBytesTransferred	= 0;
	DWORD dwCompletionKey	= 0;
	LPDB_OVERLAPPED_PLUS pov	= NULL;

	while( 1 )
	{
		bReturnValue
			= ::GetQueuedCompletionStatus( m_hIocp,
																		&dwBytesTransferred,
																		&dwCompletionKey,
																		(LPOVERLAPPED*)&pov,
																		INFINITE 
																	);
		if( FALSE == bReturnValue )
		{
			ASSERT( 0 );
		}
		if( dwBytesTransferred == 0 )
		{
			SAFE_DELETE( pQuery );
			return;
		}

		if( pov->nQueryMode == eTimer )
			OnTimer();
		
		Handler( pov, dwCompletionKey );

		//	mulcom	BEGIN100415	DB_OVERLAPPED_PLUS 메모리 풀 사용.
		SAFE_DELETE_ARRAY( pov->lpBuf );
		//	mulcom	END100415	DB_OVERLAPPED_PLUS 메모리 풀 사용.
		SAFE_DELETE( pov );
	}
}
Exemplo n.º 20
0
//---------------------------------------------------------------------------
__fastcall TNakladnaForm::TNakladnaForm(TComponent* Owner, TDocRashod * doc)
   : TDocumentForm(Owner)
{
   Report = new TFReport();
   Document = doc;
   DocToForm();
   FrameList1->Query = CreateQuery(this, 
         "select r.id_rashod, r.id_tovar,t.kod, t.nametovar,r.kilxkist, t.cinaprodazh, r.cina "
         " from Tovar t, Rashod r "
         " where r.nomer = "+IntToStr(Document->Nomer)+
         " and r.id_tovar = t.id_tovar order by r.id_rashod"
         ,true);
   FrameList1->Query->Name = "NakDS";
   TRashod * r = new TRashod(FrameList1->Query->FieldByName("id_rashod")->AsInteger);
   TTovar * t = new TTovar(r->ID_Tovar,Document->Partner->ID_Partner);
   if(t->CinaProdazh != 0)
        cxSpinEditProcent->Value = Round(((t->CinaProdazh - r->Cina)/t->CinaProdazh)*100,0);
   delete r;
   delete t;
   Refresh();

}
Exemplo n.º 21
0
BOOL CCoupleController::Restore()
{
	CQuery* pQuery	= CreateQuery();
	if( !pQuery )
		return FALSE;
	if( !pQuery->Execute( "uspRestoreCouple %d", g_appInfo.dwSys ) )
	{
		Error( "couldn't execute uspRestoreCouple" );
		return FALSE;
	}
	while( pQuery->Fetch() )
	{
		int nExperience	= pQuery->GetInt( "nExperience" );
		u_long idFirst	= pQuery->GetInt( "idFirst" );
		u_long idSecond	= pQuery->GetInt( "idSecond" );
		CCouple* pCouple	= new CCouple( idFirst, idSecond );
		m_pHelper->Couple( pCouple );
		pCouple->AddExperience( nExperience );
	}

	pQuery->Clear();
	if( !pQuery->Execute( "uspRestorePropose %d", g_appInfo.dwSys ) )
	{
		Error( "couldn't execute uspRestorePropose" );
		return FALSE;
	}
	while( pQuery->Fetch() )
	{
		u_long idProposer	= pQuery->GetInt( "idProposer" );
		time_t tPropose	= pQuery->GetInt( "tPropose" );
		bool bResult	= m_pHelper->AddPropose( idProposer, tPropose );
		ASSERT( bResult );
	}
	
	SAFE_DELETE( pQuery );
	return FALSE;
}
Exemplo n.º 22
0
SQLHSTMT ODBC::ExecuteSql( const char* sqltext, const char* format, ... )
{
	int ior; // 0 - in, 1 - out, 2 - ret, возращаемое значение процедурой
	int inum = 1, // номер входного параметра
		onum = 1; // номер выходного параметра
	SQLSMALLINT typeSql, // тип параметра дл¤ базы данных
				typeCpp; // тип параметра дл¤ c++

	SQLUINTEGER clnsz; // размер пол¤ дл¤ некоторых типов
	SQLSMALLINT digits; // чисел после зап¤той дл¤ некоторых типов

	SQLLEN sqlNTS = SQL_NTS; //строка завершаетс¤ 0
	SQLLEN sqlNullData = SQL_NULL_DATA; //передаем Null

	int tsz; // размер типа в байтах

	va_list va;
	va_start( va, format );

	SQLHSTMT qr = CreateQuery(sqltext);

	while( format && *format )
	{
		while( *format == ' ' ) format++;
		switch( *format++ )
		{
			case 'i': ior = 0; break;
			case 'o': ior = 1; break;
			case 'r': ior = 2; break;
			case '!': ior = -1; break;
		}	
		typeCpp = 0; clnsz = 0; digits = 0;
		bool null = false;
		SQLPOINTER ptr = va_arg( va, SQLPOINTER );
		SQLLEN* strLenOrNull = 0;
		if( ior >= 0 )
		{
			// если надо дл¤ получаемых данных узнать их длину или узнать, равно ли это
			// значение NULL (длина = -1)
			if( *format == '0' ) format++, null = true;
			switch( *format++ ) 
			{
				case 'b': typeSql = SQL_CHAR;    typeCpp = SQL_C_UTINYINT; tsz = sizeof(char); break;
				case 'c': typeSql = SQL_CHAR;    typeCpp = SQL_C_STINYINT; tsz = sizeof(char); break;
				case 'i': typeSql = SQL_INTEGER; typeCpp = SQL_C_SLONG;    tsz = sizeof(int); break;
				case 'u': 
					switch( *format++ )
					{
						case ' ':
						case 0  : typeSql = SQL_INTEGER;  typeCpp = SQL_C_ULONG;  tsz = sizeof(int); break;
						case 'h': typeSql = SQL_SMALLINT; typeCpp = SQL_C_USHORT; tsz = sizeof(short); break;
					}
					break;
				case 'd': typeSql = SQL_DOUBLE; typeCpp = SQL_C_DOUBLE; tsz = sizeof(double); break;
				case 'f': typeSql = SQL_REAL;   typeCpp = SQL_C_FLOAT;  tsz = sizeof(float); break;
				case 's':
					typeSql = SQL_CHAR; typeCpp = SQL_C_CHAR;
					clnsz = tsz = gettsz(&format);
					strLenOrNull = &sqlNTS;
					break;
				case 'h': typeSql = SQL_SMALLINT; typeCpp = SQL_C_SSHORT; tsz = sizeof(short); break;
				case 't': 
					typeSql = SQL_TYPE_TIMESTAMP; typeCpp = SQL_TYPE_TIMESTAMP; tsz = sizeof(TIMESTAMP_STRUCT); 
					if( ((TIMESTAMP_STRUCT*)ptr)->year == 0 )
						strLenOrNull = &sqlNullData;
					break;
				case 'r':
					typeSql = SQL_LONGVARBINARY; typeCpp = SQL_C_BINARY;
					clnsz = tsz = gettsz(&format);
					break;
			}
		}
		// если возращаемое значение равно NULL, то его длина равна -1, поэтому нужно
		// в таких случа¤х об¤зательно передавать указатель дл¤ сохранени¤ длины, иначе
		// при встрече NULL ODBC выдаст ошибку
		SQLLEN* len = null ? va_arg( va, SQLLEN* ) : &lenForNull;
		if( ior == 0 && null ) strLenOrNull = len;
		switch( ior )
		{
			case -1:
				break;
			case 0:
				if( (int)pSQLBindParameter( qr, inum++, SQL_PARAM_INPUT, typeCpp, typeSql, clnsz, digits, ptr, 0, strLenOrNull ) == SQL_ERROR )
				{
					DBG( "ODBC", "Error in param %d" );
				}
				break;
			case 1:
				pSQLBindCol( qr, onum++, typeCpp, ptr, tsz, len );
				break;
			case 2:
				pSQLBindParameter( qr, inum++, SQL_PARAM_OUTPUT, typeCpp, typeSql, clnsz, digits, ptr, 0, 0 );
				break;
		}
	}
	va_end(va);

	if( (SQLRETURN)pSQLExecute(qr) != SQL_ERROR )
		if( onum > 1 ) //есть выходные пол¤
		{
			if( NextRow(qr) )
				return qr;
		}
		else
			return qr;
	PrintQueryError(qr);
	CloseQuery(qr);
	return 0;
}
/**
 * Give the async task time to do its work
 * Can only be called on the async task manager thread
 */
void FOnlineAsyncTaskSteamFindServerBase::Tick()
{
	ISteamUtils* SteamUtilsPtr = SteamUtils();
	check(SteamUtilsPtr);

	if (!bInit)
	{
		SteamMatchmakingServersPtr = SteamMatchmakingServers();
		check(SteamMatchmakingServersPtr);

		int32 NumFilters = 0;
		MatchMakingKeyValuePair_t* Filters = NULL;
		CreateQuery(&Filters, NumFilters);

#if DEBUG_STEAM_FILTERS
		for (int32 FilterIdx=0; FilterIdx<NumFilters; FilterIdx++)
		{
			UE_LOG_ONLINE(Verbose, TEXT(" \"%s\" \"%s\" "), UTF8_TO_TCHAR(Filters[FilterIdx].m_szKey), UTF8_TO_TCHAR(Filters[FilterIdx].m_szValue));
		}
#endif

		if (SearchSettings->MaxSearchResults <= 0)
		{
			UE_LOG_ONLINE(Warning, TEXT("FOnlineAsyncTaskSteamFindServerBase::Tick - SearchSettings->MaxSearchResults should be greater than 0, but it is currently %d. No search results will be found."), SearchSettings->MaxSearchResults);
		}

		ServerListRequestHandle = SteamMatchmakingServersPtr->RequestInternetServerList(Subsystem->GetSteamAppId(), &Filters, NumFilters, this);
		if (ServerListRequestHandle == NULL)
		{
			// Invalid API call
			bIsComplete = true;
			bWasSuccessful = false;
		}

		// Preallocate space for results
		PendingSearchResults.Empty(SearchSettings->MaxSearchResults);

		delete [] Filters;
		bInit = true;
	}

	ElapsedTime += 1.0f/16.0f;

	// Cancel query when we've reached our requested limit
	bool bReachedSearchLimit = (SearchSettings->SearchResults.Num() >= SearchSettings->MaxSearchResults) ? true : false;
	// Check for activity timeout
	bool bTimedOut = (ElapsedTime >= ASYNC_TASK_TIMEOUT) ? true : false;
	// Check for proper completion
	bool bServerSearchComplete = (bServerRefreshComplete && PendingSearchResults.Num() == 0) ? true : false;
	if ( bReachedSearchLimit || bTimedOut || bServerSearchComplete)
	{
		bIsComplete = true;
		bWasSuccessful = true;
	}

	if (bIsComplete)
	{
		// Cancel further server queries (may trigger RefreshComplete delegate)
		if (ServerListRequestHandle != NULL)
		{
			SteamMatchmakingServersPtr->CancelQuery(ServerListRequestHandle);
			SteamMatchmakingServersPtr->ReleaseRequest(ServerListRequestHandle);
			ServerListRequestHandle = NULL;
		}

		// Cancel further rules queries
		for (int32 PendingIdx=0; PendingIdx<PendingSearchResults.Num(); ++PendingIdx)
		{
			PendingSearchResults[PendingIdx].CancelQuery();
		}
		PendingSearchResults.Empty();
	}
}