Manejo Vistas en Mysql

Post Reply
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Manejo Vistas en Mysql

Post by ruben Dario »

Saludos al forum

Alguine del forum ha manejado vistas en sus proyectos, segun veo en la documentacion tiene muchas ventajas al manejarlas.
Me gustaria ver sus comentarios en sus esperiencias.
Gracias
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
armando.lagunas
Posts: 340
Joined: Mon Oct 05, 2009 3:35 pm
Location: Curico-Chile
Contact:

Re: Manejo Vistas en Mysql

Post by armando.lagunas »

Hola Ruben:

checa este enlace para que te orientes un poco mas.

http://forums.fivetechsupport.com/viewt ... =6&t=32245


//---- Editado ----


hola

en MySql yo creo "Vistas"..(Views), que son instrucciones SQL que generan una "vista" como si fuera una tabla mas de MySql, después la llamo desde el programa con las clausulas Where que necesito en el momento de llamarlas..., yo utilizo Navicat para hacerlo, pero estuve viendo Workbench (se descarga desde el sitio http://www.mysql.com ..comunity, y es gratis) y se puede hacer lo mismo de forma sencilla.
te muestro unas imagenes...

Image

este es el resultado de esa vista

Image

y asi lo llamo desde el programa

Code: Select all


   oDbf  := oApp:oConnect:Query("SELECT * FROM V_PALLET_SIN_INSPECCION_DETALLE WHERE GRUPO='"+cGrupo+"' AND ESPECIE='"+cEspecie+"' AND FOL_INTERNO='"+cFolio+"' ")

 
la clausula where hago el filtro para hacer mas pequeña la consulta

viendo tu código lo sería algo asi

Code: Select all


CREATE 
    ALGORITHM = TEMPTABLE 
    DEFINER = `root`@`%` 
    SQL SECURITY DEFINER
VIEW `vista_tutores` AS

        SELECT id_tutor, tutor1 AS TUTORFAC,dniT1 AS DNI,doctipot1 AS DOCTIPO,direcnrot1 AS DIREC,totcuotas FROM tutores 
        UNION SELECT id_tutor,tutor2 AS TUTORFAC,dniT2 AS DNI,doctipot2 AS DOCTIPO,direcnrot2 AS DIREC,totcuotas
               FROM tutores ORDER BY TutorFac

 
y lo llamas desde tu programa algo asi...

Code: Select all

"SELECT * FROM vista_tutores WHERE FacAfipT1=" +Str( nFiltro,1,0 )+" AND "+ "FacAfipT2=" +Str( nFiltro,1,0 )
 
la verdad es solo un tip...que te puede ayudar

saludos
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Manejo Vistas en Mysql

Post by MarioG »

Estimados;
En relación aeste tema de Vistas; a ver si pueden ayudarme.
He creado una Vista que funciona correctamente
En mi PC y mediante HeidiSQL la elimino y, luego al ejecutar la App, se genera nuevamente.
El problema, es que en la PC de mi cliente, y desde algun momento, el ejecutar la App me sale el siguiente mensaje de error.
Le doy Ok. ingresa al programa, y no da ningun error (la vista es de consulta permamente en un xBrowse).
Tambien si en la pc del cliente la borro, al ejecutar la app, no se regenera la Vista y entonces si la app sale con error al ingresar al xBrowse que lo muestra
Reitero, pruebo en mi PC y en otra, y no se reproduce tal error... alguna idea de donde puede estar el error?

Image
Image
Image
Image
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
Adolfo
Posts: 815
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile
Contact:

Re: Manejo Vistas en Mysql

Post by Adolfo »

MarioG

En tu PC atacas a una DB Mysql instalada en un Pc con Windows y donde tu cliente una BD MYSQL instalada en algun servidor Linux ?

Si es asi, los problemas van por el lado del nombre de las variables o campos de las tablas, revisa bien si estan en Mayusculas/minisculas.

En windows 'CODIGO' y 'codigo' son lo mismo... en Linux obviamente NO

Ojala sea eso.

Saludos
Desde Chile
Adolfo
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Lenovo Legion Y520, 16GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1050
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Manejo Vistas en Mysql

Post by MarioG »

Adolfo
gracias por responder
El ambiente es mas sencillo aún.
Tanto en mi PC, como en la de mi cliente, tengo instalado MariaDb bajo Windows y se usa acceso a Localhost, ya que por ahora mi cliente accede desde una PC
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
cmsoft
Posts: 653
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Manejo Vistas en Mysql

Post by cmsoft »

Mario:
Has verificado los permisos que tiene el usuario en la PC de tu cliente? Tal vez sea un tema de privilegios.
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Manejo Vistas en Mysql

Post by xmanuel »

Puedes poner el código de creación de la vista?

Por cierto, si has comprobado los permisos y demás... puede que la versión del cliente MariaDB sea diferente?
Haz una búsqueda del fichero "LibMySQLd.dll" por si hubiera más de una ocurrencia en el ordenador de tu cliente...
______________________________________________________________________________
Sevilla - Andalucía
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Manejo Vistas en Mysql

Post by MarioG »

CM
Gracias por responder
He instalado MariaDB, en la PC del cliente, sin alterar nada en tal proceso. Luego, con el programa creo Usuarios con estos privilegios:

Code: Select all

CREATE,INSERT,UPDATE,DELETE,SELECT,CREATE VIEW,SHOW VIEW
No obstante cuando borro la vista desde HeidiSQL, tanto si ingreso como un usuario, como si lo hago como root, no crea la vista (no recuerdo el mensaje de error ahora).
O sea para crearla nuevamente recurro a un backup que hice desde mi PC pero, al ejecutar la app, muestra el dialog de error que mostré en el primer post.

Manu, gracias, esta es la sentencia:

Code: Select all

   aEstructura[_VTUTORES ]:= "CREATE VIEW IF NOT EXISTS vista_tutores AS " + ;
                             "SELECT id_tutor,tutor1 AS TUTORFAC,dniT1 AS DCTO,doctipoT1 AS DOCTIPO,direcnroT1 AS DIREC,locprovT1 AS LOCALI," + ;
                                    "pisoT1 AS PISO,dptoT1 AS DPTO,manzanaT1 AS MANZA,parcelaT1 AS PARC,chacraT1 AS CHACRA,barrioT1 AS BARRIO,totcuotas " + ;
                             "FROM tutores WHERE FacAfipT1=1 " + ;
                             "UNION SELECT id_tutor,tutor2 AS TUTORFAC,dniT2 AS DCTO,doctipoT2 AS DOCTIPO,direcnroT2 AS DIREC,locprovT2 AS LOCALI," + ;
                                          "pisoT2 AS PISO,dptoT2 AS DPTO,manzanaT2 AS MANZA,parcelaT2 AS PARC,chacraT2 AS CHACRA,barrioT2 AS BARRIO,totcuotas " + ;
                                   "FROM tutores WHERE FacAfipT2=1 " + ;
                             "UNION SELECT id_tutor,razsocial AS TUTORFAC,cuit AS DCTO,doctipoRS AS DOCTIPO,direcnroRS AS DIREC,locprovRS AS LOCALI," + ;
                                          "pisoRS AS PISO,dptoRS AS DPTO, ''          ,''                  ,''                 ,''                 ,totcuotas " + ;
                                   "FROM tutores WHERE FacAfipRS=1 " + ;
                                   "ORDER BY TUTORFAC,DCTO"
Para entender la vista. Se toma de la tabla de Tutores. Esta tiene los datos de un Tutor1 (generalmente el padre), Tutor2 (la madre), y si procede una Razon Social (Esta tabla, tiene bastante datos, pero la transcribo por si ayuda). De manera que mediante un campo TINYINT(1), se define a nombre de quien se genera la factura, que se selecciona de un xBrowse de tal VISTA.

Code: Select all

aEstructura[_TUTORES ]:= "CREATE TABLE IF NOT EXISTS tutores (" + ;                            
                         "id_tutor    INT(7) UNSIGNED ZEROFILL AUTO_INCREMENT PRIMARY KEY," + ;
                         "DeBaja      TINYINT(1) DEFAULT 0,"         + ;    // 0 Alta - 1 Baja 
                         "TotCuotas   FLOAT(10,2) DEFAULT 0,"        + ;                       
                         ; // Padre                                                            
                         "FacAfipT1   TINYINT(1) DEFAULT 0,"         + ;    // 1 USA p/Facturar
                         "Tutor1      VARCHAR(50) DEFAULT '',"       + ;                       
                         "DNIT1       VARCHAR(9) DEFAULT '',"        + ;                       
                         "DocTipoT1   INT(2) DEFAULT 96,"            + ;    // 96=FE_DNI segun 
                         "DirecNroT1  VARCHAR(70) DEFAULT '',"       + ;                       
                         "PisoT1      CHAR(2) DEFAULT '',"           + ;                       
                         "DptoT1      CHAR(4) DEFAULT '',"           + ;                       
                         "ManzanaT1   CHAR(3) DEFAULT '',"           + ;                       
                         "ParcelaT1   CHAR(3) DEFAULT '',"           + ;                       
                         "ChacraT1    CHAR(3) DEFAULT '',"           + ;                       
                         "CircunsT1   CHAR(3) DEFAULT '',"           + ;                       
                         "BarrioT1    VARCHAR(40) DEFAULT '',"       + ;                       
                         "CodPosT1    CHAR(8) DEFAULT '',"           + ;                       
                         "LocProvT1   VARCHAR(40) DEFAULT '',"       + ;                       
                         ; // Madre                                                            
                         "FacAfipT2   TINYINT(1) DEFAULT 0,"         + ;    // 1 USA p/Facturar
                         "Tutor2      VARCHAR(50) DEFAULT '',"       + ;                       
                         "DNIT2       VARCHAR(9) DEFAULT '',"        + ;                       
                         "DocTipoT2   INT(2) DEFAULT 96,"            + ;    // 96=FE_DNI segun 
                         "DirecNroT2  VARCHAR(70) DEFAULT '',"       + ;                       
                         "PisoT2      CHAR(2) DEFAULT '',"           + ;                       
                         "DptoT2      CHAR(4) DEFAULT '',"           + ;                       
                         "ManzanaT2   CHAR(3) DEFAULT '',"           + ;                       
                         "ParcelaT2   CHAR(3) DEFAULT '',"           + ;                       
                         "ChacraT2    CHAR(3) DEFAULT '',"           + ;                       
                         "CircunsT2   CHAR(3) DEFAULT '',"           + ;                       
                         "BarrioT2    VARCHAR(40) DEFAULT '',"       + ;                       
                         "CodPosT2    CHAR(8) DEFAULT '',"           + ;                       
                         "LocProvT2   VARCHAR(40) DEFAULT '',"       + ;                       
                         ; // Empresa                                                          
                         "FacAfipRS   TINYINT(1) DEFAULT 0,"         + ;    // 1 USA p/Facturar
                         "CUIT        CHAR(11) DEFAULT '',"                     + ;            
                         "DocTipoRS   INT(2) DEFAULT 80,"            + ;    // 80=FE_cuit segun
                         "CondIVA     INT(2) DEFAULT 1,"             + ;    //  1=FE_RespInscri
                         "RazSocial   VARCHAR(50) DEFAULT '',"       + ;                       
                         "DirecNroRS  VARCHAR(70) DEFAULT '',"       + ;                       
                         "PisoRS      CHAR(2) DEFAULT '',"           + ;                       
                         "DptoRS      CHAR(4) DEFAULT '',"           + ;                       
                         "CodPosRS    CHAR(8) DEFAULT '',"           + ;                       
                         "LocProvRS   VARCHAR(40) DEFAULT '',"       + ;                       
                         ; // Contactos                                                        
                         "MovilT1     VARCHAR(30) DEFAULT '',"       + ;                       
                         "LaboralT1   VARCHAR(30) DEFAULT '',"       + ;                       
                         "Correo_eT1  VARCHAR(100) DEFAULT '',"      + ;                       
                         ;                                                                     
                         "MovilT2     VARCHAR(30) DEFAULT '',"       + ;                       
                         "LaboralT2   VARCHAR(30) DEFAULT '',"       + ;                       
                         "Correo_eT2  VARCHAR(100) DEFAULT '',"      + ;                       
                         ; // Otros                                                            
                         "Contacto    VARCHAR(30) DEFAULT '',"       + ;                       
                         "MovilX      VARCHAR(30) DEFAULT '',"       + ;                       
                         "FijoX       VARCHAR(30) DEFAULT '',"       + ;                       
                         "Observa     TINYTEXT,"                     + ;                       
                         ; // Indices                                                          
                         "INDEX       id_tutor (id_tutor),"          + ;                       
                         "INDEX       tutor_1  (tutor1(20)),"        + ;                       
                         "INDEX       dni_1    (DNIT1),"             + ;                       
                         "INDEX       tutor_2  (tutor2(20)),"        + ;                       
                         "INDEX       dni_2    (DNIT2) )"            + ;                       
                         "COMMENT=    'Tabla de Tutores'"            + ;                       
                         "ENGINE=     INNODB,"                       + ;                       
                         "DEFAULT CHARSET=utf8,"                     + ;                       
                         "COLLATE=utf8_spanish_ci;"
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Manejo Vistas en Mysql

Post by xmanuel »

Lo has solucionado?

Porqué no pruebas a destruir la vista antes y luego a crearla sin condiciones?

Code: Select all

    
DROP VIEW IF EXISTS vista_tutores;

// Y luego

CREATE VIEW vista_tutores AS ...

 
Se me ocurre que internamente MariaDB piense que existe y por eso no la cree... :mrgreen:
______________________________________________________________________________
Sevilla - Andalucía
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Manejo Vistas en Mysql

Post by MarioG »

Manu;
El problema sigue... pero como solo muestra el aviso, y no da error, no se quejan :oops:
Voy a probar tu sugerencia...

gracias
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
Post Reply