source: trunk/src/sql/qsqlselectcursor.cpp

Last change on this file was 196, checked in by rudi, 14 years ago

Add SQL module (currently it isn't build by default, however it's needed for QtDesigner)

File size: 6.0 KB
Line 
1/****************************************************************************
2**
3** Definition of QSqlSelectCursor class
4**
5** Created : 2002-11-13
6**
7** Copyright (C) 2005-2007 Trolltech ASA. All rights reserved.
8**
9** This file is part of the sql module of the Qt GUI Toolkit.
10**
11** This file may be distributed under the terms of the Q Public License
12** as defined by Trolltech ASA of Norway and appearing in the file
13** LICENSE.QPL included in the packaging of this file.
14**
15** This file may be distributed and/or modified under the terms of the
16** GNU General Public License version 2 as published by the Free Software
17** Foundation and appearing in the file LICENSE.GPL included in the
18** packaging of this file.
19**
20** Licensees holding valid Qt Enterprise Edition licenses may use this
21** file in accordance with the Qt Commercial License Agreement provided
22** with the Software.
23**
24** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
25** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
26**
27** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
28** information about Qt Commercial License Agreements.
29** See http://www.trolltech.com/qpl/ for QPL licensing information.
30** See http://www.trolltech.com/gpl/ for GPL licensing information.
31**
32** Contact info@trolltech.com if any conditions of this licensing are
33** not clear to you.
34**
35**********************************************************************/
36
37#include "qsqlselectcursor.h"
38#include "qsqldriver.h"
39
40#ifndef QT_NO_SQL
41
42class QSqlSelectCursorPrivate
43{
44public:
45 QSqlSelectCursorPrivate() : populated( FALSE ) {}
46 QString query;
47 bool populated : 1;
48};
49
50/*!
51 \class QSqlSelectCursor qsqlselectcursor.h
52 \brief The QSqlSelectCursor class provides browsing of general SQL
53 SELECT statements.
54
55 \ingroup database
56 \module sql
57
58 QSqlSelectCursor is a convenience class that makes it possible to
59 display result sets from general SQL \c SELECT statements in
60 data-aware Qt widgets. QSqlSelectCursor is read-only and does not
61 support \c INSERT, \c UPDATE or \c DELETE operations.
62
63 Pass the query in at construction time, or use the
64 QSqlSelectCursor::exec() function.
65
66 Example:
67 \code
68 ...
69 QSqlSelectCursor* cur = new QSqlSelectCursor( "SELECT id, firstname, lastname FROM author" );
70 QDataTable* table = new QDataTable( this );
71 table->setSqlCursor( cur, TRUE, TRUE );
72 table->refresh();
73 ...
74 cur->exec( "SELECT * FROM books" );
75 table->refresh();
76 ...
77 \endcode
78*/
79
80/*!
81 Constructs a read only cursor on database \a db using the query \a query.
82 */
83QSqlSelectCursor::QSqlSelectCursor( const QString& query, QSqlDatabase* db )
84 : QSqlCursor( QString::null, FALSE, db )
85{
86 d = new QSqlSelectCursorPrivate;
87 d->query = query;
88 QSqlCursor::setMode( ReadOnly );
89 if ( !query.isNull() )
90 exec( query );
91}
92
93/*! Constructs a copy of \a other */
94QSqlSelectCursor::QSqlSelectCursor( const QSqlSelectCursor& other )
95 : QSqlCursor( other )
96{
97 d = new QSqlSelectCursorPrivate;
98 d->query = other.d->query;
99 d->populated = other.d->populated;
100}
101
102/*! Destroys the object and frees any allocated resources */
103QSqlSelectCursor::~QSqlSelectCursor()
104{
105 delete d;
106}
107
108/*! \reimp */
109bool QSqlSelectCursor::exec( const QString& query )
110{
111 d->query = query;
112 bool ret = QSqlCursor::exec( query );
113 if ( ret ) {
114 QSqlCursor::clear();
115 populateCursor();
116 }
117 return ret;
118}
119
120/*! \fn bool QSqlSelectCursor::select()
121 \reimp
122*/
123
124/*! \reimp */
125bool QSqlSelectCursor::select( const QString&, const QSqlIndex& )
126{
127 bool ret = QSqlCursor::exec( d->query );
128 if ( ret && !d->populated )
129 populateCursor();
130 return ret;
131}
132
133/*! \internal */
134void QSqlSelectCursor::populateCursor()
135{
136 QSqlRecordInfo inf = driver()->recordInfo( *(QSqlQuery*)this );
137 for ( QSqlRecordInfo::const_iterator it = inf.begin(); it != inf.end(); ++it )
138 QSqlCursor::append( *it );
139 d->populated = TRUE;
140}
141
142/*! \fn QSqlIndex QSqlSelectCursor::primaryIndex( bool ) const
143 \reimp
144*/
145
146/*! \fn QSqlIndex QSqlSelectCursor::index( const QStringList& ) const
147 \reimp
148*/
149
150/*! \fn QSqlIndex QSqlSelectCursor::index( const QString& ) const
151 \reimp
152*/
153
154/*! \fn QSqlIndex QSqlSelectCursor::index( const char* ) const
155 \reimp
156*/
157
158/*! \fn void QSqlSelectCursor::setPrimaryIndex( const QSqlIndex& )
159 \reimp
160*/
161
162/*! \fn void QSqlSelectCursor::append( const QSqlFieldInfo& )
163 \reimp
164*/
165
166/*! \fn void QSqlSelectCursor::insert( int, const QSqlFieldInfo& )
167 \reimp
168*/
169
170/*! \fn void QSqlSelectCursor::remove( int )
171 \reimp
172*/
173
174/*! \fn void QSqlSelectCursor::clear()
175 \reimp
176*/
177
178/*! \fn void QSqlSelectCursor::setGenerated( const QString&, bool )
179 \reimp
180*/
181
182/*! \fn void QSqlSelectCursor::setGenerated( int, bool )
183 \reimp
184*/
185
186/*! \fn QSqlRecord* QSqlSelectCursor::editBuffer( bool )
187 \reimp
188*/
189
190/*! \fn QSqlRecord* QSqlSelectCursor::primeInsert()
191 \reimp
192*/
193
194/*! \fn QSqlRecord* QSqlSelectCursor::primeUpdate()
195 \reimp
196*/
197
198/*! \fn QSqlRecord* QSqlSelectCursor::primeDelete()
199 \reimp
200*/
201
202/*! \fn int QSqlSelectCursor::insert( bool )
203 \reimp
204*/
205
206/*! \fn int QSqlSelectCursor::update( bool )
207 \reimp
208*/
209
210/*! \fn int QSqlSelectCursor::del( bool )
211 \reimp
212*/
213
214/*! \fn void QSqlSelectCursor::setMode( int )
215 \reimp
216*/
217
218/*! \fn void QSqlSelectCursor::setSort( const QSqlIndex& )
219 \reimp
220*/
221
222/*! \fn QSqlIndex QSqlSelectCursor::sort() const
223 \reimp
224*/
225
226/*! \fn void QSqlSelectCursor::setFilter( const QString& )
227 \reimp
228*/
229
230/*! \fn QString QSqlSelectCursor::filter() const
231 \reimp
232*/
233
234/*! \fn void QSqlSelectCursor::setName( const QString&, bool )
235 \reimp
236*/
237
238/*! \fn QString QSqlSelectCursor::name() const
239 \reimp
240*/
241
242/*! \fn QString QSqlSelectCursor::toString( const QString&, const QString& ) const
243 \reimp
244*/
245#endif // QT_NO_SQL
Note: See TracBrowser for help on using the repository browser.