Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - 43H4FH44H45H4CH49H56H45H

#51
Un poco tarde pero recien lo ví, muy bueno @tena.
Saluos.
#52
"como liberar un programa demo"
Simplemente adquieres la licencia  :xD

Y el programa que mencionas es...  :huh:
dudo que alguien pueda ayudarte  :-\
#53
Cuando le das a construir en jpeg.pro sale un cartel "no se pudo localizar el ejecutable ..." lo cual no importa porque ya se crearon las librerias para jpeg y el "servidor" deberia correr sin problemas, en otro caso haces lo siguiente:

Desinstalar completamente Qt, luego instala QT SDK http://qt.nokia.com/downloads/ (LGPL), entra a Qt Command Prompt (si es win vista o 7 como admin).
Escribe:
configure -release -qt-libjpeg -qt-libpng -static

y cuando termine escribes:

mingw32-make

al terminar haces lo que escribi arriba en jpeg.pro y ahi debe funcionar.

Saluos.
#54
Para ese error solo entras a:

C:\Qt\2010.05\qt\src\plugins\imageformats\jpeg\jpeg.pro

abres el proyecto con QT Creator lo construyes y corres, cierras y ahi ya debe crear el servidor sin problemas:





Saluos.
#55
Podrias probar hacerlo funcionar como demo y ver si funciona correctamente el evento que mencionas, podria ser una falla del mismo programa, en otro caso habria que saber que evento exactamente es el que falla  :P

Saluos
#56
Loa archivos .tar pueden abrirse con Winrar sin problemas, pero mejor te dejo el code asi lo armas directamente:

sql.h

Código (cpp) [Seleccionar]
#ifndef SQL_H
#define SQL_H
#include <QtSql>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QMessageBox>
#include <QListWidget>
#include <QTreeWidget>
#include <QtGui>
class QTreeWidgetItem;
class cMySql
{
public:
    cMySql(){cItem=0;};
    bool createConeccion(const QString sServer, const QString sBD, const QString sUser, const QString sPassword);
    void closeConeccion();
    void listBD(QListWidget *listQuery);
    void listTables(QListWidget *listQuery, const QString sBD);
    void listRows(QTreeWidget *qtWidget, QTreeWidgetItem *qtrItem, const QString sBD, const QString sTable, QIcon iconItem);
    void editResults(const QString sBD, const QString sTable, const QString s1erColumn, const QString sColumn, QString sId, const QString sNewValue);
    void MessageBox(const QString sTitle, const QString sMessage);
private:
    QSqlDatabase db;
    QTreeWidgetItem *cItem;
};

#endif // SQL_H


sql.cpp

Código (cpp) [Seleccionar]
#include "sql.h"
bool cMySql::createConeccion(const QString sServer, const QString sBD, const QString sUser, const QString sPassword)
{
    db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName(sServer);
    db.setDatabaseName(sBD);
    db.setUserName(sUser);
    db.setPassword(sPassword);
    db.setPort(3306);
    if (!db.open()) {
        MessageBox("Error al acceder a la Base de Datos",db.lastError().text());
        return false;
        }   
    return true;
}
void cMySql::listBD(QListWidget *listQuery)
{
    listQuery->clear();   
    QSqlQuery query;
    query.exec("show databases");
    while (query.next()) {
        listQuery->addItem(query.value(0).toString());
        qApp->processEvents(QEventLoop::AllEvents);
    }
}
void cMySql::listTables(QListWidget *listQuery, const QString sBD)
{
    listQuery->clear();
    QSqlQuery query;
    query.exec("use " + sBD);
    query.exec("SHOW TABLES");
    while (query.next()) {
        listQuery->addItem(query.value(0).toString());
        qApp->processEvents(QEventLoop::AllEvents);
    }
}
void cMySql::listRows(QTreeWidget *qtWidget, QTreeWidgetItem *qtrItem, const QString sBD, const QString sTable, QIcon iconItem)
{
    qtWidget->clear();   
    for(int i=0;i<qtrItem->columnCount();i++)
    {
        qtrItem->setText(i, QApplication::translate("window", (const char *) "", 0, QApplication::UnicodeUTF8));
    }
    int i =0;
    QSqlQuery query;
    QSqlQuery query1;
    query.exec("use " + sBD);
    query.exec("DESCRIBE " + sTable);
    while (query.next()) {     
        qtrItem->setIcon(i, iconItem);
        qtrItem->setText(i, QApplication::translate("window", (const char *) query.value(0).toString().toLatin1().data(), 0, QApplication::UnicodeUTF8));               
        i++;
        qApp->processEvents(QEventLoop::AllEvents);
    }
    qtWidget->setColumnCount(7);

    query1.exec("SELECT * FROM " + sTable);
      while (query1.next()) {
          cItem = new QTreeWidgetItem(qtWidget);
          for(int j=0; j<i;j++)
          {
              const QString setData = query1.value(j).toString();
              cItem->setText(j,(const char *)setData.toLatin1().data());
              qApp->processEvents(QEventLoop::AllEvents);
          }
          qApp->processEvents(QEventLoop::AllEvents);
        }     
}
void cMySql::editResults(QString sBD, QString sTable, QString s1erColumn, QString sColumn, QString sId, QString sNewValue)
{
    QSqlQuery query;
    query.exec("use " + sBD);
    if(query.exec("UPDATE " + sTable + " SET " + sColumn + "='" + sNewValue + "' WHERE " + s1erColumn + "=" + sId))
        MessageBox("Edicion Correcta","Se actualizo el valor: " + sNewValue);
    else MessageBox("error",query.lastError().text());
}

void cMySql::closeConeccion()
{
    if(db.isOpen())db.close();
}
void cMySql::MessageBox(const QString sTitle, const QString sMessage)
{
    QMessageBox mBox;
    mBox.setWindowTitle(sTitle);
    mBox.setText(sTitle);
    mBox.setInformativeText( sMessage);
    mBox.setStandardButtons(QMessageBox::Ok);
    mBox.setDefaultButton(QMessageBox::Ok);
    mBox.setIcon(QMessageBox::Information);
    mBox.exec();
}


window.h

Código (cpp) [Seleccionar]
#ifndef WINDOW_H
#define WINDOW_H
#include <QDialog>
#include <QIcon>
#include "sql.h"
class QLineEdit;
class QLabel;
class QPushButton;
class QGroupBox;
class QListWidget;
class QTreeWidget;
class QTreeWidgetItem;
class  QTreeWidgetItem;
class QStandardItemModel;
class dWindow: public QDialog
{
    Q_OBJECT
public:
    dWindow(QWidget *parent = 0);
    ~dWindow();
    void createTreeResult(const QString &sColumn, const int iTotal);
    void setDataTreeResult(QTreeWidget *qtWidget, const QString &sData, int iColumna);
protected:
    void closeEvent(QCloseEvent *event);
private slots:
    void vQueryClicked();
    void vQuery(const QString sServer, const QString sBD, const QString sUser, const QString sPassword);
    void on_listBD_itemClicked();
    void on_listTables_itemClicked();
    void on_treeResult_itemClicked();
private:
    QLabel *labelUser;
    QLabel *labelPassword;
    QLabel *labelBD;
    QLabel *labelServer;
    QLabel *labelResBD;
    QLabel *labelTables;
    QLabel *labelRows;
    QLineEdit *lineUser;
    QLineEdit *linePassword;
    QLineEdit *lineBD;
    QLineEdit *lineServer;
    QPushButton *butQuery;
    QPushButton *butExit;
    QGroupBox *groupBox;
    QGroupBox *groupBox1;
    QGroupBox *groupBox2;
    QListWidget *listBD;
    QListWidget *listTables;
    QTreeWidget *treeResult;
    QTreeWidgetItem *qtrItem;   
    QIcon icon;
    QIcon iconItem;
    QTreeWidgetItem *cItem;
    QStandardItemModel *model;
    cMySql mysql;
};
#endif // WINDOW_H


window.cpp

icon e iconItem usan archivos de recursos (find.png, items.png) que puedes agregarlos en el proyecto con las imagenes que gustes.

Código (cpp) [Seleccionar]
#include <QtGui>
#include "window.h"
#define MAX_LENGHT 20
dWindow::dWindow(QWidget *parent)
    :QDialog(parent)
{
    QFont fuente;
    fuente.setFamily(QString::fromUtf8("Modern No. 20"));
    fuente.setPointSize(14);
    fuente.setBold(true);
    fuente.setItalic(true);
    fuente.setWeight(60);

    QFont fuente2;
    fuente2.setFamily(QString::fromUtf8("MS Shell Dlg 2"));
    fuente2.setPointSize(10);
    fuente2.setBold(true);
    fuente2.setWeight(50);

    QDesktopWidget *d = QApplication::desktop();
    int ancho = d->width();
    int alto = d->height();

    //Añadimos el icono del archivo de recursos
    icon.addFile(QString::fromUtf8(":/icos/iconos/find.png"), QSize(), QIcon::Selected, QIcon::On);
    iconItem.addFile(QString::fromUtf8(":/icos/iconos/items.png"), QSize(), QIcon::Selected, QIcon::On);

    //GROUPBOX PARA LA CONEXION
    groupBox = new QGroupBox(this);
    groupBox->setObjectName(QString::fromUtf8("gbDatos"));
    groupBox->setGeometry(QRect(10, 10, 780, 100)); //X,Y,ANCHO,ALTO

    labelUser = new QLabel(tr("USUARIO"),groupBox);
    labelUser->setGeometry(QRect(10, 20, 130, 25));

    lineUser = new QLineEdit(groupBox);
    lineUser->setGeometry(QRect(10, 50, 130, 20));

    labelPassword = new QLabel(tr("PASSWORD"),groupBox);
    labelPassword->setGeometry(QRect(145, 20, 130, 20));

    linePassword = new QLineEdit(groupBox);
    linePassword->setEchoMode(QLineEdit::Password);
    linePassword->setGeometry(QRect(145, 50, 130, 20));

    labelBD = new QLabel(tr("BASE DE DATOS"),groupBox);
    labelBD->setGeometry(QRect(280, 20, 170, 25));

    lineBD = new QLineEdit(groupBox);
    lineBD->setGeometry(QRect(280, 50, 170, 20));

    labelServer = new QLabel(tr("SERVIDOR"),groupBox);
    labelServer->setGeometry(QRect(455, 20, 130, 25));

    lineServer = new QLineEdit(groupBox);
    lineServer->setGeometry(QRect(455, 50, 170, 20));

    //buttons
    butQuery = new QPushButton(tr("Iniciar consulta"),groupBox);
    butQuery->setGeometry(QRect(630, 14, 145, 35));
    butExit = new QPushButton(tr("Salir"),groupBox);
    butExit->setGeometry(QRect(630, 58, 145, 35));

    //GROUPBOX PARA LOS RESULTADOS
    groupBox1 = new QGroupBox(this);
    groupBox1->setObjectName(QString::fromUtf8("gbResultado"));
    groupBox1->setGeometry(QRect(10, 115, 780, 105));

    labelResBD = new QLabel(tr("Lista Bases de Datos"),groupBox1);
    labelResBD->setGeometry(QRect(60, 20, 200, 25));
    labelTables = new QLabel(tr("Lista Tablas de la Base de Datos"),groupBox1);
    labelTables->setGeometry(QRect(450, 20, 300, 25));

    listBD = new QListWidget(groupBox1);
    listBD->setGeometry(QRect(10, 45, 370, 50));

    listTables = new QListWidget(groupBox1);
    listTables->setGeometry(QRect(395, 45, 370, 50));

    //GROUPBOX PARA LOS RESULTADOS DE LOS DATOS
    groupBox2 = new QGroupBox(this);
    groupBox2->setObjectName(QString::fromUtf8("gbDatos"));
    groupBox2->setGeometry(QRect(10, 230, 780, 350));

    labelRows = new QLabel(tr("Lista datos encontrados en las tablas de la Base de Datos"),groupBox2);
    labelRows->setGeometry(QRect(150, 20, 500, 25));

    treeResult = new QTreeWidget(groupBox2);
    qtrItem = new QTreeWidgetItem();
    model = new QStandardItemModel(treeResult);
    treeResult->setHeaderItem(qtrItem);
    treeResult->setObjectName(QString::fromUtf8("treeResult"));
    treeResult->setGeometry(QRect(10, 45, 760, 300));   
    treeResult->header()->setClickable(true);
    QString iniciar = "";
    createTreeResult(iniciar,7);

    //INCLUYENDO LA FUENTE DE LETRA
    groupBox->setFont(fuente);
    groupBox1->setFont(fuente);
    groupBox2->setFont(fuente);
    listBD->setFont(fuente2);
    listTables->setFont(fuente2);
    treeResult->setFont(fuente2);

    //Seteamos el maximo tamaño y numero de caracteres que puenden ingresar
    lineUser->setMaxLength(MAX_LENGHT);
    linePassword->setMaxLength(MAX_LENGHT);   
    lineBD->setMaxLength(MAX_LENGHT);
    lineServer->setMaxLength(MAX_LENGHT);


    connect(butQuery,SIGNAL(clicked()),this,SLOT(vQueryClicked()));
    connect(butExit,SIGNAL(clicked()),this,SLOT(close()));
    connect(listBD,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(on_listBD_itemClicked()));
    connect(listTables,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(on_listTables_itemClicked()));
    connect(treeResult,SIGNAL(clicked(QModelIndex)),this,SLOT(on_treeResult_itemClicked()));

    groupBox->setTitle(QApplication::translate("Inicio", "REQUISITOS PARA INGRESAR A LA BASE DE DATOS", 0, QApplication::UnicodeUTF8));
    groupBox1->setTitle(QApplication::translate("Inicio", "RESULTADOS DEL ESCANEO AL SERVIDOR DE BASE DE DATOS", 0, QApplication::UnicodeUTF8));
    groupBox2->setTitle(QApplication::translate("Inicio", "RESULTADOS DE LA CONSULTA A LA TABLA EN LA BASE DE DATOS", 0, QApplication::UnicodeUTF8));
    setWindowTitle(tr("MYSQL BROWSER BY 43H4FH44H45H4CH49H56H45H"));
    Qt::WindowFlags f = Qt::Window ;
    setWindowFlags(f);
    setGeometry((ancho)-1100,(alto)-700,800,600);
    setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 255);"));
    setMaximumSize(800,600);
    setMinimumSize(800,600);
    setWindowIcon(icon);
}
dWindow::~dWindow()
{
    delete labelUser;
    delete labelPassword;
    delete labelBD;
    delete labelServer;
    delete labelResBD;
    delete labelTables;
    delete labelRows;
    delete lineUser;
    delete linePassword;
    delete lineBD;
    delete lineServer;
    delete butQuery;
    delete butExit;
    delete groupBox;
    delete groupBox1;
    delete groupBox2;
    delete listBD;
    delete listTables;
    delete treeResult;
    delete qtrItem;
    delete cItem;
    delete model;
}

void dWindow::vQueryClicked()
{
    listTables->clear();
    listBD->clear();
    treeResult->clear();
    if(!lineServer->text().isEmpty() || !lineBD->text().isEmpty() || !lineUser->text().isEmpty()|| !linePassword->text().isEmpty())
        {
            vQuery(lineServer->text(),lineBD->text(),lineUser->text(),linePassword->text());
        }
    else mysql.MessageBox("Error en los Datos Ingresados", "Llene todos los datos antes de realizar la conexion");
}
void dWindow::vQuery(const QString sServer, const QString sBD, const QString sUser, const QString sPassword)
{   
    if(mysql.createConeccion(sServer,sBD,sUser,sPassword))
    {
        butQuery->setDisabled(true);
        lineServer->setDisabled(true);
        lineBD->setDisabled(true);
        lineUser->setDisabled(true);
        linePassword->setDisabled(true);
        mysql.listBD(listBD);
    }
}
void dWindow::on_listBD_itemClicked()
{
    listBD->setDisabled(true);
    listTables->setDisabled(true);
    treeResult->setDisabled(true);
    listTables->clear();
    treeResult->clear();
    QListWidgetItem *curitem = listBD->currentItem();
    QString text = curitem->text();
    mysql.listTables(listTables,text);
    listBD->setEnabled(true);
    listTables->setEnabled(true);
}
void dWindow::on_listTables_itemClicked()
{
    listBD->setDisabled(true);
    listTables->setDisabled(true);
    treeResult->setDisabled(true);
    treeResult->clear();
    QListWidgetItem *curitem = listBD->currentItem();
    QListWidgetItem *curitem2 = listTables->currentItem();
    QString text = curitem->text();
    listTables->setDisabled(true);
    mysql.listRows(treeResult,qtrItem,text,curitem2->text(),iconItem);
    listTables->setEnabled(true);
    listBD->setEnabled(true);
    treeResult->setEnabled(true);
}
void dWindow::on_treeResult_itemClicked()
{
    bool ok;
    QString edit = QInputDialog::getText(this, tr("¿Desea editar este valor?"),tr("Valor Actual: ") + treeResult->currentIndex().data(Qt::DisplayRole).toString(),QLineEdit::Normal,treeResult->currentIndex().data(2).toString(),&ok,Qt::Dialog);
    if (ok)
    {
       treeResult->currentItem()->setData(treeResult->currentIndex().column(),Qt::EditRole,edit);
       mysql.editResults(listBD->currentItem()->text(),
                         listTables->currentItem()->text(),
                          qtrItem->data(0,Qt::DisplayRole).toString(),
                          qtrItem->data(treeResult->currentIndex().column(),Qt::DisplayRole).toString(),
                          treeResult->currentItem()->data(0,Qt::DisplayRole).toString(),edit);
    }
}
void dWindow::createTreeResult(const QString &sColumn, int iTotal)
{
     for(int i=0;i<iTotal;i++)
    {
        qtrItem->setIcon(i, iconItem);
        qtrItem->setText(i, QApplication::translate("window", (const char *) sColumn.toLatin1().data(), 0, QApplication::UnicodeUTF8));
     }
}
void dWindow::closeEvent(QCloseEvent *event)
{
    mysql.closeConeccion();
    event->accept();
}


main.cpp

Código (cpp) [Seleccionar]
#include <QtGui>
#include "window.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    dWindow *win = new dWindow;
    win->show();
        return app.exec();
}


Para compilar, el modo mas sencillo que encontre fue instalar el QT SDK http://qt.nokia.com/downloads/ (LGPL), luego instalar MySQL Server 5.1 (mysql-essential-5.1.55-win32.msi) en la ruta que gustes.

Luego entrar a Qt Command Prompt (si es win vista o 7 como admin).
Código (bash) [Seleccionar]
configure -release -qt-sql-mysql -l mysql -I D:/MySQL/include -L D:/MySQL/lib/opt -static

En mi caso lo tenia instalado en la unidad D con win XP en la ruta MySQL, luego:

Código (bash) [Seleccionar]
mingw32-make

Con eso bastaria para crear el plugin mysql.

Aqui te dejo un ejemplo compilado para windows por si quieres verlo.

http://www.4shared.com/file/RNFigoAz/Mysql.html

Bueno puedes mejorar varias cosas, asi que ahi te lo dejo  :P

Saludos.
#57
@halomar supongo que utilizas Turbo C++  por esto:
Código (cpp) [Seleccionar]
#include <iostream.h>
Deberias cambiarlo en mi caso te recomendaria Visual C++ 2008-2010, pero existen muchos otros y eso depende de tu gusto.
Para el switch puedes usar tolower o toupper para pasar el caracter a minuscula o mayuscula, o puedes hacerlo manualmente sin usar esas funciones.

Código (cpp) [Seleccionar]
switch (oper)
         {
           case 'a':
           case 'A':
           cout<<"la suma de los numeros es: "<<suma=num1+num2;
            break;


Ademas porque usas 'a' o 'A' si en las opciones muestras 'S', tienes que revisar el uso de la sentencia switch que de seguro esta en el libro que usas (si no esta, mejor usa otro libro), al ver como manejas los operadores pienso que deberias volver a leer el libro que usas u otro mejor porque cometes demasiados errores.
Saluos.
#59
Como esta hecho en visual C++ a lo mucho se puede obtener una aproximación del código fuente similar a pseudocódigo, asi que obtener el código fuente esta dificil   :-\

Saluos.
#60
Desde mi punto de vista para analizar un programa en Delphi empezaria con Dede, pero antes me aseguraria de que el programa pueda ser activado ya sea con un numero de serie u otra forma, puesto que en algunos casos solo dejan decargar una demo sin las funciones del programa original y es vano el analizarlo, ya que si se adquiere la licencia es cuando te envian el enlace de descarga del soft original.

Saluos  :P