VERSION 5.00
Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "MSFLXGRD.OCX"
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
Begin VB.Form form_consultas 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "Generación de consultas"
   ClientHeight    =   8355
   ClientLeft      =   45
   ClientTop       =   330
   ClientWidth     =   10110
   Icon            =   "form_consultas.frx":0000
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MDIChild        =   -1  'True
   MinButton       =   0   'False
   Moveable        =   0   'False
   ScaleHeight     =   8355
   ScaleWidth      =   10110
   Begin VB.Frame frm_alumnos 
      Height          =   495
      Left            =   5280
      TabIndex        =   11
      Top             =   0
      Width           =   4695
      Begin VB.OptionButton Opt_alumnos 
         Caption         =   "Matriculados"
         Height          =   315
         Index           =   1
         Left            =   2640
         TabIndex        =   15
         Top             =   120
         Width           =   1935
      End
      Begin VB.OptionButton Opt_alumnos 
         Caption         =   "Postulantes"
         Height          =   315
         Index           =   0
         Left            =   240
         TabIndex        =   12
         Top             =   120
         Width           =   1935
      End
   End
   Begin VB.ComboBox cmb_tip_informe 
      Height          =   315
      Left            =   1680
      Style           =   2  'Dropdown List
      TabIndex        =   10
      Top             =   120
      Width           =   3495
   End
   Begin VB.TextBox txt_titulo 
      Height          =   315
      Left            =   1680
      TabIndex        =   3
      Top             =   600
      Width           =   8295
   End
   Begin VB.Frame Frame1 
      Caption         =   "Construcción de consulta"
      ForeColor       =   &H00FF0000&
      Height          =   6495
      Left            =   120
      TabIndex        =   0
      Top             =   1080
      Width           =   9855
      Begin MSFlexGridLib.MSFlexGrid grd_valores 
         Height          =   1575
         Left            =   1320
         TabIndex        =   1
         Top             =   360
         Width           =   8415
         _ExtentX        =   14843
         _ExtentY        =   2778
         _Version        =   393216
         Rows            =   5
         AllowBigSelection=   0   'False
      End
      Begin MSFlexGridLib.MSFlexGrid grd_descripcion 
         Height          =   1575
         Left            =   120
         TabIndex        =   4
         Top             =   360
         Width           =   1215
         _ExtentX        =   2143
         _ExtentY        =   2778
         _Version        =   393216
         Rows            =   5
         AllowBigSelection=   0   'False
         BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
            Name            =   "MS Sans Serif"
            Size            =   8.25
            Charset         =   0
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
      End
      Begin VB.Frame Frame_tablas 
         ForeColor       =   &H00FF0000&
         Height          =   4215
         Left            =   1800
         TabIndex        =   23
         Top             =   2640
         Width           =   5535
         Begin VB.CommandButton btn_cancelar_campos 
            Caption         =   "Cancelar"
            Height          =   375
            Left            =   3960
            TabIndex        =   25
            Top             =   3600
            Width           =   1455
         End
         Begin VB.ComboBox cmb_tablas 
            Height          =   315
            Left            =   1800
            Style           =   2  'Dropdown List
            TabIndex        =   24
            Top             =   360
            Width           =   2655
         End
         Begin MSFlexGridLib.MSFlexGrid grd_campos 
            Height          =   2535
            Left            =   120
            TabIndex        =   26
            Top             =   960
            Width           =   5295
            _ExtentX        =   9340
            _ExtentY        =   4471
            _Version        =   393216
         End
         Begin VB.Line Line5 
            BorderColor     =   &H8000000C&
            X1              =   0
            X2              =   5500
            Y1              =   825
            Y2              =   825
         End
         Begin VB.Line Line1 
            BorderColor     =   &H80000005&
            X1              =   15
            X2              =   5500
            Y1              =   840
            Y2              =   840
         End
         Begin VB.Label lbl_seltabla 
            Caption         =   "Seleccione"
            Height          =   255
            Left            =   120
            TabIndex        =   27
            Top             =   360
            Width           =   5055
         End
      End
      Begin VB.Frame Frame_tipocampos 
         Caption         =   "Seleccione origen de los campos"
         ForeColor       =   &H00FF0000&
         Height          =   1695
         Left            =   1440
         TabIndex        =   18
         Top             =   1920
         Width           =   6735
         Begin VB.CommandButton btn_can_tipocampo 
            Caption         =   "Cancelar"
            Height          =   375
            Left            =   3480
            TabIndex        =   22
            Top             =   1080
            Width           =   1695
         End
         Begin VB.CommandButton btn_ace_tipocampo 
            Caption         =   "Aceptar"
            Height          =   375
            Left            =   1440
            TabIndex        =   21
            Top             =   1080
            Width           =   1695
         End
         Begin VB.OptionButton Opt_tipocampos 
            Caption         =   "Datos asociados"
            Height          =   375
            Index           =   0
            Left            =   3960
            TabIndex        =   19
            Top             =   360
            Width           =   2295
         End
         Begin VB.OptionButton Opt_tipocampos 
            Caption         =   "Campos propios"
            Height          =   375
            Index           =   1
            Left            =   480
            TabIndex        =   20
            Top             =   360
            Width           =   2295
         End
      End
   End
   Begin VB.Frame Frame3 
      Caption         =   "Criterios"
      ForeColor       =   &H00FF0000&
      Height          =   2655
      Left            =   4800
      TabIndex        =   16
      Top             =   3360
      Width           =   4935
      Begin MSComctlLib.ProgressBar prgbar_llenando_combo 
         Height          =   255
         Left            =   120
         TabIndex        =   17
         Top             =   2280
         Width           =   4695
         _ExtentX        =   8281
         _ExtentY        =   450
         _Version        =   393216
         Appearance      =   1
      End
   End
   Begin VB.Frame Frame_resultado 
      Caption         =   "Resultado de la consulta"
      ForeColor       =   &H00FF0000&
      Height          =   3615
      Left            =   1080
      TabIndex        =   7
      Top             =   3360
      Width           =   8055
      Begin MSFlexGridLib.MSFlexGrid grd_resultado 
         Height          =   3015
         Left            =   240
         TabIndex        =   8
         Top             =   360
         Width           =   7575
         _ExtentX        =   13361
         _ExtentY        =   5318
         _Version        =   393216
         AllowUserResizing=   1
      End
   End
   Begin VB.CommandButton btn_generar_consulta 
      Caption         =   "Generar consulta"
      Height          =   255
      Left            =   120
      TabIndex        =   14
      Top             =   6480
      Width           =   1575
   End
   Begin VB.CommandButton btn_otro_informe 
      Caption         =   "Otro Informe"
      Height          =   255
      Left            =   120
      TabIndex        =   13
      Top             =   6120
      Width           =   1575
   End
   Begin VB.TextBox txt_consulta_sql 
      Height          =   315
      Left            =   1320
      TabIndex        =   5
      Top             =   7200
      Width           =   8415
   End
   Begin VB.Label Label4 
      Caption         =   "Informe sobre"
      Height          =   255
      Left            =   240
      TabIndex        =   9
      Top             =   120
      Width           =   1335
   End
   Begin VB.Label Label1 
      Caption         =   "Consulta sql"
      Height          =   255
      Left            =   600
      TabIndex        =   6
      Top             =   7200
      Width           =   1095
   End
   Begin VB.Label Label2 
      Caption         =   "Título del informe"
      Height          =   255
      Left            =   240
      TabIndex        =   2
      Top             =   600
      Width           =   1335
   End
End
Attribute VB_Name = "form_consultas"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim i As Integer, ltexto As Integer, lnumerico As Integer, lboleano As Integer, lhorafecha As Integer
Dim EspacioTrabajo As Workspace   'objeto workspace principal
Dim BaseDatos As Database    'objeto database principal
Dim haytablas As Boolean, haycampos As Boolean
Dim Tablas1() As String 'En esta matriz guardare el nombre de las tabla principales
Dim Tablas2() As String 'En esta matriz guardare el nombre de las tablas asociadas a las tablas principales
'y su descripción la cual mostraré en el combo de tablas
Dim campos() As String 'En esta matriz guardare el nombre del campo y su
'desripción el cual mostraré en una grilla inmediata% después de seleccionar
'una tabla
Dim relacion As String 'Esta variable almacena una cadena con los
'nombres reales de las tablas separados por coma (solo las tablas a las que tendrá
'acceso el usuario)
Dim strsql As String 'Esta variable almacena la cadena sql que se irá formando

'Estas variables indican el largo del array que almacena los operadores para
'los diferentes tipos de datos
' El número de columnas de los sgtes array es 2 por que almacena
' el signo del operador y su descripción ej: " = " , "Igual a"
Dim Tipoinforme As Variant, texto As Variant, numerico As Variant, boleano As Variant, horafecha As Variant
    

Private Sub btn_ace_tipocampo_Click()
Me.Frame_tipocampos.Visible = False
'tablainforme = Tablas1(Me.cmb_tip_informe.ListIndex, 2)
If Me.Opt_tipocampos(1).Value Then
    Me.lbl_seltabla.Caption = "                  Datos propios"
    Me.Frame_tablas.Visible = True
    Me.cmb_tablas.Visible = False
    Me.grd_campos.Clear
    Me.grd_campos.FormatString = "^ Item |Nombre campo       |  Descripción                                 "
    Me.grd_campos.Cols = 3
    Me.grd_campos.Rows = 2
    totalcampos = 0
    tabla = Tablas1(Me.cmb_tip_informe.ListIndex, 1)
    For Each ncampos In BaseDatos.TableDefs(tabla).Fields
        totalcampos = totalcampos + 1
    Next
    ReDim campos(totalcampos, 2)
    t = 1
    If Len(tabla) > 0 Then
        For Each campo In BaseDatos.TableDefs(tabla).Fields
            Me.grd_campos.Row = t
            campos(t, 1) = campo.Name: campos(t, 2) = devuelvecampo("tablas_y_campos", "", "descripcion", "nom_tabla = '" & tabla & "' and nom_campo ='" & campo.Name & "'", conn)
            Me.grd_campos.Col = 0: Me.grd_campos.Text = t 'campos(t, 1)
            Me.grd_campos.Col = 1: Me.grd_campos.Text = campos(t, 1)
            Me.grd_campos.Col = 2: Me.grd_campos.Text = campos(t, 2)
            haycampos = True
            t = t + 1
            Me.grd_campos.Rows = Me.grd_campos.Rows + 1
        Next
        Me.grd_campos.Rows = Me.grd_campos.Rows - 1
    End If
Else
    Me.lbl_seltabla.Caption = "Seleccione tabla"
    Me.Frame_tablas.Visible = True
    Me.cmb_tablas.Visible = True
       
End If
    
End Sub

Private Sub btn_can_tipocampo_Click()
Me.Frame_tipocampos.Visible = False
Me.grd_valores.Enabled = True

End Sub

Private Sub btn_cancelar_campos_Click()
Me.grd_campos.Clear
Me.grd_campos.Rows = 2
Me.Frame_tablas.Visible = False
Me.grd_valores.Enabled = True
End Sub

Private Sub btn_generar_consulta_Click()
Dim Strtablas As String
Dim Strcampos As String
Dim encabezados As String
Me.grd_valores.Row = 2
For t = 1 To Me.grd_valores.Cols
        Me.grd_valores.Col = t - 1
        camporecorrido = Me.grd_valores.Text
        While Len(camporecorrido) > 0
                Strcampos = Strcampos & camporecorrido & ", "
                pospunto = InStr(1, camporecorrido, ".")
            'If pospunto > 1 Then
                Result = Mid(camporecorrido, 1, pospunto - 1)
                postabla = InStr(1, Strtablas, Result)
                If postabla = 0 Then
                    Strtablas = Strtablas & Result & ", "
                End If
                Me.grd_valores.Row = Me.grd_valores.Row - 1
                encabezados = encabezados & Me.grd_valores.Text & "               , "
                Me.grd_valores.Row = Me.grd_valores.Row + 1
                camporecorrido = ""
                
            'End If
        Wend
    
Next t

Strcampos = Left(Strcampos, Len(Strcampos) - 2)
Strtablas = Left(Strtablas, Len(Strtablas) - 2)

encabezados = Left(encabezados, Len(encabezados) - 2)
Me.txt_consulta_sql.Text = "select " & Strcampos & " from " & Strtablas
Me.Frame_resultado.Caption = Me.txt_titulo.Text
Me.Frame_resultado.Visible = True
Me.grd_resultado.FixedCols = 0
Me.grd_resultado.FixedRows = 1

'Call llenagrilla(Me.grd_resultado, encabezados, Strtablas, Strcampos, "")
End Sub

Private Sub cmb_tablas_Click()
'Dim campos As Variant
Me.grd_campos.Clear
Me.grd_campos.FormatString = "^ Item |Nombre campo       |  Descripción                                 "
Me.grd_campos.Rows = 2
totalcampos = 0
tabla = Tablas2(Me.cmb_tablas.ListIndex, 1)
For Each ncampos In BaseDatos.TableDefs(tabla).Fields
    totalcampos = totalcampos + 1
Next
ReDim campos(totalcampos, 2)
t = 1
If Len(tabla) > 0 Then
  For Each campo In BaseDatos.TableDefs(tabla).Fields
      Me.grd_campos.Row = t
      campos(t, 1) = campo.Name: campos(t, 2) = devuelvecampo("tablas_y_campos", "", "descripcion", "nom_tabla = '" & tabla & "' and nom_campo ='" & campo.Name & "'", conn)
      Me.grd_campos.Col = 0: Me.grd_campos.Text = t 'campos(t, 1)
      Me.grd_campos.Col = 1: Me.grd_campos.Text = campos(t, 1)
      Me.grd_campos.Col = 2: Me.grd_campos.Text = campos(t, 2)
      haycampos = True
      t = t + 1
      Me.grd_campos.Rows = Me.grd_campos.Rows + 1
  Next
    Me.grd_campos.Rows = Me.grd_campos.Rows - 1
    
End If
End Sub


Private Sub cmb_tip_informe_Click()

If UCase(Tablas1(Me.cmb_tip_informe.ListIndex, 1)) = "POSTULANTES" Then
    Me.frm_alumnos.Visible = True
Else
    Me.frm_alumnos.Visible = False
End If

tablaprincipal = Tablas1(Me.cmb_tip_informe.ListIndex, 1)
Me.cmb_tablas.Clear
relacion = devuelvecampo("tablas_y_campos", "", "tablas_asociadas", "nom_tabla = '" & tablaprincipal & "' and nom_campo ='-' and mostrar", conn)
   'relacion acumula una cadena de tablas asociadas a la tabla principal separadas por coma
   ntablas = 1
        While ntablas <> 0 '
            ntablas = InStr(ntablas + 1, relacion, ",")
            i = i + 1    ' el total de tablas de la cadena
        Wend
        ReDim Tablas2(i, 2)
        t = 0
        While Len(relacion) > 0   ' Aquí se crean los relacion
            poscoma = InStr(1, relacion, ",")
            If poscoma > 1 Then
                encab = Mid(relacion, 1, poscoma - 1)
                Rs.CursorLocation = adUseClient
                Rs.Open "select nom_tabla, descripcion from tablas_y_campos where nom_tabla = '" & encab & "' and nom_campo = '-'", conn
                If Rs.RecordCount > 0 Then
                    Tablas2(t, 1) = Rs("nom_tabla"): Tablas2(t, 2) = Rs("descripcion")
                    Me.cmb_tablas.AddItem Tablas2(t, 2)
                End If
                Rs.Close
                relacion = Mid(relacion, poscoma + 1, Len(relacion))
            ElseIf poscoma = 0 And Len(relacion) > 0 Then
                encab = Mid(relacion, 1, Len(relacion))
                Rs.CursorLocation = adUseClient
                Rs.Open "select nom_tabla, descripcion from tablas_y_campos where nom_tabla = '" & encab & "' and nom_campo = '-'", conn
                If Rs.RecordCount > 0 Then
                    Tablas2(t, 1) = Rs("nom_tabla"): Tablas2(t, 2) = Rs("descripcion")
                    Me.cmb_tablas.AddItem Tablas2(t, 2)
                End If
                Rs.Close
                relacion = ""
            End If
        t = t + 1
        Wend


End Sub

Private Sub Form_Load()

Me.Frame_resultado.Visible = False
Me.Height = 8760
Me.Width = 10230
CentrarForma Me
Me.frm_alumnos.Visible = False
Me.Frame_tipocampos.Visible = False
    Set Rs = New ADODB.Recordset
    
    'Listadetablas = "postulantes,apoderados,profesores,asistencia,codigos__geograficos,codigos_ensenanza,convenios,cursos,hermanos,lugar_accidente,matriculas"
    Rs.CursorLocation = adUseClient
    Me.cmb_tablas.Clear
    Me.Frame_tablas.Visible = False
        
     
        t = 0
        
        Rs.Open "select nom_tabla, descripcion from tablas_y_campos where mostrar and nom_campo ='-' ORDER BY descripcion", conn
        If Rs.RecordCount > 0 Then
            ReDim Tablas1(Rs.RecordCount, 2) 'dimensiono matriz para almacenar tablas y sus descripciones
            While Not Rs.EOF
                Tablas1(t, 1) = Rs("nom_tabla"): Tablas1(t, 2) = Rs("descripcion")
                Me.cmb_tip_informe.AddItem Tablas1(t, 2)
                Rs.MoveNext
                t = t + 1
            Wend
        Else
        MsgBox ("No hay tablas disponibles en este momento")
        End If
        Rs.Close
        'While Len(Listadetablas) > 0   ' Aquí se crean los listadetablas
        '    poscoma = InStr(1, Listadetablas, ",")
        '    If poscoma > 1 Then
        '        encab = Mid(Listadetablas, 1, poscoma - 1)
        '        rs.Open "select nom_tabla, descripcion from tablas_y_campos where nom_tabla = '" & encab & "' and nom_campo = '-'", conn
        '        If rs.RecordCount > 0 Then
        '            Tablas(t, 1) = rs("nom_tabla"): Tablas(t, 2) = rs("descripcion")
        '            Me.cmb_tip_informe.AddItem Tablas(t, 2)
        '        End If
        '        rs.Close
        '        Listadetablas = Mid(Listadetablas, poscoma + 1, Len(Listadetablas))
         '   ElseIf poscoma = 0 And Len(Listadetablas) > 0 Then
         '       encab = Mid(Listadetablas, 1, Len(Listadetablas))
         '       Listadetablas = ""
         '   End If
        't = t + 1
        'Wend
   ' Tablas(0, 1) = "Postulantes": Tipo_y_Tablas(0, 2) = "postulantes,hermanos,apoderados,postulaciones"
   ' Tablas(1, 1) = "Alumnos del Colegio": Tipo_y_Tablas(1, 2) = "postulantes,matriculas,obserbaciones,enfermeria"
   ' Tablas(2, 1) = "Apoderados": Tipo_y_Tablas(2, 2) = ""
   ' Tablas(3, 1) = "Notas": Tipo_y_Tablas(3, 2) = ""
   ' Tablas(4, 1) = "Cursos": Tipo_y_Tablas(4, 2) = ""
   ' Tablas(5, 1) = "Asistencia": Tipo_y_Tablas(5, 2) = ""
    
    'Tipoinforme = Array("", "", "Apoderados", "Notas", "Cursos", "Asistencia")
    'tablas
    
    'Texto = Array("Empieza con", "Igual a", "Distinto a")
 'numerico = Array("Mayor a", "Menor a", "Igual a", "Distinto a", "Mayor o igual a", "Menor o igual a")
'horafecha = Array("Mayor a", "Menor a", "Igual a", "Distinto a", "Mayor o igual a", "Menor o igual a")
  'boleano = Array("Igual a", "Distinto a")
    'ltexto = 2
 'lnumerico = 5
'  lboleano = 1
'lhorafecha = 5
'lTipoinforme = 5
'  i = 0
  'establecer el nuevo nombre de inicio de sesión
  DBEngine.IniPath = "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\" & APP_CATEGORY & "\" & APPNAME
  DBEngine.DefaultUser = "admin"
  DBEngine.DefaultPassword = vbNullString

  Cad_Conexion = "ODBC;DSN=gescol;UID=root;PWD=;database=gescol;"
  
  Set EspacioTrabajo = DBEngine.CreateWorkspace("mainws", "admin", "")
  Set dbTemp = EspacioTrabajo.OpenDatabase("", 0, 0, Cad_Conexion)
  
  DBOpened = True
  Set BaseDatos = dbTemp
  BaseDatos.QueryTimeout = glQueryTimeout
    
  'Me.cmb_tablas.Clear
  If BaseDatos Is Nothing Then Exit Sub
  'agregar las tablas
    
  'For Each tabla In BaseDatos.TableDefs
'      Me.cmb_tablas.AddItem tabla.Name
      haytablas = True
  'Next


  'habilitar menús que dependen de que estén presentes las tablas
  If haytablas Then
 '   frmMDI.mnuDBPUNewQuery.Visible = True
  Else
    'no hay tablas disponibles
  End If
'For t = 0 To lTipoinforme
'    Me.cmb_Tipoinforme.AddItem Tipo_y_Tablas(t, 1)
'Next t
Me.grd_descripcion.CellTextStyle = flexTextInset
Me.grd_descripcion.FormatString = "|  ;            |     Título     |     Campo      |    Formato    |    Totales   "
Me.grd_descripcion.FixedRows = 1: Me.grd_descripcion.FixedCols = 0: Me.grd_descripcion.Rows = 5: Me.grd_descripcion.Cols = 1

Me.grd_valores.FormatString = "^                                     Columna 1     |^                                     Columna 2     |^                                     Columna 3     |^                                     Columna 4     |^                                     Columna 5     |^                                     Columna 6     |^                                     Columna 7     |^                                     Columna 8     |^                                     Columna 9     |^                                     Columna 10    "
Me.grd_valores.FixedRows = 1: Me.grd_valores.FixedCols = 0: Me.grd_valores.Rows = 5: Me.grd_valores.Cols = 10

Me.grd_campos.FormatString = "^ Item |Nombre campo       |  Descripción                                 "
Me.grd_campos.FixedRows = 1: Me.grd_campos.FixedCols = 0: Me.grd_campos.Rows = 2: Me.grd_campos.Cols = 2
Set Rs = Nothing
End Sub

Private Sub lst_tablas_Click()

End Sub



Private Sub grd_campos_DblClick()
'Set rs = New ADODB.Recordset
'rs.CursorLocation = adUseClient
Col = Me.grd_campos.Col
Fila = Me.grd_campos.Row
If Col = 2 Then
    camposel = campos(Fila, 1)
    If Me.Opt_tipocampos(1).Value Then
        tablasel = Tablas1(Me.cmb_tip_informe.ListIndex, 1)
    Else
        tablasel = Tablas2(Me.cmb_tablas.ListIndex, 1)
    End If
    tipodelcampo = BaseDatos.TableDefs(tablasel).Fields(camposel).Type
    Me.grd_valores.Text = tablasel & "." & camposel
'    Me.cmb_tablas.Text = ""
    Me.grd_campos.Clear
    Me.grd_campos.FormatString = "               Campo                  |Descripción                                                                          "
    Me.grd_campos.Rows = 2
    Me.Frame_tablas.Visible = False
    Me.grd_valores.Enabled = True
End If
End Sub

Private Sub grd_valores_Click()
Fila = Me.grd_valores.Row
If Fila = 1 Then
    Me.grd_valores.Text = InputBox("Ingrese Título de la Columna")
ElseIf Fila = 2 Then
    Me.grd_valores.Enabled = False
    Me.Frame_tipocampos.Visible = True
    Me.Opt_tipocampos(1).Value = True
End If
End Sub

