Allow table creation if database user only has access to the existing KBarcode table

(cherry picked from commit 9e61fbb21f)
r14.0.x r14.0.3
Timothy Pearson 9 years ago committed by Slávek Banko
parent a38797c8c9
commit 739f1e63fd

@ -141,142 +141,141 @@ bool SqlTables::newTables()
bool SqlTables::newTables( const TQString & username, const TQString & password, const TQString & hostname, const TQString & database, const TQString & driver )
{
if( KMessageBox::warningContinueCancel( 0,
i18n("We are going to re-create the tables '") +
TQString( TABLE_BASIC "', '" TABLE_CUSTOMER "', '"
TABLE_CUSTOMER_TEXT) +i18n("' and '") + TQString(TABLE_LABEL_DEF "'")) == KMessageBox::Cancel )
return false;
if( !drivers[driver] )
return false;
TQSqlDatabase*dbase = TQSqlDatabase::addDatabase(driver, drivers[driver]->initdb( database ) );
dbase->setDatabaseName( drivers[driver]->initdb( database ) );
dbase->setUserName( username );
dbase->setPassword( password );
dbase->setHostName( hostname );
if(dbase->open()) {
if ((driver != "QSQLITE") && (driver != "TQSQLITE"))
{
bool found = false;
TQSqlQuery existing("SHOW DATABASES LIKE '" + database + "';");
while( existing.next() )
found = true;
TQSqlQuery firstquery( NULL, dbase );
if( !found && !firstquery.exec("CREATE DATABASE " + database + ";")) {
if( KMessageBox::warningContinueCancel( 0, i18n("<qt>Can't create database ")+ database + i18n("<br>You can continue if the database exists already.</qt>")
+ firstquery.lastError().databaseText() ) == KMessageBox::Cancel ) {
dbase->close();
TQSqlDatabase::removeDatabase(drivers[driver]->initdb( database ));
return false;
}
}
}
dbase->close();
TQSqlDatabase::removeDatabase(drivers[driver]->initdb( database ));
// The database is created, now connect to the one specified by the user
dbase = TQSqlDatabase::addDatabase(driver, database );
dbase->setDatabaseName( database );
dbase->setUserName( username );
dbase->setPassword( password );
dbase->setHostName( hostname );
if(!dbase->open() || !dbase->isOpen()) {
KMessageBox::error( 0, i18n("KBarcode could not create the required database. Please create it manually.") + dbase->lastError().databaseText() );
TQSqlDatabase::removeDatabase( database );
return false;
}
TQSqlQuery query( NULL, dbase );
// barcode_basic
query.exec("DROP TABLE " TABLE_BASIC );
exec( &query, "CREATE TABLE " TABLE_BASIC " ("
" uid " + drivers[driver]->autoIncrement() + ","
" article_no varchar(50) DEFAULT NULL,"
" article_desc varchar(50) DEFAULT NULL,"
" barcode_no TEXT DEFAULT NULL,"
" encoding_type varchar(50) DEFAULT NULL,"
" field0 varchar(50) DEFAULT NULL,"
" field1 varchar(50) DEFAULT NULL,"
" field2 varchar(50) DEFAULT NULL,"
" field3 varchar(50) DEFAULT NULL,"
" field4 varchar(50) DEFAULT NULL,"
" field5 varchar(50) DEFAULT NULL,"
" field6 varchar(50) DEFAULT NULL,"
" field7 varchar(50) DEFAULT NULL,"
" field8 varchar(50) DEFAULT NULL,"
" field9 varchar(50) DEFAULT NULL,"
" PRIMARY KEY (uid)"
");" );
// customer
query.exec("DROP TABLE " TABLE_CUSTOMER );
exec( &query, "CREATE TABLE " TABLE_CUSTOMER " ("
" uid " + drivers[driver]->autoIncrement() + " ,"
" customer_no varchar(20) DEFAULT NULL,"
" customer_name varchar(20) DEFAULT NULL,"
" PRIMARY KEY (uid)"
");" );
// customer_text
query.exec("DROP TABLE " TABLE_CUSTOMER_TEXT );
exec( &query, "CREATE TABLE " TABLE_CUSTOMER_TEXT " ("
" uid " + drivers[driver]->autoIncrement() + ","
" customer_no varchar(20) DEFAULT NULL,"
" encoding_type varchar(50) DEFAULT NULL,"
" article_no varchar(50) DEFAULT NULL,"
" article_no_customer varchar(50) NULL,"
" barcode_no TEXT DEFAULT NULL,"
" line0 varchar(50) DEFAULT NULL,"
" line1 varchar(50) DEFAULT NULL,"
" line2 varchar(50) DEFAULT NULL,"
" line3 varchar(50) DEFAULT NULL,"
" line4 varchar(50) DEFAULT NULL,"
" line5 varchar(50) DEFAULT NULL,"
" line6 varchar(50) DEFAULT NULL,"
" line7 varchar(50) DEFAULT NULL,"
" line8 varchar(50) DEFAULT NULL,"
" line9 varchar(50) DEFAULT NULL,"
" PRIMARY KEY (uid)"
");" );
// label_def
query.exec("DROP TABLE " TABLE_LABEL_DEF );
exec( &query, "CREATE TABLE " TABLE_LABEL_DEF " ("
" label_no " + drivers[driver]->autoIncrement() + ","
" manufacture varchar(255) DEFAULT NULL,"
" type varchar(255) DEFAULT NULL,"
" paper char(1) DEFAULT NULL,"
" gap_top NUMERIC(10,4) NULL,"
" gap_left NUMERIC(10,4) NULL,"
" height NUMERIC(10,4) NULL,"
" width NUMERIC(10,4) NULL,"
" gap_v NUMERIC(10,4) NULL,"
" gap_h NUMERIC(10,4) NULL,"
" number_h int DEFAULT NULL," //smalint(6)
" number_v int DEFAULT NULL," //smalint(6)
" paper_type varchar(30) DEFAULT NULL,"
" compatibility varchar(10) DEFAULT NULL," // keep compatibility with older versions, was "remark text"
" PRIMARY KEY (label_no)"
");" );
dbase->close();
TQSqlDatabase::removeDatabase( database );
KMessageBox::information( 0, i18n("Created table ")+database+i18n(" successfully!") );
} else {
TQSqlError dbError = dbase->lastError();
dbase->close();
TQSqlDatabase::removeDatabase(drivers[driver]->initdb( database ));
KMessageBox::sorry(0, i18n("Can't connect to database.") + "\n" + dbError.driverText() + "\n" + dbError.databaseText());
return false;
}
return true;
if( KMessageBox::warningContinueCancel( 0,
i18n("We are going to re-create the tables '") +
TQString( TABLE_BASIC "', '" TABLE_CUSTOMER "', '"
TABLE_CUSTOMER_TEXT) +i18n("' and '") + TQString(TABLE_LABEL_DEF "'")) == KMessageBox::Cancel )
return false;
if( !drivers[driver] )
return false;
TQSqlDatabase*dbase = TQSqlDatabase::addDatabase(driver, drivers[driver]->initdb( database ) );
dbase->setDatabaseName( drivers[driver]->initdb( database ) );
dbase->setUserName( username );
dbase->setPassword( password );
dbase->setHostName( hostname );
if (dbase->open()) {
if ((driver != "QSQLITE") && (driver != "TQSQLITE"))
{
bool found = false;
TQSqlQuery existing("SHOW DATABASES LIKE '" + database + "';");
while( existing.next() )
found = true;
TQSqlQuery firstquery( NULL, dbase );
if( !found && !firstquery.exec("CREATE DATABASE " + database + ";")) {
if( KMessageBox::warningContinueCancel( 0, i18n("<qt>Can't create database ") + database + i18n("<br>You can continue if the database exists already.</qt>")
+ firstquery.lastError().databaseText() ) == KMessageBox::Cancel ) {
dbase->close();
TQSqlDatabase::removeDatabase(drivers[driver]->initdb( database ));
return false;
}
}
}
dbase->close();
TQSqlDatabase::removeDatabase(drivers[driver]->initdb( database ));
} else {
TQSqlError dbError = dbase->lastError();
dbase->close();
TQSqlDatabase::removeDatabase(drivers[driver]->initdb( database ));
if (KMessageBox::warningContinueCancel(0, i18n("<qt>Can't connect to database to create table.") + "<p>" + dbError.driverText() + "<br>" + dbError.databaseText() + i18n("<br>You can continue if the table exists already.</qt>")) == KMessageBox::Cancel) {
return false;
}
}
// The database is created, now connect to the one specified by the user
dbase = TQSqlDatabase::addDatabase(driver, database );
dbase->setDatabaseName( database );
dbase->setUserName( username );
dbase->setPassword( password );
dbase->setHostName( hostname );
if(!dbase->open() || !dbase->isOpen()) {
KMessageBox::error( 0, i18n("KBarcode could not create the required database. Please create it manually.") + dbase->lastError().databaseText() );
TQSqlDatabase::removeDatabase( database );
return false;
}
TQSqlQuery query( NULL, dbase );
// barcode_basic
query.exec("DROP TABLE " TABLE_BASIC );
exec( &query, "CREATE TABLE " TABLE_BASIC " ("
" uid " + drivers[driver]->autoIncrement() + ","
" article_no varchar(50) DEFAULT NULL,"
" article_desc varchar(50) DEFAULT NULL,"
" barcode_no TEXT DEFAULT NULL,"
" encoding_type varchar(50) DEFAULT NULL,"
" field0 varchar(50) DEFAULT NULL,"
" field1 varchar(50) DEFAULT NULL,"
" field2 varchar(50) DEFAULT NULL,"
" field3 varchar(50) DEFAULT NULL,"
" field4 varchar(50) DEFAULT NULL,"
" field5 varchar(50) DEFAULT NULL,"
" field6 varchar(50) DEFAULT NULL,"
" field7 varchar(50) DEFAULT NULL,"
" field8 varchar(50) DEFAULT NULL,"
" field9 varchar(50) DEFAULT NULL,"
" PRIMARY KEY (uid)"
");" );
// customer
query.exec("DROP TABLE " TABLE_CUSTOMER );
exec( &query, "CREATE TABLE " TABLE_CUSTOMER " ("
" uid " + drivers[driver]->autoIncrement() + " ,"
" customer_no varchar(20) DEFAULT NULL,"
" customer_name varchar(20) DEFAULT NULL,"
" PRIMARY KEY (uid)"
");" );
// customer_text
query.exec("DROP TABLE " TABLE_CUSTOMER_TEXT );
exec( &query, "CREATE TABLE " TABLE_CUSTOMER_TEXT " ("
" uid " + drivers[driver]->autoIncrement() + ","
" customer_no varchar(20) DEFAULT NULL,"
" encoding_type varchar(50) DEFAULT NULL,"
" article_no varchar(50) DEFAULT NULL,"
" article_no_customer varchar(50) NULL,"
" barcode_no TEXT DEFAULT NULL,"
" line0 varchar(50) DEFAULT NULL,"
" line1 varchar(50) DEFAULT NULL,"
" line2 varchar(50) DEFAULT NULL,"
" line3 varchar(50) DEFAULT NULL,"
" line4 varchar(50) DEFAULT NULL,"
" line5 varchar(50) DEFAULT NULL,"
" line6 varchar(50) DEFAULT NULL,"
" line7 varchar(50) DEFAULT NULL,"
" line8 varchar(50) DEFAULT NULL,"
" line9 varchar(50) DEFAULT NULL,"
" PRIMARY KEY (uid)"
");" );
// label_def
query.exec("DROP TABLE " TABLE_LABEL_DEF );
exec( &query, "CREATE TABLE " TABLE_LABEL_DEF " ("
" label_no " + drivers[driver]->autoIncrement() + ","
" manufacture varchar(255) DEFAULT NULL,"
" type varchar(255) DEFAULT NULL,"
" paper char(1) DEFAULT NULL,"
" gap_top NUMERIC(10,4) NULL,"
" gap_left NUMERIC(10,4) NULL,"
" height NUMERIC(10,4) NULL,"
" width NUMERIC(10,4) NULL,"
" gap_v NUMERIC(10,4) NULL,"
" gap_h NUMERIC(10,4) NULL,"
" number_h int DEFAULT NULL," //smalint(6)
" number_v int DEFAULT NULL," //smalint(6)
" paper_type varchar(30) DEFAULT NULL,"
" compatibility varchar(10) DEFAULT NULL," // keep compatibility with older versions, was "remark text"
" PRIMARY KEY (label_no)"
");" );
dbase->close();
TQSqlDatabase::removeDatabase( database );
KMessageBox::information( 0, i18n("Created table ")+database+i18n(" successfully!") );
return true;
}
void SqlTables::importLabelDef()

Loading…
Cancel
Save