00001 #ifndef QLABDATABASE_H
00002 #define QLABDATABASE_H
00003
00004 #include <qobject.h>
00005 #include <qvariant.h>
00006
00007
00008 class QStringList ;
00009 class QSqlRecord ;
00010 class QlabDatabase ;
00011 class QlabDatabase_priv ;
00012 class QlabDatabaseTableSchema_priv ;
00013
00014
00015
00016 typedef QMap< QString, QlabDatabase * > Associations ;
00017
00018 class Q_EXPORT QlabDatabase : public QObject
00019 {
00020 Q_OBJECT ;
00021
00022 Q_ENUMS( AssociationModes ) ;
00023 Q_ENUMS( OperationModes ) ;
00024 Q_ENUMS( ErrorCodes ) ;
00025
00026 public :
00027 enum AssociationModes { AssocNone = 0,
00028 AssocMustProvide = 1,
00029 AssocCanProvide = 2,
00030 AssocUnique = 4,
00031 AssocIsList = 8
00032 } ;
00033 enum OperationModes { ReadData,
00034 ModifyData,
00035 CreateNewData,
00036 DeleteData
00037 } ;
00038 enum ErrorCodes { DriverNotInstalled,
00039 DuplicateConnectionName,
00040 InvalidConnection,
00041 InvalidConnectionTableAccess
00042 } ;
00043
00044 QlabDatabase( const QString & driver, const QString & connectionName = QString::null,
00045 bool autoconnect = TRUE, QObject *parent, char * name ) ;
00046 QlabDatabase( const QString & tableName, bool autoPopulate,
00047 const QString & connectionName = QString::null ) ;
00048 ~QlabDatabase() ;
00049
00050 static QStringList availableDrivers() const ;
00051 static bool importSchema( const QString & schemaPath ) ;
00052 static bool importExtendedSchema( const QString & schemaPath ) ;
00053 static bool createConnections( const QString & schemaPath = QString::null,
00054 bool autoconnect = TRUE ) ;
00055 static bool addConnection( const QString & driver, const QString & connectionName = QString::null,
00056 bool autoconnect = TRUE ) ;
00057 static QStringList connections() const ;
00058
00059 bool openConnection( const QString & connectionName ) ;
00060 void setConnectionParameters( const QString & connectionName,
00061 const QString & databaseName, const QString & user,
00062 const QString & passwd, const QString & host = "localhost",
00063 int port = -1 ) ;
00064 void setConnectionOptions( const QString & connectionName, const QString & options ) ;
00065
00066 public slots :
00067
00068
00069
00070
00071 bool addAssociation( const QString & assocName, AssociationModes mode = AssocMustProvide ) ;
00072 QlabDatabase * getAssociate( const QString & assocName ) ;
00073 QSqlRecord * getEntry( uint uoid ) ;
00074 QSqlRecord * createEntry() ;
00075 QSqlRecord * cloneEntry( int uoid = 0 ) ;
00076 QSqlRecord * modifyEntry( int uoid = 0 ) ;
00077 bool deleteEntry( int uoid = 0 ) ;
00078 bool saveChangedData() ;
00079 bool operationAllowed( OperationModes md, const QString & fld = QString::null ) ;
00080 void setFilter( const QString & flt ) ;
00081 QString filter() const ;
00082 void setSortOrder( const QStringList & order ) ;
00083 QStringList sortOrder() const ;
00084
00085 signals :
00086 error( uint errno, const QString & errDescription ) ;
00087
00088 protected :
00089
00090 protected slots :
00091 bool makeDirectSqlQuery( const QString & query ) ;
00092
00093 private :
00094 const QString connection ;
00095 bool validConnection ;
00096 const QString table ;
00097 Associations associates ;
00098
00099 QlabDatabase_priv * tableView ;
00100 QSqlRecord * activeRecord ;
00101 QlabDatabaseTableSchema_priv * tableSchema ;
00102
00103 } ;
00104
00105 #endif // QLABDATABASE_H