Patch level : 12.0 no-patch
Files correlati : sy Commento : Tolti i dati all'interno dei valori nelle query di TODBC_recordset in modo tale da non chiedere la variabile se un valore all'interno rispetta la sintassi di campo
This commit is contained in:
		
							parent
							
								
									fda14eeddd
								
							
						
					
					
						commit
						d23c88824e
					
				@ -84,7 +84,44 @@ bool TODBC_recordset::connect(const char* dsn, const char* usr, const char* pwd,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const TString& TODBC_recordset::query_text() const
 | 
					const TString& TODBC_recordset::query_text() const
 | 
				
			||||||
{ return _sql; }
 | 
					{
 | 
				
			||||||
 | 
						return _sql;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const TString& TODBC_recordset::query_text_var() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// INSERT INTO POPPO (COL1, COL2) VALUES (SELECT COL3, COL4 FROM PAPPO WHERE COL5 = #VAR4)
 | 
				
			||||||
 | 
						// INSERT INTO POPPO (COL1, COL2) VALUES (SELECT COL3, COL4 FROM PAPPO WHERE COL5 = '#VAR4')
 | 
				
			||||||
 | 
						// #VAR4')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Conto quanti separatori ho
 | 
				
			||||||
 | 
						int num_sep = 0;
 | 
				
			||||||
 | 
						int pos = _sql.find(query_text_separator());
 | 
				
			||||||
 | 
						for (; pos > 0; pos = _sql.find(query_text_separator(), pos + 1))
 | 
				
			||||||
 | 
							num_sep++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(num_sep == 0 || num_sep % 2 != 0)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return _sql;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Se sono pari tolgo dalla mia query tutte le variabili all'interno dei separatori per non farle chiedere all'utente
 | 
				
			||||||
 | 
						TString& sql = get_tmp_string();
 | 
				
			||||||
 | 
						TString wrk_sql = _sql;
 | 
				
			||||||
 | 
						sql.cut(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// cerco il primo query_text_separator(), nel nostro caso è l'apice e mi sposto
 | 
				
			||||||
 | 
						for (int qts = wrk_sql.find(query_text_separator()); qts > 0; qts = wrk_sql.find(query_text_separator())) // Cerco tutti i separatori
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							sql << wrk_sql.left(qts - 1);
 | 
				
			||||||
 | 
							wrk_sql.ltrim(qts);
 | 
				
			||||||
 | 
							qts = wrk_sql.find(query_text_separator());
 | 
				
			||||||
 | 
							wrk_sql.ltrim(qts);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return sql;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const TString& TODBC_recordset::driver_version() const
 | 
					const TString& TODBC_recordset::driver_version() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -715,6 +752,7 @@ void TODBC_recordset::set(const char* sql)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
TODBC_recordset::TODBC_recordset(const char* sql, const bool freezed) : _freezed(freezed), _loaded(false)
 | 
					TODBC_recordset::TODBC_recordset(const char* sql, const bool freezed) : _freezed(freezed), _loaded(false)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						TRecordset::set_query_text_separator('\'');
 | 
				
			||||||
  set(sql);
 | 
					  set(sql);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -40,6 +40,7 @@ public:
 | 
				
			|||||||
  virtual TRecnotype current_row() const;
 | 
					  virtual TRecnotype current_row() const;
 | 
				
			||||||
  virtual void requery();
 | 
					  virtual void requery();
 | 
				
			||||||
  virtual const TString& query_text() const;
 | 
					  virtual const TString& query_text() const;
 | 
				
			||||||
 | 
						virtual const TString& query_text_var() const;
 | 
				
			||||||
  virtual const TString& driver_version() const;
 | 
					  virtual const TString& driver_version() const;
 | 
				
			||||||
	virtual void freeze(const bool on) { _freezed = on; }
 | 
						virtual void freeze(const bool on) { _freezed = on; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -623,7 +623,7 @@ void TRecordset::find_and_reset_vars()
 | 
				
			|||||||
  _var.destroy();
 | 
					  _var.destroy();
 | 
				
			||||||
  _varnames.destroy();
 | 
					  _varnames.destroy();
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  const TString& sql = query_text();
 | 
						const TString& sql = query_text_var();
 | 
				
			||||||
  int diesis = sql.find('#'); // cerco il primo #
 | 
					  int diesis = sql.find('#'); // cerco il primo #
 | 
				
			||||||
  for ( ; diesis > 0; diesis = sql.find('#', diesis+1)) // Cerco tutti i #
 | 
					  for ( ; diesis > 0; diesis = sql.find('#', diesis+1)) // Cerco tutti i #
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
 | 
				
			|||||||
@ -63,6 +63,7 @@ class TRecordset : public TObject
 | 
				
			|||||||
  TString_array _varnames;
 | 
					  TString_array _varnames;
 | 
				
			||||||
  const TRecordset* _parentset;
 | 
					  const TRecordset* _parentset;
 | 
				
			||||||
	char _text_separator;
 | 
						char _text_separator;
 | 
				
			||||||
 | 
						char _query_text_separator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
  virtual bool save_as_html(const char* path);
 | 
					  virtual bool save_as_html(const char* path);
 | 
				
			||||||
@ -84,11 +85,15 @@ public: // Absolutely needed methods
 | 
				
			|||||||
  virtual void requery() pure;
 | 
					  virtual void requery() pure;
 | 
				
			||||||
  bool empty() const { return items() == 0; }
 | 
					  bool empty() const { return items() == 0; }
 | 
				
			||||||
  virtual const TString& query_text() const pure;
 | 
					  virtual const TString& query_text() const pure;
 | 
				
			||||||
 | 
						virtual const TString& query_text_var() const { return query_text(); }
 | 
				
			||||||
  virtual const TString& driver_version() const;
 | 
					  virtual const TString& driver_version() const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	virtual char text_separator() const { return _text_separator;}
 | 
						virtual char text_separator() const { return _text_separator;}
 | 
				
			||||||
	virtual void set_text_separator(char sep) { _text_separator = sep;}
 | 
						virtual void set_text_separator(char sep) { _text_separator = sep;}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						virtual char query_text_separator() const { return _query_text_separator; }
 | 
				
			||||||
 | 
						virtual void set_query_text_separator(char sep) { _query_text_separator = sep; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	virtual void freeze() {}
 | 
						virtual void freeze() {}
 | 
				
			||||||
	virtual bool move_first() { return move_to(0); }
 | 
						virtual bool move_first() { return move_to(0); }
 | 
				
			||||||
  virtual bool move_prev() { return move_to(current_row()-1); }
 | 
					  virtual bool move_prev() { return move_to(current_row()-1); }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user