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 | ||||
| { 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 | ||||
| { | ||||
| @ -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) | ||||
| { | ||||
| 	TRecordset::set_query_text_separator('\''); | ||||
|   set(sql); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -40,6 +40,7 @@ public: | ||||
|   virtual TRecnotype current_row() const; | ||||
|   virtual void requery(); | ||||
|   virtual const TString& query_text() const; | ||||
| 	virtual const TString& query_text_var() const; | ||||
|   virtual const TString& driver_version() const; | ||||
| 	virtual void freeze(const bool on) { _freezed = on; } | ||||
| 
 | ||||
|  | ||||
| @ -623,7 +623,7 @@ void TRecordset::find_and_reset_vars() | ||||
|   _var.destroy(); | ||||
|   _varnames.destroy(); | ||||
|    | ||||
|   const TString& sql = query_text(); | ||||
| 	const TString& sql = query_text_var(); | ||||
|   int diesis = sql.find('#'); // cerco il primo #
 | ||||
|   for ( ; diesis > 0; diesis = sql.find('#', diesis+1)) // Cerco tutti i #
 | ||||
|   { | ||||
|  | ||||
| @ -63,6 +63,7 @@ class TRecordset : public TObject | ||||
|   TString_array _varnames; | ||||
|   const TRecordset* _parentset; | ||||
| 	char _text_separator; | ||||
| 	char _query_text_separator; | ||||
| 
 | ||||
| protected: | ||||
|   virtual bool save_as_html(const char* path); | ||||
| @ -71,7 +72,7 @@ protected: | ||||
| 	virtual bool save_as_csv(const char* path) { set_text_separator(';'); return save_as_text(path);} | ||||
|   virtual bool save_as_campo(const char* path); | ||||
|   virtual bool save_as_dbf(const char* table, int mode); | ||||
|    | ||||
| 
 | ||||
|   void find_and_reset_vars(); | ||||
|   void parsed_text(TString& sql) const; | ||||
|   TVariant& get_tmp_var() const; | ||||
| @ -83,11 +84,15 @@ public: // Absolutely needed methods | ||||
|   virtual TRecnotype current_row() const pure; | ||||
|   virtual void requery() pure; | ||||
|   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 char text_separator() const { return _text_separator;} | ||||
| 	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 bool move_first() { return move_to(0); } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user