Patch level : 12.0 1002
Files correlati : xvtdb.dll Descrizione Patch : Corretto l'errore di archiviazione sulle vendite di Gennaio di Vega Servizi. Un cliente che conteneva nella ragione sociale SELECT bloccava l'estrazione. Istruzioni interne : Fare un breve giro di controllo su F9
This commit is contained in:
parent
39f5c5df06
commit
a19d64b13e
@ -11,12 +11,23 @@
|
||||
|
||||
#define CHECK_FREEZED if (is_freezed()) { return set_error_freezed(); }
|
||||
|
||||
template<typename T> void safe_delete(T*& a)
|
||||
{
|
||||
delete a;
|
||||
a = nullptr;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* TXvt_recordset *
|
||||
* Classe per esecuzioni di query temporanee (wrapper semplice per SACommand) *
|
||||
******************************************************************************/
|
||||
|
||||
TXvt_recordset::TXvt_recordset() : _freezed(false)
|
||||
TXvt_recordset::TXvt_recordset() : _recset(nullptr), _con(nullptr), _db(NOT_INITIALIZEDS),
|
||||
_usr(NOT_INITIALIZEDS), _psw(NOT_INITIALIZEDS),
|
||||
_drv(TSDB_undefined), _query(NOT_INITIALIZEDS),
|
||||
_string_error(NOT_INITIALIZEDS), _string_error_full_text(NOT_INITIALIZEDS),
|
||||
_code_error(NOT_INITIALIZED), _recno(0), _freezed(false),
|
||||
_loaded(false)
|
||||
{
|
||||
_con = new SAConnection;
|
||||
_recset = new SACommand;
|
||||
@ -34,7 +45,9 @@ TXvt_recordset::TXvt_recordset() : _freezed(false)
|
||||
|
||||
|
||||
TXvt_recordset::TXvt_recordset(const char* db, const char* user, const char* pass, const TT_driver tipo_db, const char * query, const bool ex, const bool freezed)
|
||||
: _db(db), _usr(user), _psw(pass), _drv(tipo_db), _query(""), _recno(0), _freezed(false), _loaded(false)
|
||||
: _db(db), _usr(user), _psw(pass), _drv(tipo_db), _query(NOT_INITIALIZEDS),
|
||||
_string_error(NOT_INITIALIZEDS), _string_error_full_text(NOT_INITIALIZEDS),
|
||||
_recno(0), _freezed(false), _loaded(false)
|
||||
{
|
||||
_con = new SAConnection;
|
||||
if(connect(db, user, pass, tipo_db) == NOERR)
|
||||
@ -124,8 +137,8 @@ TXvt_recordset::~TXvt_recordset()
|
||||
}
|
||||
catch (...) {}
|
||||
// Prima cancellare il recordset POI la connessione
|
||||
delete _recset;
|
||||
delete _con;
|
||||
safe_delete(_recset);
|
||||
safe_delete(_con);
|
||||
}
|
||||
|
||||
/* PRIVATE FUNCTIONS **************************************************************************************************/
|
||||
@ -322,7 +335,7 @@ long TXvt_recordset::items()
|
||||
_CON(conn)->Connect(_db, _usr, _psw, static_cast<SAClient_t>(_drv));
|
||||
items = xvt_rcs_get_items(conn, _query);
|
||||
if (conn != _con)
|
||||
delete conn;
|
||||
safe_delete(conn);
|
||||
}
|
||||
catch(SAException &x)
|
||||
{
|
||||
@ -343,7 +356,7 @@ long xvt_rcs_get_items(P_CONN_VOID con, const char* query)
|
||||
long r = 0;
|
||||
while(_RCS(rcs)->FetchNext())
|
||||
r++;
|
||||
delete rcs;
|
||||
safe_delete(rcs);
|
||||
return r;
|
||||
}
|
||||
|
||||
@ -378,11 +391,20 @@ bool TXvt_recordset::exec(const bool auto_f)
|
||||
_RCS(_recset)->Execute();
|
||||
_loaded = true;
|
||||
_recno = -1;
|
||||
ok = true;
|
||||
// Se trovo almeno un "select" faccio l'autofetch, ovviamente non mi sbatto se auto_f è disattivato
|
||||
if (auto_f)
|
||||
{
|
||||
SAString s = _RCS(_recset)->CommandText(); s.MakeUpper();
|
||||
ok = s.Find("SELECT") != SIZE_MAX ? next() : true;
|
||||
size_t selpos = s.Find("SELECT ");
|
||||
|
||||
if (selpos != SIZE_MAX)
|
||||
{
|
||||
size_t frompos = s.Find("FROM ");
|
||||
|
||||
if (frompos != SIZE_MAX && frompos > selpos)
|
||||
ok = next();
|
||||
}
|
||||
}
|
||||
else
|
||||
ok = true;
|
||||
@ -408,7 +430,7 @@ bool TXvt_recordset::next()
|
||||
bool fetched = false;
|
||||
try
|
||||
{
|
||||
if(_RCS(_recset)->FetchNext())
|
||||
if (_RCS(_recset)->FetchNext())
|
||||
{
|
||||
fetched = true;
|
||||
_recno++;
|
||||
@ -735,10 +757,10 @@ long TXvt_recordset::get_code_error(const bool erase)
|
||||
|
||||
const char* TXvt_recordset::get_string_error(bool erase)
|
||||
{
|
||||
static char* app;
|
||||
static const char* app;
|
||||
|
||||
if (app != nullptr)
|
||||
delete app;
|
||||
safe_delete(app);
|
||||
|
||||
_CPY_STR(_string_error, app);
|
||||
|
||||
@ -749,10 +771,10 @@ const char* TXvt_recordset::get_string_error(bool erase)
|
||||
|
||||
const char* TXvt_recordset::get_text_error(bool erase)
|
||||
{
|
||||
static char* app;
|
||||
static const char* app;
|
||||
|
||||
if (app != nullptr)
|
||||
delete app;
|
||||
safe_delete(app);
|
||||
|
||||
_CPY_STR(_string_error_full_text, app);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user