KDevelop API Documentation

languages/sql/sqloutputwidget.cpp

Go to the documentation of this file.
00001 /*************************************************************************** 00002 * Copyright (C) 2003 by Harald Fernengel * 00003 * harry@kdevelop.org * 00004 * * 00005 * This program is free software; you can redistribute it and/or modify * 00006 * it under the terms of the GNU General Public License as published by * 00007 * the Free Software Foundation; either version 2 of the License, or * 00008 * (at your option) any later version. * 00009 * * 00010 ***************************************************************************/ 00011 00012 #include <qsqldatabase.h> 00013 #include <qsqlerror.h> 00014 #include <qsqlcursor.h> 00015 #include <qsqldriver.h> 00016 #include <qsqlrecord.h> 00017 #include <qwidgetstack.h> 00018 #include <qdatatable.h> 00019 #include <qtextedit.h> 00020 #include <qlayout.h> 00021 #include <qstylesheet.h> 00022 00023 #include <klocale.h> 00024 00025 #include "sqloutputwidget.h" 00026 00027 class QCustomSqlCursor: public QSqlCursor 00028 { 00029 public: 00030 QCustomSqlCursor( const QString & query = QString::null, bool autopopulate = TRUE, QSqlDatabase* db = 0 ) : 00031 QSqlCursor( QString::null, autopopulate, db ) 00032 { 00033 exec( query ); 00034 if ( isSelect() && autopopulate ) { 00035 QSqlRecordInfo inf = ((QSqlQuery*)this)->driver()->recordInfo( *(QSqlQuery*)this ); 00036 for ( QSqlRecordInfo::iterator it = inf.begin(); it != inf.end(); ++it ) { 00037 append( *it ); 00038 } 00039 } 00040 setMode( QSqlCursor::ReadOnly ); 00041 } 00042 QCustomSqlCursor( const QCustomSqlCursor & other ): QSqlCursor( other ) {} 00043 bool select( const QString & /*filter*/, const QSqlIndex & /*sort*/ = QSqlIndex() ) 00044 { return exec( lastQuery() ); } 00045 QSqlIndex primaryIndex( bool /*prime*/ = TRUE ) const 00046 { return QSqlIndex(); } 00047 int insert( bool /*invalidate*/ = TRUE ) 00048 { return FALSE; } 00049 int update( bool /*invalidate*/ = TRUE ) 00050 { return FALSE; } 00051 int del( bool /*invalidate*/ = TRUE ) 00052 { return FALSE; } 00053 void setName( const QString& /*name*/, bool /*autopopulate*/ = TRUE ) {} 00054 }; 00055 00056 00057 SqlOutputWidget::SqlOutputWidget ( QWidget* parent, const char* name ) : 00058 QWidget( parent, name ) 00059 { 00060 m_stack = new QWidgetStack( this ); 00061 m_table = new QDataTable( this ); 00062 m_textEdit = new QTextEdit( this ); 00063 00064 m_textEdit->setTextFormat( QTextEdit::RichText ); 00065 m_textEdit->setReadOnly( true ); 00066 00067 m_stack->addWidget( m_textEdit ); 00068 m_stack->addWidget( m_table ); 00069 00070 QVBoxLayout* layout = new QVBoxLayout( this ); 00071 layout->addWidget( m_stack ); 00072 } 00073 00074 SqlOutputWidget::~SqlOutputWidget() 00075 {} 00076 00077 void SqlOutputWidget::showQuery( const QString& connectionName, const QString& query ) 00078 { 00079 QSqlDatabase* db = QSqlDatabase::database( connectionName, true ); 00080 if ( !db ) { 00081 showError( i18n("No such connection: %1").arg( connectionName ) ); 00082 return; 00083 } 00084 if ( !db->isOpen() ) { 00085 showError( db->lastError() ); 00086 return; 00087 } 00088 00089 QSqlCursor* cur = new QCustomSqlCursor( query, true, db ); 00090 if ( !cur->isActive() ) { 00091 showError( cur->lastError() ); 00092 } else if ( cur->isSelect() ) { 00093 m_table->setSqlCursor( cur, true, true ); 00094 m_table->refresh( QDataTable::RefreshAll ); 00095 m_stack->raiseWidget( m_table ); 00096 } else { 00097 showSuccess( cur->numRowsAffected() ); 00098 } 00099 } 00100 00101 void SqlOutputWidget::showSuccess( int rowsAffected ) 00102 { 00103 m_textEdit->clear(); 00104 m_textEdit->setText( i18n("Query successful, number of rows affected: %1").arg( rowsAffected ) ); 00105 m_stack->raiseWidget( m_textEdit ); 00106 } 00107 00108 void SqlOutputWidget::showError( const QString& message ) 00109 { 00110 m_textEdit->clear(); 00111 m_textEdit->setText( "<p><b>" + i18n("An error occurred:") + "</b></p>\n" + message ); 00112 m_stack->raiseWidget( m_textEdit ); 00113 } 00114 00115 void SqlOutputWidget::showError( const QSqlError& message ) 00116 { 00117 m_textEdit->clear(); 00118 m_textEdit->setText( "<p><b>" + i18n("An error occurred:") + 00119 "</b></p>\n<p><i>" + i18n("Driver") + "</i>: " + 00120 QStyleSheet::escape( message.driverText() ) + 00121 "<br><i>" + i18n("Database") + ":</i>: " + 00122 QStyleSheet::escape( message.databaseText() ) ); 00123 m_stack->raiseWidget( m_textEdit ); 00124 } 00125 00126 #include "sqloutputwidget.moc" 00127
KDE Logo
This file is part of the documentation for KDevelop Version 3.0.4.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Oct 19 08:01:46 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003