www.pudn.com > qt_mysql.zip > MyView.cpp


// MyView.cpp: implementation of the MyView class. 
// 
////////////////////////////////////////////////////////////////////// 
#include  
#include  
#include  
#include "xpmimage.h" 
#include "MyView.h" 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
 
MyView::MyView( QWidget *parent, const char *name) 
	//:QVBox( parent, name) 
{	 
	this->setCaption("MyQuery"); 
	 
	//First Create Frame 
	QMenuBar* menu = new QMenuBar( this );			//Menu 
	QToolBar* tool=new QToolBar(this,"toolbar");		//ToolBar 
	QSplitter* split=new QSplitter( this );			//Main view 
	QStatusBar* status=statusBar();			//StatusBar 
 
	split->setOrientation( Vertical ); 
	setCentralWidget( split ); 
	 
	//insert widget to split 
	m_edit=new QGBKEdit(split); 
	m_edit->setFont(QFont("Times")); 
	m_table=new QTable(2,2,split); 
	m_table->setReadOnly(true); 
	 
	//create pixMap image 
	QPixmap pixFileNew( new_xpm ); 
	QPixmap pixFileOpen( open_xpm ); 
	QPixmap pixFileSave( save_xpm ); 
 
	QPixmap pixExec( exec_xpm ); 
	QPixmap pixConnect( connect_xpm ); 
	QPixmap pixDisconn( disconn_xpm ); 
 
	split->setOpaqueResize(FALSE); 
	 
	//create menu 
	QPopupMenu *file = new QPopupMenu( this ); 
	QPopupMenu *menuEdit = new QPopupMenu( this ); 
	QPopupMenu *query = new QPopupMenu( this );	 
	QPopupMenu *help = new QPopupMenu( this ); 
 
	file->insertItem( pixFileNew, "&New",m_edit,SLOT(newFile()), CTRL+Key_N ); 
	file->insertItem( pixFileOpen, "&Open",m_edit,SLOT(openFile()), CTRL+Key_O ); 
	file->insertItem( pixFileSave,"&Save",m_edit,SLOT(saveFile()), CTRL+Key_S ); 
	file->insertItem( "Save &As",m_edit,SLOT(saveasFile())); 
	file->insertItem( "&Close", m_edit,SLOT(closeFile())); 
	file->insertSeparator(); 
	file->insertItem("Exit",qApp,SLOT(quit())); 
	 
	menuEdit->insertItem("&Undo",m_edit,SLOT(undo()),CTRL+Key_Z); 
	menuEdit->insertItem("&Redo",m_edit,SLOT(redo()),CTRL+Key_Y); 
	menuEdit->insertSeparator(); 
	menuEdit->insertItem("Cu&t",m_edit,SLOT(cut()),CTRL+Key_X); 
	menuEdit->insertItem("&Copy",m_edit,SLOT(copy()),CTRL+Key_C); 
	menuEdit->insertItem("&Paste",m_edit,SLOT(paste()),CTRL+Key_V); 
	menuEdit->insertItem("Clear",m_edit,SLOT(clear())); 
	menuEdit->insertSeparator(); 
	menuEdit->insertItem("Find",m_edit,SLOT(findEdit())); 
	menuEdit->insertItem("Replace",m_edit,SLOT(replaceEdit())); 
	 
 
	query->insertItem(pixConnect, "&Connect",  this, SLOT(Connect())); 
	query->insertItem(pixDisconn, "&DisConnect", this, SLOT(Disconnect()), CTRL+Key_D ); 
	query->insertItem(pixExec, "Exec",this,SLOT(Exec()),Key_F5); 
	 
	help->insertItem("About MyQuery",this,SLOT(aboutMe())); 
	help->insertItem("About QT",this,SLOT(aboutQT())); 
 
	menu->insertItem( "&File", file ); 
	menu->insertItem("&Edit",menuEdit); 
	menu->insertItem("&Query",query); 
	menu->insertItem("&Help",help); 
	 
	//create toolbar 
	QToolButton * tbfileNew 
            = new QToolButton( pixFileNew, "New File", "new file", 
                               m_edit, SLOT(newFile()), tool, "new file" ); 
        QToolButton * tbfileOpen 
            = new QToolButton( pixFileOpen, "Open File", "open file", 
                               m_edit, SLOT(openFile()), tool, "open file" ); 
	QToolButton * tbfileSave 
            = new QToolButton( pixFileSave, "Save File", "save file", 
                               m_edit, SLOT(saveFile()), tool, "save file" ); 
	tool->addSeparator();  
	QToolButton * tbConnect 
            = new QToolButton( pixConnect, "Connect Server", "Connect Server", 
                               this, SLOT(Connect()), tool, "Connect Server" ); 
	QToolButton * tbExec 
            = new QToolButton( pixExec, "Execute Script", "Execute Script", 
                               this, SLOT(Exec()), tool, "Execute Script" ); 
	QToolButton * tbDisConnect 
            = new QToolButton( pixDisconn, "DisConnect Server", "DisConnect Server", 
                               this, SLOT(DisConnect()), tool, "DisConnect Server" ); 
 
	//create status 
	status->message( "Ready", 2000 ); 
	//ÆäËü 
	m_bConnected=false; 
	 
	mysql=new MYSQL; 
	mysql_init(mysql); 
} 
 
MyView::~MyView() 
{ 
	delete mysql; 
	delete m_edit; 
	delete m_table; 
} 
 
bool MyView::Connect() 
{ 
	if (m_bConnected){ 
		int reValue=QMessageBox::warning(this,"MyQuery", 
			"Now there is a available connection.\nDo you want disconnect it and connect another?", 
			QMessageBox::Yes , 
			QMessageBox::No|QMessageBox::Default); 
		if (reValue==QMessageBox::Yes){ 
			Disconnect(); 
		}else{ 
			return true; 
		} 
	} 
	MyConnDlg widget; 
	widget.setMySQL(mysql); 
	if (widget.exec()!=QDialog::Accepted) 
		return false; 
	m_bConnected=true; 
	return true; 
} 
 
bool MyView::Disconnect() 
{ 
	if (!m_bConnected) 
		return true; 
	mysql_close(mysql); 
	m_bConnected=false; 
	return true; 
} 
 
bool MyView::Exec() 
{ 
	if (!m_bConnected){ 
		QMessageBox::warning(this,"NO Connected","Now you don't connect to any MySQL server.please try to connect!"); 
		return false; 
	} 
	QString sql; 
	if (m_edit->hasSelectedText()) 
		sql=m_edit->selectedText(); 
	else 
		sql=m_edit->text(); 
	if (sql.isEmpty()) 
		return false; 
	if (mysql_real_query(mysql,sql,(int)sql.length())==0){	 
		MYSQL_RES* result=mysql_store_result(mysql); 
		showRes(result); 
		mysql_free_result(result); 
	}else{ 
		showError(); 
	} 
 
	return true; 
} 
 
void MyView::showRes(MYSQL_RES* res) 
{ 
	initTable(); 
	if (res==NULL){ 
		m_table->setNumCols(1); 
		m_table->setNumRows(1); 
		m_table->setText(0,0,"operation is successful."); 
		return; 
	} 
	int fieldNum=mysql_num_fields(res); 
	int rowNum=mysql_num_rows(res); 
	QTextCodec *codec = QTextCodec::codecForName("GBK");  
	m_table->setNumCols(fieldNum); 
	m_table->setNumRows(rowNum); 
	MYSQL_FIELD* fields=mysql_fetch_fields(res); 
	QHeader* header=m_table->horizontalHeader(); 
	for (int j=0;jsetLabel(j,codec->toUnicode(fields[j].name)); 
	} 
	MYSQL_ROW row; 
	int rowID=0; 
	while (row=mysql_fetch_row(res)){ 
		for (int i=0;isetText(rowID,i,codec->toUnicode(value) ?codec->toUnicode( value):"NULL"); 
		} 
		rowID++; 
	} 
} 
 
void MyView::showError() 
{ 
	initTable(); 
	m_table->setNumCols(1); 
	m_table->setNumRows(1); 
	m_table->setText(0,0,(QString)mysql_error(mysql)); 
} 
 
void MyView::initTable() 
{ 
	assert(m_table); 
	m_table->setNumCols(0); 
	m_table->setNumRows(0); 
} 
 
 
void MyView::aboutMe() 
{ 
	QString s=QString("This is a query analyzer for MySQL.\nAuthor:SoftMusic\nEmail:mysql_gu@163.net\nVersion: 0.0.3\nCopyRight(C) 2001"); 
	QMessageBox::about(this,"MyQuery",s);  
} 
 
void MyView::aboutQT() 
{ 
	QMessageBox::aboutQt(this,"MyQuery"); 
}