Patch level :4.0 648

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :modifiche per far funzionare cg3900


git-svn-id: svn://10.65.10.50/trunk@14990 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2007-03-06 14:41:36 +00:00
parent b993886271
commit a76e3743ac
5 changed files with 94 additions and 22 deletions

View File

@ -2114,7 +2114,7 @@ long TRecordset_sheet::get_items() const
return _query.items(); return _query.items();
} }
TRecordset_sheet::TRecordset_sheet(TRecordset& query) TRecordset_sheet::TRecordset_sheet(TRecordset& query, const char* title, byte buttons)
: TSheet(-1, -1, -2, -4, "Query", query.sheet_head()), _query(query) : TSheet(-1, -1, -2, -4, title, query.sheet_head(), buttons), _query(query)
{ {
} }

View File

@ -171,7 +171,7 @@ protected:
virtual long get_items() const; virtual long get_items() const;
public: public:
TRecordset_sheet(TRecordset& sql); TRecordset_sheet(TRecordset& sql, const char* title = "Query", byte buttons = 0);
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////

View File

@ -44,6 +44,7 @@ public:
void reset(); void reset();
bool log(int severity, const char* msg); // severity: 0=normal; 1=warning; 2=error bool log(int severity, const char* msg); // severity: 0=normal; 1=warning; 2=error
void set_title(const char* title); void set_title(const char* title);
const TString& title() const { return _title; }
TLog_report(const char* title, const char* name = "bagn010a"); TLog_report(const char* title, const char* name = "bagn010a");
}; };

View File

@ -193,6 +193,14 @@ bool TText_recordset::save_as(const char* path, TRecordsetExportFormat fmt)
return TRecordset::save_as(path, fmt); return TRecordset::save_as(path, fmt);
} }
void TText_recordset::sort(COMPARE_FUNCTION f)
{
if (f == NULL)
_rec.sort(true); // Ordina alfabeticamante
else
_rec.TArray::sort(f); // Usa la funzione definita dall'utente
}
TText_recordset::TText_recordset(const char* query) : _query(query), _curr(-1) TText_recordset::TText_recordset(const char* query) : _query(query), _curr(-1)
{ {
_info._name = "A"; _info._name = "A";
@ -393,6 +401,13 @@ bool TAS400_recordset::set_field(const TAS400_column_info& fi, const TVariant& v
r.overwrite(str, fi._pos); r.overwrite(str, fi._pos);
} }
break; break;
case _datefld:
if (fi._width == 8)
{
TString8 str; str << var.as_date().date2ansi();
r.overwrite(str, fi._pos, fi._width);
break;
}
default: default:
r.overwrite(var.as_string(), fi._pos, fi._width); r.overwrite(var.as_string(), fi._pos, fi._width);
break; break;
@ -432,6 +447,11 @@ TAS400_column_info* TAS400_recordset::parse_field(const char* column, int& c, bo
{ {
ci = new TAS400_column_info; ci = new TAS400_column_info;
ci->_name = fld; ci->_name = fld;
if (info->items() > 0)
{
const TAS400_column_info& last = *(const TAS400_column_info*)info->objptr(info->last());
ci->_pos = last._pos+last._width;
}
c = info->add(ci); c = info->add(ci);
} }
else else
@ -450,6 +470,27 @@ TAS400_column_info* TAS400_recordset::parse_field(const char* column, int& c, bo
return ci; return ci;
} }
unsigned int TAS400_recordset::columns() const
{
const TArray* info = (const TArray*)_trc.objptr(rec_type());
if (info)
return info->items();
return TText_recordset::columns();
}
const TRecordset_column_info& TAS400_recordset::column_info(unsigned int c) const
{
const TArray* info = (const TArray*)_trc.objptr(rec_type());
if (info)
{
TRecordset_column_info* i = (TRecordset_column_info*)info->objptr(c);
if (i != NULL)
return *i;
}
return TText_recordset::column_info(c);
}
int TAS400_recordset::find_column(const char* column) const int TAS400_recordset::find_column(const char* column) const
{ {
int c = -1; int c = -1;
@ -462,28 +503,45 @@ const TRecordset_column_info& TAS400_recordset::column_info(const char* column)
int c = -1; int c = -1;
TRecordset_column_info* ci = ((TAS400_recordset*)this)->parse_field(column, c, false); TRecordset_column_info* ci = ((TAS400_recordset*)this)->parse_field(column, c, false);
if (ci != NULL) if (ci != NULL)
{
return *ci; return *ci;
}
return TText_recordset::column_info(column); return TText_recordset::column_info(column);
} }
const TVariant& TAS400_recordset::get_field(const TAS400_column_info& ci) const
{
const TRecnotype n = current_row();
if (n >= 0 && n < items())
{
const TString& str = row(n).mid(ci._pos, ci._width);
TVariant& var = get_tmp_var();
var.set(str); var.convert_to(ci._type);
return var;
}
return ci._default;
}
const TVariant& TAS400_recordset::get(unsigned int column) const
{
const TArray* info = (const TArray*)_trc.objptr(rec_type());
if (info)
{
const TAS400_column_info* ci = (const TAS400_column_info*)info->objptr(column);
if (ci != NULL)
return get_field(*ci);
}
return TText_recordset::get(column);
}
const TVariant& TAS400_recordset::get(const char* column) const const TVariant& TAS400_recordset::get(const char* column) const
{ {
int c = -1; int c = -1;
if (column && column[1] != '\0') if (column && column[1] != '\0')
{ {
TAS400_column_info* ci = ((TAS400_recordset*)this)->parse_field(column, c, false); const TAS400_column_info* ci = ((TAS400_recordset*)this)->parse_field(column, c, false);
if (ci != NULL) if (ci != NULL)
{ return get_field(*ci);
const TRecnotype n = current_row();
if (n >= 0 && n < items())
{
const TString& str = row(n).mid(ci->_pos, ci->_width);
TVariant& var = get_tmp_var();
var.set(str);
return var;
}
return ci->_default;
}
} }
c = TText_recordset::find_column(column); c = TText_recordset::find_column(column);
return TText_recordset::get(c); return TText_recordset::get(c);
@ -518,28 +576,34 @@ TRecnotype TAS400_recordset::new_rec(const char* trc)
} }
const TString& TAS400_recordset::rec_type(TRecnotype r) const const TString& TAS400_recordset::rec_type(TRecnotype r) const
{
if (key_length() > 0)
{ {
const TToken_string& riga = row(r); const TToken_string& riga = row(r);
return riga.mid(key_position(), key_length()); return riga.mid(key_position(), key_length());
} }
return EMPTY_STRING;
}
bool TAS400_recordset::create_field(const char* nam, int pos, int len, bool TAS400_recordset::create_field(const char* nam, int pos, int len,
TFieldtypes typ, bool req, const TVariant& def) TFieldtypes typ, bool req, const TVariant& def)
{ {
CHECK(nam && *nam, "Null field name"); CHECK(nam && *nam > ' ', "Null field name");
CHECKD(pos >= 0 && pos < record_length(), "Invalid field position ", pos);
CHECKD(len > 0 && pos+len <= record_length(), "Invalid field lenght ", len);
int c = -1; int c = -1;
TAS400_column_info* ci = parse_field(nam, c, true); TAS400_column_info* ci = parse_field(nam, c, true);
const bool ok = ci != NULL; const bool ok = ci != NULL;
if (ok) if (ok)
{ {
if (pos >= 0) // Se l'utente fissa una posizione impostala, altrimenti tieni quella automatica
ci->_pos = pos; ci->_pos = pos;
ci->_width = len; ci->_width = len;
ci->_type = typ; ci->_type = typ;
ci->_required = req; ci->_required = req;
ci->_default = def; ci->_default = def;
CHECKS(ci->_pos >= 0 && ci->_pos < record_length(), "Invalid position for field ", nam);
CHECKS(ci->_width > 0 && ci->_pos+ci->_width <= record_length(), "Invalid lenght for field ", nam);
} }
return ok; return ok;
} }

View File

@ -38,8 +38,11 @@ public:
virtual void requery(); virtual void requery();
virtual const TVariant& get(unsigned int column) const; virtual const TVariant& get(unsigned int column) const;
TRecnotype last() const { return items() - 1;}
public: public:
virtual const TString& query_text() const { return _query; } virtual const TString& query_text() const { return _query; }
virtual void sort(COMPARE_FUNCTION f = NULL);
virtual bool destroy(TRecnotype r = -1); virtual bool destroy(TRecnotype r = -1);
virtual TRecnotype new_rec(const char* buf = NULL); virtual TRecnotype new_rec(const char* buf = NULL);
@ -106,13 +109,17 @@ protected:
TAS400_column_info* parse_field(const char* column, int& c, bool create); TAS400_column_info* parse_field(const char* column, int& c, bool create);
bool set_field(const TAS400_column_info& fi, const TVariant& var); bool set_field(const TAS400_column_info& fi, const TVariant& var);
const TVariant& get_field(const TAS400_column_info& fi) const;
public: public:
virtual TRecnotype new_rec(const char* buf = NULL); virtual TRecnotype new_rec(const char* buf = NULL);
virtual bool set(const char* column, const TVariant& var); virtual bool set(const char* column, const TVariant& var);
virtual unsigned int columns() const; virtual unsigned int columns() const;
virtual const TRecordset_column_info& column_info(unsigned int column) const;
virtual const TRecordset_column_info& column_info(const char* colunmn) const; virtual const TRecordset_column_info& column_info(const char* colunmn) const;
virtual const TVariant& get(unsigned int column) const;
virtual const TVariant& get(const char* colunmn) const; virtual const TVariant& get(const char* colunmn) const;
public: public: