#ifndef __ODBCRSET_H #define __ODBCRSET_H #ifndef __RECSET_H #include #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 _freezed; 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 void freeze(const bool on) { _freezed = on; } 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(); }; #endif