Can't access stored result again after getting data from it
Closed this issue · 0 comments
ffreality commented
Hi,
I have a class like this to store query results and access them from Unreal Engine's blueprint interface.
UCLASS(BlueprintType)
class FF_DB_SAPODBC_API USAP_ODBC_Result : public UObject
{
GENERATED_BODY()
protected:
odbc::ResultSetRef QueryResult;
public:
virtual bool SetQueryResultPtr(odbc::ResultSetRef ResultReferance);
UFUNCTION(BlueprintCallable)
virtual bool GetColumnCount(int32& ColumnCount);
UFUNCTION(BlueprintCallable)
virtual bool GetMetaDataStruct(FString& Out_Code, FSAP_ODBC_MetaData& Out_MetaData, int32 ColumnIndex = 1);
UFUNCTION(BlueprintCallable)
virtual bool GetString(FString& Out_Code, TArray<FString>& Out_String, int32 ColumnIndex = 1);
UFUNCTION(BlueprintCallable)
virtual bool GetInt(FString& Out_Code, TArray<int32>& Out_String, int32 ColumnIndex = 1);
};
My GetInt
and GetString
functions are like this.
bool USAP_ODBC_Result::GetString(FString& Out_Code, TArray<FString>& Out_String, int32 ColumnIndex)
{
if (this->QueryResult.isNull())
{
Out_Code = "Query result referance is null !";
return false;
}
TArray<FString> TempArray;
try
{
while (this->QueryResult->next())
{
odbc::String ValueString = this->QueryResult->getString(ColumnIndex);
if (!ValueString.isNull())
{
TempArray.Add(UTF8_TO_TCHAR(ValueString->c_str()));
}
}
}
catch (const std::exception& Exception)
{
Out_Code = Exception.what();
return false;
}
Out_String = TempArray;
return true;
}
bool USAP_ODBC_Result::GetInt(FString& Out_Code, TArray<int32>& Out_String, int32 ColumnIndex)
{
if (this->QueryResult.isNull())
{
Out_Code = "Query result referance is null !";
return false;
}
TArray<int32> TempArray;
try
{
while (this->QueryResult->next())
{
odbc::Int ValueInt = this->QueryResult->getInt(ColumnIndex);
if (!ValueInt.isNull())
{
TempArray.Add(*ValueInt);
}
}
}
catch (const std::exception& Exception)
{
Out_Code = Exception.what();
return false;
}
Out_String = TempArray;
return true;
}
If I call one of them in application's life time, I can get necessary values but if I can one after another,
while (this->QueryResult->next())
doesn't run at all.
Should I execute my query every time when I want to access data ?