Patch level : 12.0 986
Files correlati : f90.exe Commento : - Modifica creazione query per creazione prospetto integrativo: aggiunti doppi apici. - Aggiunta possibilita' di salvare messaggio di errore in sqlite.
This commit is contained in:
		
							parent
							
								
									379ea2b68c
								
							
						
					
					
						commit
						aacae42ac9
					
				| @ -19,6 +19,9 @@ | |||||||
| 
 | 
 | ||||||
| #define IS_ITALIANO(statopaiv) ((statopaiv) == "IT" || !(statopaiv).full()) | #define IS_ITALIANO(statopaiv) ((statopaiv) == "IT" || !(statopaiv).full()) | ||||||
| 
 | 
 | ||||||
|  | // Controlla eventuali apostrofi e li raddoppia
 | ||||||
|  | const char* check_str(const TString& str); | ||||||
|  | 
 | ||||||
| const TDate today(TODAY); | const TDate today(TODAY); | ||||||
| 
 | 
 | ||||||
| struct annesso_t | struct annesso_t | ||||||
| @ -535,7 +538,7 @@ class TProspetto_recset final : public TSQL_recordset | |||||||
|   TString* _totimponibile; |   TString* _totimponibile; | ||||||
|   TString* _totimposta; |   TString* _totimposta; | ||||||
| 
 | 
 | ||||||
|   static void format_string(TString& str_out, const TString&  str)  { str_out.cut(0) << "'" << str << "'"; } |   static void format_string(TString& str_out, const TString&  str)  { str_out.cut(0) << "'" << check_str(str) << "'"; } | ||||||
|   static void format_string(TString& str_out, const char*     str)  { format_string(str_out, TString(str)); } |   static void format_string(TString& str_out, const char*     str)  { format_string(str_out, TString(str)); } | ||||||
|   static void format_string(TString& str_out, const TDate&    date) { TString dt; dt << date.date2ansi(); format_string(str_out, dt); } |   static void format_string(TString& str_out, const TDate&    date) { TString dt; dt << date.date2ansi(); format_string(str_out, dt); } | ||||||
| 
 | 
 | ||||||
| @ -570,7 +573,4 @@ public: | |||||||
|   TF9Prospetto_integr(); |   TF9Prospetto_integr(); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // Controlla eventuali apostrofi e li raddoppia
 |  | ||||||
| const char* check_str(const TString& str); |  | ||||||
| 
 |  | ||||||
| #endif  // #ifndef __F901001_H
 | #endif  // #ifndef __F901001_H
 | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| #include <Windows.h> | #include <Windows.h> | ||||||
|  | #include <iostream> | ||||||
| 
 | 
 | ||||||
| #include "f9lib.h" | #include "f9lib.h" | ||||||
| 
 | 
 | ||||||
| @ -593,7 +594,20 @@ bool TF9Prospetto_integr::operator()(const char* numreg_acq, const char* numreg_ | |||||||
|   { |   { | ||||||
|     TFilename           fprosp; fprosp.tempdir().slash_terminate() << make_name_rep(); |     TFilename           fprosp; fprosp.tempdir().slash_terminate() << make_name_rep(); | ||||||
|     TProspetto_recset*  _prosp_rs = new TProspetto_recset(numreg_acq, numreg_ven); |     TProspetto_recset*  _prosp_rs = new TProspetto_recset(numreg_acq, numreg_ven); | ||||||
|  | 
 | ||||||
|     _items = _prosp_rs->items(); |     _items = _prosp_rs->items(); | ||||||
|  |     if (_items > 0) | ||||||
|  |     { | ||||||
|  |       if (!_prosp_rs->last_exec()) | ||||||
|  |       { | ||||||
|  |         ofstream fout("TF9Prospetto_integr_error.txt"); | ||||||
|  |         fout << _prosp_rs->get_err_msg(); | ||||||
|  |         fout.close(); | ||||||
|  |         return false; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |       return false; | ||||||
| 
 | 
 | ||||||
|     _rep.set_recordset(_prosp_rs); |     _rep.set_recordset(_prosp_rs); | ||||||
|     _book.add(_rep); |     _book.add(_rep); | ||||||
|  | |||||||
| @ -16,6 +16,7 @@ class TSQLite : public TObject | |||||||
| { | { | ||||||
|   sqlite3* _handle; |   sqlite3* _handle; | ||||||
|   TFilename _currdb; |   TFilename _currdb; | ||||||
|  |   TString _last_err_msg; | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
|   TVariant& get_sql_value(const TRectype& curr, const RecFieldDes& fd, TVariant& tmp) const; |   TVariant& get_sql_value(const TRectype& curr, const RecFieldDes& fd, TVariant& tmp) const; | ||||||
| @ -39,6 +40,8 @@ public: | |||||||
|   bool exists(const char* table); |   bool exists(const char* table); | ||||||
|   bool parse_select_from(const char* szSql); |   bool parse_select_from(const char* szSql); | ||||||
| 
 | 
 | ||||||
|  |   TString get_last_err_msg(bool erase = true); | ||||||
|  | 
 | ||||||
|   TSQLite(); |   TSQLite(); | ||||||
|   virtual ~TSQLite(); |   virtual ~TSQLite(); | ||||||
| } _TheDataBase; | } _TheDataBase; | ||||||
| @ -115,6 +118,9 @@ bool TSQLite::exec(const char* sql, sqlite3_callback callback, void* jolly, bool | |||||||
|   char* errmsg = NULL; |   char* errmsg = NULL; | ||||||
|   const int rc = sqlite3_exec(_handle, sql, callback, jolly, &errmsg); |   const int rc = sqlite3_exec(_handle, sql, callback, jolly, &errmsg); | ||||||
| 
 | 
 | ||||||
|  |   if(rc != SQLITE_OK) | ||||||
|  |     _last_err_msg.cut(0) << sql << "\n - " << errmsg; | ||||||
|  | 
 | ||||||
|   if (errmsg != NULL) |   if (errmsg != NULL) | ||||||
|   { |   { | ||||||
|     if (show_error) |     if (show_error) | ||||||
| @ -399,6 +405,17 @@ bool TSQLite::parse_select_from(const char* szSql) | |||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | TString TSQLite::get_last_err_msg(const bool erase) | ||||||
|  | { | ||||||
|  |   if (erase) | ||||||
|  |   { | ||||||
|  |     TString a = _last_err_msg; | ||||||
|  |     _last_err_msg.cut(0); | ||||||
|  |     return a; | ||||||
|  |   } | ||||||
|  |   return _last_err_msg; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| TSQLite::TSQLite() : _handle(NULL) | TSQLite::TSQLite() : _handle(NULL) | ||||||
| { } | { } | ||||||
| 
 | 
 | ||||||
| @ -503,7 +520,8 @@ TRecnotype TSQL_recordset::items() const | |||||||
|     TString sql; parsed_text(sql); |     TString sql; parsed_text(sql); | ||||||
|     TPerformance_profiler prof("SQL query"); |     TPerformance_profiler prof("SQL query"); | ||||||
|     //_TheDataBase.exec("PRAGMA show_datatypes=ON;", NULL, NULL);
 |     //_TheDataBase.exec("PRAGMA show_datatypes=ON;", NULL, NULL);
 | ||||||
|     _TheDataBase.exec(sql, query_get_items, (TSQL_recordset*)this); |     TSQL_recordset& a = *(TSQL_recordset*)this; | ||||||
|  |     a._last_exec = _TheDataBase.exec(sql, query_get_items, (TSQL_recordset*)this); | ||||||
|     //_TheDataBase.exec("PRAGMA show_datatypes=OFF;", NULL, NULL);
 |     //_TheDataBase.exec("PRAGMA show_datatypes=OFF;", NULL, NULL);
 | ||||||
|   } |   } | ||||||
|   return _items; |   return _items; | ||||||
| @ -586,7 +604,8 @@ bool TSQL_recordset::move_to(TRecnotype n) | |||||||
|         _first_row = n; |         _first_row = n; | ||||||
|       sql << "\nLIMIT " << _pagesize << " OFFSET " << _first_row << ';'; |       sql << "\nLIMIT " << _pagesize << " OFFSET " << _first_row << ';'; | ||||||
|     } |     } | ||||||
|     _TheDataBase.exec(sql, query_get_rows, this); |     _last_exec = _TheDataBase.exec(sql, query_get_rows, this); | ||||||
|  | 
 | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   return true; |   return true; | ||||||
| @ -630,6 +649,11 @@ const TString& TSQL_recordset::driver_version() const | |||||||
|   return tmp; |   return tmp; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | TString TSQL_recordset::get_err_msg(const bool erase) | ||||||
|  | { | ||||||
|  |   return _TheDataBase.get_last_err_msg(erase); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| TSQL_recordset::TSQL_recordset(const char* sql)  | TSQL_recordset::TSQL_recordset(const char* sql)  | ||||||
| {  | {  | ||||||
|   set(sql);  |   set(sql);  | ||||||
|  | |||||||
| @ -16,6 +16,7 @@ class TSQL_recordset : public TRecordset | |||||||
|   TRecnotype _first_row, _pagesize, _items, _current_row; |   TRecnotype _first_row, _pagesize, _items, _current_row; | ||||||
|   TArray _column; |   TArray _column; | ||||||
|   TArray _page; |   TArray _page; | ||||||
|  |   bool    _last_exec; | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
|   virtual void reset(); |   virtual void reset(); | ||||||
| @ -32,6 +33,9 @@ public: // TRecordset | |||||||
|   virtual const TString& query_text() const { return _sql; } |   virtual const TString& query_text() const { return _sql; } | ||||||
|   virtual const TString& driver_version() const; |   virtual const TString& driver_version() const; | ||||||
| 
 | 
 | ||||||
|  |   static TString  get_err_msg(bool erase = true); | ||||||
|  |   bool            last_exec() const { return _last_exec; } | ||||||
|  | 
 | ||||||
| public: | public: | ||||||
|   void set(const char* sql); |   void set(const char* sql); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user