128 lines
3.7 KiB
C++
Executable File
128 lines
3.7 KiB
C++
Executable File
#ifndef __ODBCRSET_H
|
|
#define __ODBCRSET_H
|
|
|
|
#ifndef __RECSET_H
|
|
#include <recset.h>
|
|
#endif
|
|
|
|
#ifndef __TSDB_H
|
|
#include <tsdb.h>
|
|
#endif
|
|
|
|
enum TODBC_driver {
|
|
ODBC_generic,
|
|
ODBC_mssql,
|
|
ODBC_access,
|
|
ODBC_mysql};
|
|
|
|
class TODBC_recordset : public TRecordset
|
|
{
|
|
TString _dsn, _usr, _pwd, _dir;
|
|
TString _sql;
|
|
|
|
TRecnotype _first_row, _pagesize, _items, _current_row, _cursor_pos;
|
|
TArray _page;
|
|
|
|
TArray _column;
|
|
bool _columns_loaded;
|
|
bool _loaded;
|
|
|
|
|
|
protected:
|
|
XVT_ODBC connection() const;
|
|
void reset();
|
|
const TArray* row(TRecnotype n);
|
|
virtual void parsed_text(TString& sql) const;
|
|
TODBC_driver _driver;
|
|
|
|
public:
|
|
virtual TRecnotype items() const;
|
|
virtual unsigned int columns() const;
|
|
virtual const TRecordset_column_info& column_info(unsigned int c) const;
|
|
virtual bool move_to(TRecnotype pos);
|
|
virtual TRecnotype current_row() const;
|
|
virtual void requery();
|
|
virtual const TString& query_text() const;
|
|
virtual const TString& driver_version() const;
|
|
|
|
virtual const TVariant& get(unsigned int c) const;
|
|
virtual const TVariant& get(const char* name) const;
|
|
|
|
// Callbacks
|
|
int on_get_items(int argc, char** values, char** columns);
|
|
int on_get_columns(int argc, char** values, char** columns);
|
|
int on_get_rows(int argc, char** values, char** columns);
|
|
|
|
void set(const char* sql);
|
|
|
|
long exec(const char* sql);
|
|
long begin();
|
|
long commit();
|
|
|
|
bool connect(const char* dsn, const char* usr = "", const char* pwd = "", const char* dir = "");
|
|
bool set_log_file(const char* fn);
|
|
const TODBC_driver driver() { return _driver; }
|
|
int compare_key(const TISAM_recordset& dbfset);
|
|
int compare_rec(const TISAM_recordset& dbfset);
|
|
int create_rec(const TISAM_recordset& dbfset);
|
|
void update_rec(const TISAM_recordset& dbfset);
|
|
void remove_rec(const TISAM_recordset& dbfset);
|
|
|
|
const TString& dsn() const { return _dsn; }
|
|
|
|
TODBC_recordset(const char* sql, const bool freezed = false);
|
|
virtual ~TODBC_recordset();
|
|
};
|
|
|
|
class TDB_recordset : public TRecordset
|
|
{
|
|
SSimple_query * _rec;
|
|
TString _sql;
|
|
TString _dsn, _usr, _pwd, _drv;
|
|
|
|
TRecnotype _current_row;
|
|
TString_array _row, _column;
|
|
bool _is_loaded;
|
|
TRecnotype _items;
|
|
unsigned _ncolumns;
|
|
|
|
protected:
|
|
// Parsa la stringa di connessione contenuta nella query
|
|
bool set_connection(const char * conn_str) const;
|
|
bool connect(const char * db, const char * user, const char * pass, const TT_driver tipo_db) const;
|
|
bool connect(const char * db, const char * user, const char * pass, const char * tipo_db) const;
|
|
static TT_driver str_to_driver(const char* tipo_db);
|
|
bool set_loaded();
|
|
void unset_loaded();
|
|
|
|
public:
|
|
void freeze(const bool on = true);
|
|
void reset();
|
|
bool set(const char* sql);
|
|
bool move_to(TRecnotype pos) override; // Pure
|
|
bool move_next() override;
|
|
void requery() override; // da impl. Pure
|
|
bool is_connected() const;
|
|
unsigned columns() const override; // Pure
|
|
TRecnotype items() const override; // Pure
|
|
TRecnotype current_row() const override { return _current_row; } // Pure
|
|
// Con il valore di default viene restituita la riga alla pos. attuale
|
|
const TString_array get_row(TRecnotype n = -1);
|
|
const TString_array get_next_row();
|
|
const TString& query_text() const override { return _sql; }
|
|
const TString& driver_version() const override { return _rec->sq_get_client_v(); };
|
|
const TVariant& get(unsigned int column) const override; // Pure
|
|
const TVariant& get(const char* name) const override; // Pure
|
|
const TRecordset_column_info& column_info(unsigned int column) const override; // Pure
|
|
|
|
// Ritorna la connessione attuale
|
|
const TVariant& active_connection() const;
|
|
bool exec(const char* sql);
|
|
bool commit() const;
|
|
|
|
TDB_recordset(const char * sql, bool freezed = false);
|
|
~TDB_recordset();
|
|
};
|
|
|
|
#endif
|