Autor Tema: Escribir codigo SQL embebido en VB6  (Leído 9489 veces)

0 Usuarios y 1 Visitante están viendo este tema.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Escribir codigo SQL embebido en VB6
« en: Julio 10, 2014, 03:18:33 pm »
A mas de uno le pasa este fastidio? no es que sea difícil sino que a veces es tedioso y aburrido, por ejemplo un Insert a tabla con 30 campos entre string e integers y luego mezclarlos con: & "', " &... a cuantos les fastidia eso? ¿como lidian con eso?


Me encuentras en YAcosta.com

k_arlytos

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +2/-4
    • Ver Perfil
Re:Escribir codigo SQL embebido en VB6
« Respuesta #1 en: Julio 10, 2014, 04:16:05 pm »
uhmmm.... pero para eso existen los procedimientos almacenados....
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Escribir codigo SQL embebido en VB6
« Respuesta #2 en: Julio 10, 2014, 04:44:29 pm »
Hola Yacosta, hace poco lo habiamos hablado, la mejor manera, pero que tambien me fastidia  >: ( ;D, es usar un ADO Command.

Con el ADO COMMAND, declaras cada parametro que vas a pasar a un procedimiento, le decis el nombre del procedimiento, le das ejecutar y LISTO, el se encarga de ejecutarlo.

Lo que me molesta mucho, es que cada parametro que agregas/declaras le tenes que decir de que tipo es: varchar (50) smallint, int, etc

Tiene su ventaja, como él sabe lo que le pasas a cada parametro, en un parametro de tipo string (varchar) podes pasar una cadena con comillas, comas, punto coma, etc, sin que de error la instruccion SQL

Aca encontre el articulo, y un ej que yo habia puesto:
http://leandroascierto.com/foro/index.php?topic=2548.msg13832#msg13832


Y en el mismo articulo Raul comenta que se puede usar sin procedimientos almacenados, a mi con SQL server no me funcionó
http://leandroascierto.com/foro/index.php?topic=2548.msg13836#msg13836

Luffy

  • Kilobyte
  • **
  • Mensajes: 90
  • Reputación: +4/-2
  • Desarrollar es el arte de crecer no de crear.
    • Ver Perfil
Re:Escribir codigo SQL embebido en VB6
« Respuesta #3 en: Julio 10, 2014, 04:53:28 pm »
Yo creo una clase para manejar los datos, que me valla estructurando la consulta SQL dependiendo de que tipo de consulta estes utilizando o creando.

Yo trabajo con .Net y MySQL por lo tanto pondre mi código y ustedes lo adaptan

La Clase se llama iData

Código: (vb) [Seleccionar]
Imports System.Text
Imports MySql.Data.MySqlClient

Public Class iData
    Private Conexion As New MySqlConnection
    Private Comando As New MySqlCommand
    Private Tabla As MySqlDataReader

    Private Usuario As String = String.Empty
    Private Contraseña As String = String.Empty

    Public Sub New(ByVal Usuario As String, ByVal Contraseña As String)
        Me.Usuario = Usuario
        Me.Contraseña = Contraseña
    End Sub

    Private Sub Conectar()
        Try
            If Conexion.State = ConnectionState.Closed Then
                Dim SQL As New StringBuilder
                SQL.Append("Server=186.151.203.83;Port=1986;Database=tracer;Uid=")
                SQL.Append(Usuario)
                SQL.Append(";Pwd=")
                SQL.Append(Contraseña)
                SQL.Append(";")

                Conexion.ConnectionString = SQL.ToString
                Conexion.Open()
            End If
        Catch ex As Exception
            Debug.Print("--------------Error de Conectar en DataLink --------------")
            Debug.Print(ex.Message)
        End Try
    End Sub

    Private Sub Desconectar()
        Try
            Conexion.Close()
            Conexion.Dispose()
        Catch ex As Exception
            Debug.Print("--------------Error de Desconectar en DataLink --------------")
            Debug.Print(ex.Message)
        End Try
    End Sub

    Public Function TestConexion() As Boolean
        Conectar()
        Return Conexion.State
        Desconectar()
    End Function

    Public Sub Agregar(ByVal Tabla As String, ByVal Campos As String, ByVal Valores As String)
        Try

            Conectar()

            Dim SQL As New StringBuilder

            SQL.Append("INSERT INTO ")
            SQL.Append(Tabla)
            SQL.Append(" (")
            SQL.Append(Campos)
            SQL.Append(") Values (")
            SQL.Append(Estructura(Valores))
            SQL.Append(")")

            Debug.Print("Sentencia: " & SQL.ToString)

            Comando.Connection = Conexion
            Comando.CommandType = CommandType.Text
            Comando.CommandText = SQL.ToString
            Comando.ExecuteNonQuery()

            Desconectar()
        Catch ex As Exception
            Debug.Print("--------------Error de Agregar en DataLink --------------")
            Debug.Print(ex.Message)
        End Try
    End Sub

    Public Sub UpgradeFoto(ByVal Tabla As String, ByVal Id As Integer, ByVal Campo As String, ByVal Foto As Image)
        Try

            Conectar()

            Dim SQL As New StringBuilder

            SQL.Append("UPDATE ")
            SQL.Append(Tabla)
            SQL.Append(" SET ")
            SQL.Append(Campo)
            SQL.Append(" = ?")
            SQL.Append(Campo)
            SQL.Append(" WHERE ID =")
            SQL.Append(Id)


            Comando.Connection = Conexion
            Comando.CommandType = CommandType.Text
            Comando.CommandText = SQL.ToString
            Comando.Parameters.AddWithValue("?" & Campo, ObtenerBytes(Foto))
            Comando.ExecuteNonQuery()

            Desconectar()
        Catch ex As Exception
            Debug.Print("--------------Error de UpgradeFoto en DataLink --------------")
            Debug.Print(ex.Message)
        End Try
    End Sub

    Public Sub Actualizar(ByVal Tabla As String, ByVal Id As Integer, ByVal Campos As String, ByVal Valores As String)
        Try

            Conectar()

            Dim SQL As New StringBuilder

            Dim vCampos As String() = Split(Campos, ",")
            Dim vValores As String() = Split(Estructura(Valores), ",")

            SQL.Append("UPDATE ")
            SQL.Append(Tabla)
            SQL.Append(" SET ")
            For n As Integer = 0 To vCampos.Count - 1
                SQL.Append(vCampos(n))
                SQL.Append("=")
                SQL.Append(vValores(n))

                If n < vCampos.Count - 1 Then
                    SQL.Append(",")
                End If
            Next
            SQL.Append(" WHERE ID = ")
            SQL.Append(Id)

            Debug.Print(SQL.ToString)

            Comando.Connection = Conexion
            Comando.CommandType = CommandType.Text
            Comando.CommandText = SQL.ToString
            Comando.ExecuteNonQuery()

            Desconectar()
        Catch ex As Exception
            Debug.Print("--------------Error de Actualizar en DataLink --------------")
            Debug.Print(ex.Message)
        End Try
    End Sub

    Public Sub Eliminar(ByVal Tabla As String, ByVal Campo As String, ByVal Valor As String)
        Try

            Conectar()

            Dim SQL As New StringBuilder

            SQL.Append("DELETE FROM ")
            SQL.Append(Tabla)
            SQL.Append(" WHERE ")
            SQL.Append(Campo & " = ")
            SQL.Append(Estructura(Valor))

            Comando.Connection = Conexion
            Comando.CommandType = CommandType.Text
            Comando.CommandText = SQL.ToString
            Comando.ExecuteNonQuery()

            Desconectar()

        Catch ex As Exception
            Debug.Print("--------------Error de Eliminar en DataLink --------------")
            Debug.Print(ex.Message)
        End Try
    End Sub

    Enum OpcionesBusqueda
        UNO
        VARIOS
    End Enum

    Enum TiposBusqueda
        IGUAL
        DIFERENTE
        CONTENGA
        ENTRE
    End Enum

    Public Function Matris(ByVal Opciones As OpcionesBusqueda, ByVal Tipo As TiposBusqueda, ByVal Tabla As String, ByVal Campo As String, ByVal Valor As String) As DataTable

        Conectar()

        Dim SQL As New StringBuilder

        SQL.Append("SELECT * FROM ")
        SQL.Append(Tabla)
        SQL.Append(" WHERE ")
        Select Case Opciones
            Case OpcionesBusqueda.UNO
                SQL.Append(Campo)
                Select Case Tipo
                    Case TiposBusqueda.IGUAL
                        SQL.Append("=")
                        SQL.Append(Estructura(Valor))
                    Case TiposBusqueda.DIFERENTE
                        SQL.Append("<>")
                        SQL.Append(Estructura(Valor))
                    Case TiposBusqueda.ENTRE
                        SQL.Append(" BETWEEN ")
                        Dim Variables() As String = Split(Valor, ",")
                        SQL.Append(Estructura(Variables(0).ToString))
                        SQL.Append(" AND ")
                        SQL.Append(Estructura(Variables(1).ToString))
                    Case TiposBusqueda.CONTENGA
                        SQL.Append(" LIKE ")
                        SQL.Append(Estructura("%" & Valor & "%"))
                End Select
            Case OpcionesBusqueda.VARIOS
                Dim vCampos As String() = Split(Campo, ",")
                Dim vValores As String() = Split(Valor, ",")

                For n As Integer = 0 To vCampos.Count - 1
                    SQL.Append(vCampos(n))
                    Select Case Tipo
                        Case TiposBusqueda.IGUAL
                            SQL.Append("=")
                            SQL.Append(Estructura(vValores(n)))
                        Case TiposBusqueda.DIFERENTE
                            SQL.Append("<>")
                            SQL.Append(Estructura(vValores(n)))
                        Case TiposBusqueda.ENTRE
                            SQL.Append(" BETWEEN ")
                            Dim Variables() As String = Split(vValores(n), "|")
                            SQL.Append(Estructura(Variables(0)))
                            SQL.Append(" AND ")
                            SQL.Append(Estructura(Variables(1)))
                        Case TiposBusqueda.CONTENGA
                            SQL.Append("LIKE %")
                            SQL.Append(Estructura(vValores(n)))
                            SQL.Append("%")
                    End Select

                    If n < vCampos.Count - 1 Then
                        SQL.Append(" AND ")
                    End If
                Next

        End Select

        Comando.Connection = Conexion
        Comando.CommandType = CommandType.Text

        Debug.Print("Consulta : " & SQL.ToString)

        Comando.CommandText = SQL.ToString

        Dim NuevaTabla As New DataTable
        NuevaTabla.Load(Comando.ExecuteReader())

        Return NuevaTabla

        Desconectar()

    End Function

End Class

Va acompañada de un módulo con algunas funciones

Código: (vb) [Seleccionar]
Imports System.Drawing
Imports System.Text

Module Funciones

    Public Function ObtenerBytes(ByVal img As Bitmap) As Byte()
        Dim ms As New System.IO.MemoryStream
        img.Save(ms, Imaging.ImageFormat.Bmp)
        Dim outBytes(CInt(ms.Length - 1)) As Byte
        ms.Seek(0, System.IO.SeekOrigin.Begin)
        ms.Read(outBytes, 0, CInt(ms.Length))
        Return outBytes
    End Function

    Public Function ObtenerImagen(ByVal bytes As Byte()) As Bitmap
        Return CType(Bitmap.FromStream(New IO.MemoryStream(bytes)), Bitmap)
    End Function


    Public Function DeFecha(ByVal Fecha As String) As String
        Dim Respuesta As String = String.Empty

        Dim vFecha As Date = Fecha

        Respuesta = Year(vFecha) & "/" & Month(vFecha) & "/" & DateAndTime.Day(vFecha)

        Return Respuesta
    End Function

    Public Function NumResc(ByVal Numero As String) As Double
        Dim Respuesta As Double = 0
        Try
            Respuesta = Val(Replace(Numero, ",", ""))
        Catch ex As Exception
            Respuesta = 0
        End Try
        Return Respuesta
    End Function

    Public Function Estructura(ByVal Valores As String) As String
        On Error Resume Next

        Dim Respuesta As New StringBuilder

        Dim vDatos() As String = Split(Valores, ",")

        For n As Integer = 0 To vDatos.Count - 1
            If IsDate(vDatos(n)) Then
                Respuesta.Append("'")
                Respuesta.Append(DeFecha(vDatos(n).ToString))
                Respuesta.Append("'")
            Else
                If IsNumeric(Valores(n)) Then
                    Respuesta.Append(vDatos(n))
                Else
                    Respuesta.Append("'")
                    Respuesta.Append(Trim(vDatos(n)))
                    Respuesta.Append("'")
                End If
            End If
            If n < vDatos.Count - 1 Then
                Respuesta.Append(",")
            End If
        Next

        Return Respuesta.ToString
    End Function

End Module




Luffy

  • Kilobyte
  • **
  • Mensajes: 90
  • Reputación: +4/-2
  • Desarrollar es el arte de crecer no de crear.
    • Ver Perfil
Re:Escribir codigo SQL embebido en VB6
« Respuesta #4 en: Julio 10, 2014, 04:54:31 pm »
No se por que no me dejo publicar si me paso de 20000 caracteres, arreglen eso

Cuando lo trabajes tienes que declarar una nueva instancia de la clase en tu formulario algo así (Este es un formulario de incripción del empleado)

Código: (vb) [Seleccionar]
Imports System.Text

Public Class FrmEmpleados

    Dim DataBase As New iData(Usuario, Contraseña)


    Private Sub Limpiar()
        lblNombre.Text = ""
        txtCUI.Text = ""
        txtNombres.Text = ""
        txtApellidos.Text = ""
        txtFechaNacimiento.Value = Now
        txtEdad.Text = ""
        txtIGSS.Text = ""
        txtDPI.Text = ""
        txtDPIDepto.Text = ""
        txtDPIMuni.Text = ""
        txtNIT.Text = ""
        txtIRTRA.Text = ""
        txtEstadoCivil.Text = ""
        txtCantHijos.Text = ""
        txtDireccion.Text = ""
        txtDireccionDepto.Text = ""
        txtDireccionMuni.Text = ""
        txtLugarNacimiento.Text = ""
        rbEscolar01.Checked = False
        rbEscolar02.Checked = False
        rbEscolar03.Checked = False
        rbEscolar04.Checked = False
        txtUltimoGrado.Text = ""
        txtProfesion.Text = ""
        picFoto.Image = picFoto.ErrorImage

        ListView1.Items.Clear()
        ListView2.Items.Clear()
        ListView3.Items.Clear()

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Try
            If ListView1.SelectedItems(0).Tag <> "" Then
                DataBase.Eliminar("Empleados_Agenda", "Id", ListView1.SelectedItems(0).Tag)
                CargarAgenda()
            Else
                ListView1.SelectedItems(0).Remove()
            End If
        Catch ex As Exception

        End Try
    End Sub

    Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
        FrmEmpleadoFamiliares.ShowDialog()
    End Sub

    Private Sub Eliminar()

        If txtCUI.Text <> "" Then
            Dim Respuesta

            Respuesta = MessageBox.Show("Realmente desea Eliminar el Registro?", "Centro de Seguridad", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)

            If Respuesta = vbOK Then
                DataBase.Eliminar("Empleados_Agenda", "CUI", Val(txtCUI.Text))
                DataBase.Eliminar("Empleados_Familiares", "CUI", Val(txtCUI.Text))
                DataBase.Eliminar("Empleados", "Id", Val(txtCUI.Text))

                MessageBox.Show("Registro Eliminado.", "Centro de Seguridad", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Limpiar()

            Else
                Limpiar()
            End If
        End If
    End Sub

    Private Sub Guardar()

        Dim Tabla As New StringBuilder

        Tabla.Append("Empleados")

        Dim Campos As New StringBuilder

        Campos.Append("Nombres").Append(",")
        Campos.Append("Apellidos").Append(",")
        Campos.Append("Nombre").Append(",")
        Campos.Append("Sexo").Append(",")
        Campos.Append("Fecha_Nacimiento").Append(",")
        Campos.Append("Edad").Append(",")
        Campos.Append("NoAfiliacionIGSS").Append(",")
        Campos.Append("DPI").Append(",")
        Campos.Append("DPI_Depto").Append(",")
        Campos.Append("DPI_Muni").Append(",")
        Campos.Append("Nit").Append(",")
        Campos.Append("Irtra").Append(",")
        Campos.Append("Estado_Civil").Append(",")
        Campos.Append("Cant_Hijos").Append(",")
        Campos.Append("Direccion").Append(",")
        Campos.Append("Direccion_Depto").Append(",")
        Campos.Append("Direccion_Muni").Append(",")
        Campos.Append("Lugar_Nac").Append(",")
        Campos.Append("Escolaridad").Append(",")
        Campos.Append("Escolaridad_Ultimo_Grado").Append(",")
        Campos.Append("Profesion")

        Dim Valores As New StringBuilder

        Valores.Append(txtNombres.Text).Append(",")
        Valores.Append(txtApellidos.Text).Append(",")
        Valores.Append(txtNombres.Text & " " & txtApellidos.Text).Append(",")
        Valores.Append(txtSexo.Text).Append(",")
        Valores.Append(FormatDateTime(txtFechaNacimiento.Value, DateFormat.ShortDate)).Append(",")
        Valores.Append(txtEdad.Text).Append(",")
        Valores.Append(txtIGSS.Text).Append(",")
        Valores.Append(txtDPI.Text).Append(",")
        Valores.Append(txtDPIDepto.Text).Append(",")
        Valores.Append(txtDPIMuni.Text).Append(",")
        Valores.Append(txtNIT.Text).Append(",")
        Valores.Append(txtIRTRA.Text).Append(",")
        Valores.Append(txtEstadoCivil.Text).Append(",")
        Valores.Append(txtCantHijos.Text).Append(",")
        Valores.Append(txtDireccion.Text).Append(",")
        Valores.Append(txtDireccionDepto.Text).Append(",")
        Valores.Append(txtDireccionMuni.Text).Append(",")
        Valores.Append(txtLugarNacimiento.Text).Append(",")
        Valores.Append(Escolaridad("", TipoEscolaridad.Tabla)).Append(",")
        Valores.Append(txtUltimoGrado.Text).Append(",")
        Valores.Append(txtProfesion.Text)

        If txtCUI.Text = "" Then
            DataBase.Agregar(Tabla.ToString, Campos.ToString, Valores.ToString)

            Dim Dato As New DataTable

            Dato = DataBase.Matris(iData.OpcionesBusqueda.UNO, iData.TiposBusqueda.IGUAL, "Empleados", "DPI", txtDPI.Text)

            If (Dato.Rows.Count) > 0 Then
                txtCUI.Text = Dato.Rows(0).Item("Id").ToString
            Else

            End If

            DataBase.UpgradeFoto("Empleados", Val(txtCUI.Text), "Foto", picFoto.Image)

            GuardarAgenda()

            GuardarFamiliares()

        ElseIf txtCUI.Text <> "" Then
            DataBase.Actualizar(Tabla.ToString, Val(txtCUI.Text), Campos.ToString, Valores.ToString)

            DataBase.UpgradeFoto("Empleados", Val(txtCUI.Text), "Foto", picFoto.Image)

            GuardarAgenda()

            GuardarFamiliares()


        End If

    End Sub

    Private Sub GuardarAgenda()
        If ListView1.Items.Count > 0 Then
            For vAgenda As Integer = 0 To ListView1.Items.Count - 1
                If ListView1.Items(vAgenda).Tag = "" Then
                    Dim ValoresAgenda As New StringBuilder
                    ValoresAgenda.Append(txtCUI.Text).Append(",")
                    ValoresAgenda.Append(ListView1.Items(vAgenda).Text).Append(",")
                    ValoresAgenda.Append(ListView1.Items(vAgenda).SubItems(1).Text)
                    DataBase.Agregar("Empleados_Agenda", "CUI,Tipo,Telefono", ValoresAgenda.ToString)
                End If
            Next
        End If
    End Sub

    Private Sub GuardarFamiliares()
        If ListView2.Items.Count > 0 Then
            For vFamiliares As Integer = 0 To ListView2.Items.Count - 1
                If ListView2.Items(vFamiliares).Tag = "" Then
                    Dim ValoresAgenda As New StringBuilder
                    ValoresAgenda.Append(txtCUI.Text).Append(",")
                    ValoresAgenda.Append(ListView2.Items(vFamiliares).Text).Append(",")
                    ValoresAgenda.Append(ListView2.Items(vFamiliares).SubItems(1).Text)
                    DataBase.Agregar("Empleados_Familiares", "CUI,Nombre,Parentesco", ValoresAgenda.ToString)
                End If
            Next
        End If
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Guardar()
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        Limpiar()
    End Sub

    Private Sub FrmEmpleados_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Limpiar()
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Limpiar()
        txtNombres.Focus()
    End Sub

    Private Sub txtFechaNacimiento_ValueChanged(sender As Object, e As EventArgs) Handles txtFechaNacimiento.ValueChanged
        txtEdad.Text = Int(DateDiff(DateInterval.Year, txtFechaNacimiento.Value, Now))
    End Sub

    Private Sub txtApellidos_TextChanged(sender As Object, e As EventArgs) Handles txtApellidos.TextChanged
        lblNombre.Text = txtNombres.Text & " " & txtApellidos.Text
    End Sub

    Private Sub txtCUI_KeyUp(sender As Object, e As KeyEventArgs) Handles txtCUI.KeyUp
        If txtNombres.Text = "" And txtApellidos.Text = "" And txtDPI.Text = "" And e.KeyCode = Keys.Enter Then
            Cargar(Val(txtCUI.Text))
        End If
    End Sub

    Friend Sub Cargar(ByVal Id As Integer)
        On Error Resume Next

        Dim Empleado As New DataTable
        Empleado = DataBase.Matris(iData.OpcionesBusqueda.UNO, iData.TiposBusqueda.IGUAL, "Empleados", "Id", txtCUI.Text)

        txtNombres.Text = Empleado.Rows(0).Item("Nombres").ToString
        txtApellidos.Text = Empleado.Rows(0).Item("Apellidos").ToString
        txtSexo.Text = Empleado.Rows(0).Item("Sexo").ToString
        txtFechaNacimiento.Text = Empleado.Rows(0).Item("Fecha_Nacimiento").ToString
        txtEdad.Text = Empleado.Rows(0).Item("Edad").ToString
        txtIGSS.Text = Empleado.Rows(0).Item("NoAfiliacionIGSS").ToString
        txtDPI.Text = Empleado.Rows(0).Item("DPI").ToString
        txtDPIDepto.Text = Empleado.Rows(0).Item("DPI_Depto").ToString
        txtDPIMuni.Text = Empleado.Rows(0).Item("DPI_Muni").ToString
        txtNIT.Text = Empleado.Rows(0).Item("Nit").ToString
        txtIRTRA.Text = Empleado.Rows(0).Item("Irtra").ToString
        txtEstadoCivil.Text = Empleado.Rows(0).Item("Estado_Civil").ToString
        txtCantHijos.Text = Empleado.Rows(0).Item("Cant_Hijos").ToString
        txtDireccion.Text = Empleado.Rows(0).Item("Direccion").ToString
        txtDireccionDepto.Text = Empleado.Rows(0).Item("Direccion_Depto").ToString
        txtDireccionMuni.Text = Empleado.Rows(0).Item("Direccion_Muni").ToString
        picFoto.Image = ObtenerImagen(Empleado.Rows(0).Item("Foto"))
        txtLugarNacimiento.Text = Empleado.Rows(0).Item("Lugar_Nac").ToString
        Escolaridad(Empleado.Rows(0).Item("Escolaridad").ToString, TipoEscolaridad.Formulario)
        txtUltimoGrado.Text = Empleado.Rows(0).Item("Escolaridad_Ultimo_Grado").ToString
        txtProfesion.Text = Empleado.Rows(0).Item("Profesion").ToString

        CargarAgenda()

        CargarFamiliares()

    End Sub

    Private Sub CargarAgenda()
        Dim Agenda As New DataTable
        Agenda = DataBase.Matris(iData.OpcionesBusqueda.UNO, iData.TiposBusqueda.IGUAL, "Empleados_Agenda", "CUI", txtCUI.Text)

        ListView1.Items.Clear()

        For n As Integer = 0 To Agenda.Rows.Count - 1
            Dim Lv As New ListViewItem(Agenda.Rows(n).Item("Tipo").ToString)
            Lv.Tag = Agenda.Rows(n).Item("Id").ToString
            Lv.SubItems.Add(Agenda.Rows(n).Item("Telefono").ToString)
            ListView1.Items.Add(Lv)
        Next
    End Sub

    Private Sub CargarFamiliares()
        Dim Familiares As New DataTable
        Familiares = DataBase.Matris(iData.OpcionesBusqueda.UNO, iData.TiposBusqueda.IGUAL, "Empleados_Familiares", "CUI", txtCUI.Text)

        ListView2.Items.Clear()

        For n As Integer = 0 To Familiares.Rows.Count - 1
            Dim Lv As New ListViewItem(Familiares.Rows(n).Item("Nombre").ToString)
            Lv.Tag = Familiares.Rows(n).Item("Id").ToString
            Lv.SubItems.Add(Familiares.Rows(n).Item("Parentesco").ToString)
            ListView2.Items.Add(Lv)
        Next

    End Sub

    Enum TipoEscolaridad
        Formulario
        Tabla
    End Enum

    Private Function Escolaridad(ByVal Item As String, ByVal Tipo As TipoEscolaridad)
        Dim Respuesta As String = String.Empty
        Select Case Tipo
            Case TipoEscolaridad.Tabla
                If rbEscolar01.Checked Then Respuesta = rbEscolar01.Text
                If rbEscolar02.Checked Then Respuesta = rbEscolar02.Text
                If rbEscolar03.Checked Then Respuesta = rbEscolar03.Text
                If rbEscolar04.Checked Then Respuesta = rbEscolar04.Text
            Case TipoEscolaridad.Formulario
                If Item = "PRIMARIA" Then rbEscolar01.Checked = True
                If Item = "BÁSICO" Then rbEscolar02.Checked = True
                If Item = "DIVERSIFICADO" Then rbEscolar03.Checked = True
                If Item = "UNIVERSIDAD" Then rbEscolar04.Checked = True
        End Select
        Return Respuesta
    End Function

    Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
        If txtCUI.Text <> "" Then
            FrmEmpleadosAgenda.Dispose()
            FrmEmpleadosAgenda.ShowDialog()
        ElseIf txtCUI.Text <> "" Then

        End If
    End Sub

    Private Sub txtCUI_TextChanged(sender As Object, e As EventArgs) Handles txtCUI.TextChanged
        If txtCUI.Text = "" Then
            Limpiar()
        End If
    End Sub

    Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
        Try
            If ListView2.SelectedItems(0).Tag <> "" Then
                DataBase.Eliminar("Empleados_familiares", "Id", ListView1.SelectedItems(0).Tag)
                CargarFamiliares()
            Else
                ListView2.SelectedItems(0).Remove()
            End If
        Catch ex As Exception

        End Try
    End Sub

    Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click
        picFoto.Image = picFoto.ErrorImage
    End Sub

    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        FrmEmpleadosBuscar.Dispose()
        FrmEmpleadosBuscar.ShowDialog()
    End Sub

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        Eliminar()
    End Sub

    Private Sub Button13_Click(sender As Object, e As EventArgs) Handles Button13.Click
        Try
            OFD1.ShowDialog()

            Dim SourceToImage As Bitmap

            Dim FileName As String

            FileName = OFD1.FileName

            'Generar un bitmap para el origen
            Dim SourceImage As Bitmap
            SourceImage = New Bitmap(FileName)

            ' Generar un bitmap para el resultado
            SourceToImage = New Bitmap(SourceImage.Width, SourceImage.Height)

            ' Generar un objeto Gráfico para el Bitmap resultante
            Dim gr_source As Graphics = Graphics.FromImage(SourceToImage)

            ' Copiar la imagen origen al Bitmap destino
            gr_source.DrawImage(SourceImage, 0, 0, _
                SourceToImage.Width, _
                SourceToImage.Height)

            'Liberar recursos
            gr_source.Dispose()
            SourceImage.Dispose()

            Dim NeedsHorizontalCrop As Boolean = True
            Dim NeedsVerticalCrop As Boolean = False

            'Determina si la imagen es Landscape o Portrait
            If SourceToImage.Height > SourceToImage.Width Then
                NeedsHorizontalCrop = False
                NeedsVerticalCrop = True
            End If

            'Determina si la imagen excede el ancho del PictureBox
            If SourceToImage.Width < 200 Then
                NeedsHorizontalCrop = False
                If SourceToImage.Height > 150 Then
                    NeedsVerticalCrop = True
                End If
            End If

            'Calcula el Factor de Ajuste
            Dim scale_factor As Single = 1
            If SourceToImage.Width > 0 Then
                If NeedsHorizontalCrop = True Then
                    ' Obtiene el Factor de Ajuste
                    scale_factor = 200 / SourceToImage.Width
                End If
            End If

            If SourceToImage.Height > 0 Then
                If NeedsVerticalCrop = True Then
                    ' Obtiene el Factor de Ajuste
                    scale_factor = 150 / SourceToImage.Height
                End If
            End If

            ' Generar un bitmap tmp para el resultado. Ajuste Proporcional
            Dim DestTmpImage As New Bitmap( _
                CInt(SourceToImage.Width * scale_factor), _
                CInt(SourceToImage.Height * scale_factor))

            ' Generar un objeto Gráfico para el bitmap tmp resultante
            Dim gr_desttmp As Graphics = Graphics.FromImage(DestTmpImage)

            ' Copiar la imagen origen al bitmap tmp destino
            gr_desttmp.DrawImage(SourceToImage, 0, 0, _
                DestTmpImage.Width, _
                DestTmpImage.Height)

            'Comprime y Guarda un Archivo Temporal para calcular su peso en Kb
            Try
                ImageManipulation.SaveJPGWithCompressionSetting(DestTmpImage, Application.StartupPath & "\" & "temp.jpg", 100)
            Catch exc As Exception
                MessageBox.Show(exc, " Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try

            Dim DestImage As Bitmap
            DestImage = New Bitmap(Application.StartupPath & "\" & "temp.jpg")

            ' Generar un bitmap para el resultado
            Dim DestToImage As New Bitmap(DestImage.Width, DestImage.Height)

            ' Generar un objeto Grafico para el bitmap resultante
            Dim gr_dest As Graphics = Graphics.FromImage(DestToImage)

            ' Copiar la imagen origen al bitmap destino
            gr_dest.DrawImage(DestImage, 0, 0, _
                DestToImage.Width, _
                DestToImage.Height)

            'Muestra imagen comprimida
            picFoto.Image = CType(DestToImage, Image)

        Catch ex As Exception
            picFoto.Image = picFoto.ErrorImage
        End Try
    End Sub
End Class

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Escribir codigo SQL embebido en VB6
« Respuesta #5 en: Julio 10, 2014, 05:11:35 pm »
uhmmm.... pero para eso existen los procedimientos almacenados....

No pes... no me refiero a eso
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Escribir codigo SQL embebido en VB6
« Respuesta #6 en: Julio 10, 2014, 05:27:59 pm »
MMm, creo que no me he explicado bien a que me refiero. Muchas consultas sql que no las necesito en procedimientos almacenados las tengo en un modulo aparte que las invoco como función. La tipica es escribir algo similar a esto:

sql = "Select * From MiTabla"
rs.Open sql, cnn, 1, 1

Pero yo no uso variable sql, siempre uso funciones para reutilizar esos mismos querys en otras partes del proyecto. Sin embargo a veces me topo con proyectos que me dan este query (ejemplo de un insert):


Y lo invoco así:



Pero en todo caso al parecer es una forma muy particular de trabajar asi que creo que la propuesta que quería hacer no tendrá asidero, igual estoy haciendo un programita que me ahorre este "formateo", me va quedando asi:



Recién me anime a hacerlo porque tendré que armar muchísimos querys de un tirón para un proyecto en Access (por eso no corre el SP, ni tampoco me interesan las "Consultas" o no se como se llame que trae el Access), con esto solo pondré  la tabla, los campos y su tipo de datos y el código que me arroje lo copiare en mi código de trabajo, aun lo estoy construyendo y de alli lo paso a personalizar porque creo que estoy al borde del plato  :-)

Saludos
Me encuentras en YAcosta.com

Luffy

  • Kilobyte
  • **
  • Mensajes: 90
  • Reputación: +4/-2
  • Desarrollar es el arte de crecer no de crear.
    • Ver Perfil
Re:Escribir codigo SQL embebido en VB6
« Respuesta #7 en: Julio 10, 2014, 05:38:05 pm »
Me Parece bien que estés haciendo algo así, pero creo que te estás complicando la vida, la idea no es escribir lo menos posible, si las sentencias SQL ya están definidas lo unico que tienes que hacer son plantillas para remplazar los campos y los valores, el problema es que los valores depende de que tipo de campo es pero existen tres grandes valores para todos esos campos

Texto que lleva '' para que pueda agregarse
Número (Llamese número a todo número) que no lleva '' para poder agregarse
Fechas que depende de tu servidor de base de datos en access lleva ## y en mysql '' pero la fecha va en otro formato
Bytes que son Bytes no necesito explicar esto

entonces solo pasa un formating para los tres primeros

Yo llame a esta función Estructura:

Código: ( vb) [Seleccionar]
    Public Function Estructura(ByVal Valores As String) As String
        On Error Resume Next

        Dim Respuesta As New StringBuilder

        Dim vDatos() As String = Split(Valores, ",")

        For n As Integer = 0 To vDatos.Count - 1
            If IsDate(vDatos(n)) Then
                Respuesta.Append("'")
                Respuesta.Append(DeFecha(vDatos(n).ToString))
                Respuesta.Append("'")
            Else
                If IsNumeric(Valores(n)) Then
                    Respuesta.Append(vDatos(n))
                Else
                    Respuesta.Append("'")
                    Respuesta.Append(Trim(vDatos(n)))
                    Respuesta.Append("'")
                End If
            End If
            If n < vDatos.Count - 1 Then
                Respuesta.Append(",")
            End If
        Next

        Return Respuesta.ToString
    End Function


Sirve para 3 de los 4 campos y con la clase que te pase solamente tienes que agregar los campos por que de todos modos los vas a escribir en el código de programación, ahora si no quieres hacer esto utiliza el metodo enlazado a datos

Código: ( vb) [Seleccionar]

'Agregar

        Dim Tabla As New StringBuilder

        Tabla.Append("Empleados")

        Dim Campos As New StringBuilder

        Campos.Append("Nombres").Append(",")
        Campos.Append("Apellidos").Append(",")
        Campos.Append("Nombre").Append(",")
        Campos.Append("Sexo").Append(",")
        Campos.Append("Fecha_Nacimiento").Append(",")
        Campos.Append("Edad").Append(",")
        Campos.Append("NoAfiliacionIGSS").Append(",")
        Campos.Append("DPI").Append(",")
        Campos.Append("DPI_Depto").Append(",")
        Campos.Append("DPI_Muni").Append(",")
        Campos.Append("Nit").Append(",")
        Campos.Append("Irtra").Append(",")
        Campos.Append("Estado_Civil").Append(",")
        Campos.Append("Cant_Hijos").Append(",")
        Campos.Append("Direccion").Append(",")
        Campos.Append("Direccion_Depto").Append(",")
        Campos.Append("Direccion_Muni").Append(",")
        Campos.Append("Lugar_Nac").Append(",")
        Campos.Append("Escolaridad").Append(",")
        Campos.Append("Escolaridad_Ultimo_Grado").Append(",")
        Campos.Append("Profesion")

        Dim Valores As New StringBuilder

        Valores.Append(txtNombres.Text).Append(",")
        Valores.Append(txtApellidos.Text).Append(",")
        Valores.Append(txtNombres.Text & " " & txtApellidos.Text).Append(",")
        Valores.Append(txtSexo.Text).Append(",")
        Valores.Append(FormatDateTime(txtFechaNacimiento.Value, DateFormat.ShortDate)).Append(",")
        Valores.Append(txtEdad.Text).Append(",")
        Valores.Append(txtIGSS.Text).Append(",")
        Valores.Append(txtDPI.Text).Append(",")
        Valores.Append(txtDPIDepto.Text).Append(",")
        Valores.Append(txtDPIMuni.Text).Append(",")
        Valores.Append(txtNIT.Text).Append(",")
        Valores.Append(txtIRTRA.Text).Append(",")
        Valores.Append(txtEstadoCivil.Text).Append(",")
        Valores.Append(txtCantHijos.Text).Append(",")
        Valores.Append(txtDireccion.Text).Append(",")
        Valores.Append(txtDireccionDepto.Text).Append(",")
        Valores.Append(txtDireccionMuni.Text).Append(",")
        Valores.Append(txtLugarNacimiento.Text).Append(",")
        Valores.Append(Escolaridad("", TipoEscolaridad.Tabla)).Append(",")
        Valores.Append(txtUltimoGrado.Text).Append(",")
        Valores.Append(txtProfesion.Text)

        If txtCUI.Text = "" Then
            DataBase.Agregar(Tabla.ToString, Campos.ToString, Valores.ToString)

            Dim Dato As New DataTable

            Dato = DataBase.Matris(iData.OpcionesBusqueda.UNO, iData.TiposBusqueda.IGUAL, "Empleados", "DPI", txtDPI.Text)

            If (Dato.Rows.Count) > 0 Then
                txtCUI.Text = Dato.Rows(0).Item("Id").ToString
            Else

            End If

            DataBase.UpgradeFoto("Empleados", Val(txtCUI.Text), "Foto", picFoto.Image)

            GuardarAgenda()

            GuardarFamiliares()

        ElseIf txtCUI.Text <> "" Then
            DataBase.Actualizar(Tabla.ToString, Val(txtCUI.Text), Campos.ToString, Valores.ToString)

            DataBase.UpgradeFoto("Empleados", Val(txtCUI.Text), "Foto", picFoto.Image)

            GuardarAgenda()

            GuardarFamiliares()


        End If

'Eliminar

                DataBase.Eliminar("Empleados_Agenda", "CUI", Val(txtCUI.Text))

'Consultar y recuperar datos
        Dim Empleado As New DataTable
        Empleado = DataBase.Matris(iData.OpcionesBusqueda.UNO, iData.TiposBusqueda.IGUAL, "Empleados", "Id", txtCUI.Text)

        txtNombres.Text = Empleado.Rows(0).Item("Nombres").ToString
        txtApellidos.Text = Empleado.Rows(0).Item("Apellidos").ToString
        txtSexo.Text = Empleado.Rows(0).Item("Sexo").ToString
        txtFechaNacimiento.Text = Empleado.Rows(0).Item("Fecha_Nacimiento").ToString
        txtEdad.Text = Empleado.Rows(0).Item("Edad").ToString
        txtIGSS.Text = Empleado.Rows(0).Item("NoAfiliacionIGSS").ToString
        txtDPI.Text = Empleado.Rows(0).Item("DPI").ToString
        txtDPIDepto.Text = Empleado.Rows(0).Item("DPI_Depto").ToString
        txtDPIMuni.Text = Empleado.Rows(0).Item("DPI_Muni").ToString
        txtNIT.Text = Empleado.Rows(0).Item("Nit").ToString
        txtIRTRA.Text = Empleado.Rows(0).Item("Irtra").ToString
        txtEstadoCivil.Text = Empleado.Rows(0).Item("Estado_Civil").ToString
        txtCantHijos.Text = Empleado.Rows(0).Item("Cant_Hijos").ToString
        txtDireccion.Text = Empleado.Rows(0).Item("Direccion").ToString
        txtDireccionDepto.Text = Empleado.Rows(0).Item("Direccion_Depto").ToString
        txtDireccionMuni.Text = Empleado.Rows(0).Item("Direccion_Muni").ToString
        picFoto.Image = ObtenerImagen(Empleado.Rows(0).Item("Foto"))
        txtLugarNacimiento.Text = Empleado.Rows(0).Item("Lugar_Nac").ToString
        Escolaridad(Empleado.Rows(0).Item("Escolaridad").ToString, TipoEscolaridad.Formulario)
        txtUltimoGrado.Text = Empleado.Rows(0).Item("Escolaridad_Ultimo_Grado").ToString
        txtProfesion.Text = Empleado.Rows(0).Item("Profesion").ToString


Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Escribir codigo SQL embebido en VB6
« Respuesta #8 en: Julio 10, 2014, 05:38:54 pm »
La verdad no te entiendo mucho, pero vos sabras...
Lo que te puedo decir, que use un par de veces esas "consultas" que vienen en Acces, y hasta se pueden usar con parametros "casi" como un procedimiento almacenado, para hacer INSERTS o UPDATES, esta bueno porque metes el codigo ahi, y no te queda en la aplicacion., nunca me trajeron problemas

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Escribir codigo SQL embebido en VB6
« Respuesta #9 en: Julio 10, 2014, 06:03:31 pm »
Es que por la forma que negocie con el cliente no puedo hacer eso ya que el va a acceder a la BD, prefiero manejarlo en el VB6. Si fuera con Firebird no tendría problema porque entrego la bd en version compilada y me borro todos los SP ya que igual quedan en la BD pero como "ocultos" e innacesibles, obviamente yo mantengo el backup con todos los SP si es que necesito modificar algo, el cliente solo podrá acceder a su data.

En todo caso, peque en comentar sobre un caso muy especifico, sorry por las molestias igual todo lo comentado me sirve. Saludos
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Escribir codigo SQL embebido en VB6
« Respuesta #10 en: Julio 10, 2014, 06:26:31 pm »
Me Parece bien que estés haciendo algo así, pero creo que te estás complicando la vida, la idea no es escribir lo menos posible, si las sentencias SQL ya están definidas lo unico que tienes que hacer son plantillas para remplazar los campos y los valores, el problema es que los valores depende de que tipo de campo es pero existen tres grandes valores para todos esos campos...


Disculpa doc, pero la verdad no entendí mucho tu código y como jugaba con lo que necesito. Tampoco se trataba de reducir código sino de ahorrar tiempo en escribirlo, pero ya no nos liemos el programita ya lo tengo casi terminado y esta es mi solución nada complicada, ya mismo lo estoy personalizando para mis propios requerimientos, pensé que era una necesidad compartida y por eso abrí el post pero no hay lio.

Tema resuelto
Me encuentras en YAcosta.com

k_arlytos

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +2/-4
    • Ver Perfil
Re:Escribir codigo SQL embebido en VB6
« Respuesta #11 en: Julio 10, 2014, 07:34:36 pm »
para eso yo uso capas men.. me desarrolle una capa de sqlHelper..
tengo un metodo que pide el procedimiento almacenado, y otro parametro que es un arreglo de valores

entonces hago un for each o for, no recuerdo para instar cada uno... sin necesidad de hacer inserto into tabla('"+ campo1 +"','"+ campo2 +"',etc..) eso... claro esta... el procedimiento almacenado si de ley tengo que hace el Bendito inserto into tabla('"+ campo1 +"','"+ campo2 +"',etc..), ahora estoy en access pero es igual para sql server u otros motores

pero si de ley tengo que crear ese insert into en un procedimiento almacenado... tu lo estas haciendo en vb6.0, por q no lo haces directamente en tu gestor de base de datos, o primero generas el insert into y luego lo pegas en tu gestor?
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

k_arlytos

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +2/-4
    • Ver Perfil
Re:Escribir codigo SQL embebido en VB6
« Respuesta #12 en: Julio 10, 2014, 07:39:13 pm »
y con respecto a mi select yo lo hago individual.. si la tabla tiene relaciones con 10 tablas lo que hago es heredar o crear objetos de tipo de esa tabla en mi capa de entidad, y con eso lleno mi objeto o puedo llenar un rs, es lo minimo que debe de tener capa clase de mi sistema... por que si o si es necesario para no repetir codigo
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Escribir codigo SQL embebido en VB6
« Respuesta #13 en: Julio 10, 2014, 07:59:55 pm »
Doc, gracias pero como dije el tema ya esta resuelto, si te fijas no pedía ayuda de como resolver algo sino el de poner un antecedente para compartir el código que ya estaba desarrollando pero el tiro salio mal, no me exprese bien ya que se entendió otra cosa. Y para no confundir mas el tema cierro el post ya que es un asunto resuelto.
Me encuentras en YAcosta.com

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Escribir codigo SQL embebido en VB6
« Respuesta #14 en: Octubre 18, 2014, 06:40:55 pm »
Yo llame a esta función Estructura:

Código: (VB) [Seleccionar]
    Public Function Estructura(ByVal Valores As String) As String
        On Error Resume Next

        Dim Respuesta As New StringBuilder

        Dim vDatos() As String = Split(Valores, ",")

        For n As Integer = 0 To vDatos.Count - 1
            If IsDate(vDatos(n)) Then
                Respuesta.Append("'")
                Respuesta.Append(DeFecha(vDatos(n).ToString))
                Respuesta.Append("'")
            Else
                If IsNumeric(Valores(n)) Then
                    Respuesta.Append(vDatos(n))
                Else
                    Respuesta.Append("'")
                    Respuesta.Append(Trim(vDatos(n)))
                    Respuesta.Append("'")
                End If
            End If
            If n < vDatos.Count - 1 Then
                Respuesta.Append(",")
            End If
        Next

        Return Respuesta.ToString
    End Function

...

Para que serviria esta funcion y como usarlo, y se puede usar en vb6 por que este code es para vb.net
« última modificación: Octubre 18, 2014, 06:43:06 pm por E N T E R »
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo