Exemplo n.º 1
0
//Encargado de buscar un registro y mostrarlo
void MainWindow::on_searchRecord_triggered()
{
    //toma el vector de campos
    vector<Field*> fields = this->fileRecord.getFields();
    QString str;

    //muestra una ventana para que se busque el registro a partir de su clave
    for(int i = 0; i< fields.size(); i++){
        Field* currentField = fields.at(i);
        if(currentField->isKey()){
            InputDialog* idialog = new InputDialog();
            idialog->setField(currentField);
            idialog->exec();

            if(idialog->getString().isEmpty()){
                return;
            }

            str = idialog->getString();
            delete idialog;
       }
    }

    //Obtiene un indice primario de la busqueda en el mapa de indices primarios
    PrimaryIndex* index = this->fileRecord.searchRecord(str.toStdString());

    //En caso de que no se encuentre el registro, este indice primario es nulo
    if(index == NULL){
        QMessageBox::critical(this,"Error","El registro que buscaba no se encontro");
        return;
    }else{
        //se obtiene un registro a partir del indice primario
        Record* record = this->fileRecord.getRecord(index);
        vector<string> r = record->getRecord();

        //se hace el modelo para poder mostrar el registro
        QStandardItemModel* model = new QStandardItemModel(1,1,this);

        //se hacen los encabezados de la tabla
        for(int i = 0; i < fields.size(); i++){
            model->setHorizontalHeaderItem(i,new QStandardItem(QString::fromStdString(fields[i]->getName())));
        }

        //se la fila para el registro
        for(int i = 0; i < fields.size(); i++){
            model->setItem(0,i,new QStandardItem(QString::fromStdString(r[i])));
        }

        //se elimina el registro de memoria porque esta guardado en el archivo
        delete record;

        //se asigna el modelo a la tabla del main
        ui->MWTable->setModel(model);
    }
}
Exemplo n.º 2
0
//se encarga de eliminar un registro, solamente lo marca y lo elimina de los indices primarios
//para que despues se le pase el compactar
void MainWindow::on_deleteRecord_triggered()
{
    vector<Field*> fields = this->fileRecord.getFields();
    QString str;

    for(int i = 0; i< fields.size(); i++){
        Field* currentField = fields.at(i);
        if(currentField->isKey()){
            //se le muestra una nueva ventana para pedir la llave primaria
            InputDialog* idialog = new InputDialog();
            idialog->setField(currentField);
            idialog->exec();

            if(idialog->getString().isEmpty()){
                return;
            }

            str = idialog->getString();
            delete idialog;
       }
    }

    //toma el indice primario por medio de una busqueda
    PrimaryIndex* index = this->fileRecord.searchRecord(str.toStdString());

    if(index == NULL){
        QMessageBox::critical(this,"Error","No se encontro el registro con la llave ingresada");
        return;
    }else{
        //se borra el registro de los indices primarios y se marca con un * en el archivo de registros
        if(this->fileRecord.deleteRecord(index)){
            vector<PrimaryIndex*> indexes = this->fileRecord.getIndexes();

            stringstream ss;
            for(int i = 0; i < indexes.size(); i++){
                ss<<indexes.at(i)->toString();
                if(i != indexes.size() -1){
                    ss<<'/';
                }
            }
            this->indicesFile.seekp(0,ios_base::beg);
            this->indicesFile.write(ss.str().c_str(),ss.str().length());
            this->indicesFile.flush();

            QMessageBox::information(this,"Correcto","Se ha podido eliminar el registro correctamente");
        }else{
            QMessageBox::critical(this,"Error","No se pudo eliminar el registro, no se encuentra la llave");
        }
    }
}
Exemplo n.º 3
0
int input(int wi, int h, QWidget *w, int argc, QStringList args)
{
    int i, type = 0;
    QString title, label, filename;
    bool edit=false, full=true;

    for(i=0; i < argc; i++)
    {
        if(args[i] == "-s")
        {
            type = 0;
        }

        if(args[i] == "-l")
        {
            type = 1;
        }

        if(args[i] == "-b")
        {
            type = 2;
        }

        if(args[i] == "-p")
        {
            type = 3;
        }

        if(args[i] == "-t")
        {
            title = args[i+1];
        }

        if(args[i] == "-L")
        {
            label = args[i+1];
        }

        if(args[i] == "-F")
        {
            if(args[i+1][0] != '-')
            {
                filename = args[i+1];
            }
        }

        if(args[i] =="-E")
        {
            edit = true;
        }

        if(args[i] == "-g")
        {
            full = false;
        }
    }
    InputDialog *id = new InputDialog(wi, h, type, label, title, filename, edit, w);
    if(full)
    {
        w->setCaption(title);
        QPEApplication::showWidget( w );
    }
    if( id->exec() == 1)
    {
        printf("%s\n", id->getString().latin1());
        return 0;
    }
    else
    {
        return -1;
    }
}
Exemplo n.º 4
0
//Encargado de insertar un nuevo registro al archivo
void MainWindow::on_insertRecord_triggered()
{    
    //verifica que existan campos en el archivo
    if(this->fileRecord.fieldsSize() == 0){
        QMessageBox::warning(this,"Error","No tiene campos en el archivo, por favor ingrese un campo para continuar");
        return;
    }

    //Validar que cuando se ingrese la llave, esta sea unica
    vector<string> record;
    vector<Field*> tmpfields = this->fileRecord.getFields();

    for(int i = 0; i < tmpfields.size(); i++){
        Field* currentField = tmpfields[i];

        InputDialog* idialog = new InputDialog();
        idialog->setField(currentField);
        idialog->exec();

        QString text = idialog->getString();

        record.push_back(text.toStdString());
        delete idialog;
    }

    //verifica que la cantidad de ingresos sea igual a la cantidad de campos
    if(record.size() != tmpfields.size()){
        QMessageBox::critical(this,"Error","Error en la cantidad de campos que lleno");
        return;
    }

    //crea un nuevo registro
    Record* newRecord =  new Record(tmpfields,record);

    //verficica que la llave primaria no exista
    if(this->fileRecord.addRecord(newRecord)){
        //Obtiene un vector de indices principales
        vector<PrimaryIndex*> indexes = this->fileRecord.getIndexes();

        //genera como un toString para los indicies
        stringstream ss;
        for(int i = 0; i < indexes.size(); i++){
            ss<<indexes.at(i)->toString();
            if(i != indexes.size() -1){
                ss<<'/';
            }
        }

        //guarda los indices primarios en el archivo
        this->indicesFile.seekp(0,ios_base::beg);
        this->indicesFile.write(ss.str().c_str(),ss.str().length());
        this->indicesFile.flush();

        QMessageBox::information(this,"Correcto","Se ingreso correctamente el nuevo registro");
        delete newRecord;
        //lo borra de memoria, pero ya esta guardado en el archivo
    }else{
        //borra el nuevo registro porque no sirvio de nada
        QMessageBox::critical(this,"Error","Hubo un error al insertar el nuevo registro");
        delete newRecord;
    }
}