00001 #ifndef QLABDATABASE_H 00002 #define QLABDATABASE_H 00003 00004 #include <qobject.h> 00005 #include <qvariant.h> 00006 00007 // forward declarations 00008 class QStringList ; 00009 class QSqlRecord ; 00010 class QlabDatabase ; 00011 class QlabDatabase_priv ; 00012 class QlabDatabaseTableSchema_priv ; 00013 00014 00015 // convenient typedef 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 // Global properties 00068 00069 00070 // Table Properties 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