Procedimiento almacenado "Filtra_Vehi_PorId"
Código MySQL:
Ver original
CREATE DEFINER=`root`@`localhost` PROCEDURE `Filtra_Vehi_PorId`(IN `idenviado` INT) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER
Ahora Capa de Datos "VehículoAD"
Código vb:
Ver original
Imports MySql.Data.MySqlClient Imports System.Data.SqlTypes Imports ENTIDAD Public Class VehiculoAD Private conn As New MySqlConnection 'SqlConnection Private conn1 As New MySqlConnection 'SqlConnection Private comando As New MySqlCommand 'SqlCommand #Region "Cadena de conexion" Public Sub New() Dim Objconexion As New ConexionAD conn = Objconexion.abrir comando.Connection = conn End Sub #End Region #Region "Función convertir datos" Private Shared Function ConvertirdatosVehiSalEn(ByVal reader As IDataReader) As VehiculoEN Dim vehiculo As New VehiculoEN vehiculo.idv = LTrim(RTrim(Convert.ToInt32(reader(0)))) vehiculo.numplaca = LTrim(RTrim(Convert.ToString(reader(1)))) Dim ObjMotor = New MotorEN((reader(2))) vehiculo.idmotor = ObjMotor.serie Dim ObjMarca = New MarcaEN((reader(3))) vehiculo.idmarca = ObjMarca.nommarca vehiculo.idestado = LTrim(RTrim(Convert.ToString(reader(4)))) vehiculo.kmcompra = LTrim(RTrim(Convert.ToDecimal(reader(5)))) vehiculo.kmactual = LTrim(RTrim(Convert.ToDecimal(reader(6)))) Return vehiculo End Function #End Region #Region "Función Filtra_Vehi_PorId" Public Function Filtra_Vehi_PorId(ByVal ObjVehiculoEN As VehiculoEN) As List(Of VehiculoEN) Dim list As New List(Of VehiculoEN) Dim reader As MySqlDataReader Try comando.CommandType = CommandType.StoredProcedure comando.CommandText = "Filtra_Vehi_PorId" Dim _idenviado As New MySqlParameter("idenviado", MySqlDbType.Int32) _idenviado.Value = ObjVehiculoEN.idv _idenviado.Direction = ParameterDirection.Input comando.Parameters.Add(_idenviado) reader = comando.ExecuteReader While reader.Read list.Add(ConvertirdatosVehiSalEn(reader)) End While Return list Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, ex.Source) Finally conn.Close() conn.ClearAllPools() conn = Nothing End Try End Function #End Region
La capa Entidad no la incluyo porque ya se sabe.
Ahora la capa Lógica de negocio "VehiculoLN"
Código vb:
Ver original
Imports ENTIDAD Imports ACCESO_DATOS Public Class VehiculoLN Private ObjVehiculoAD As VehiculoAD Public Sub New() ObjVehiculoAD = New VehiculoAD End Sub #Region "Establecer conexion con la función Filtra_Vehi_PorId" Public Function Filtra_Vehi_PorId(ByVal ObjVehiculoEN As VehiculoEN) As List(Of VehiculoEN) Return ObjVehiculoAD.Filtra_Vehi_PorId(ObjVehiculoEN) End Function #End Region
Ahora la capa presentación "ListaVehíSalidasEntradas": Bueno primero cargo un pequeño listado en un datagridview donde incluyo los fk de las tablas reelacionadas los cuales oculto en las columnas; luego al seleccionar un registro me envia un id esto hace que el procedimiento me filtre el registro y me muestre los datos que requiero.
Formulario "ListaVehiSalEntVehi"
Código vb:
Ver original
Imports ENTIDAD Imports LOGICA_NEGOCIO Imports System.IO Imports System.Drawing Imports Helpers Public Class FrmListaSalEntVehi Private ObjRegistro_Reco_VehiEN As Registro_Reco_VehiEN Private ObjRegistro_Reco_VehiLN As Registro_Reco_VehiLN Sub FormatoDgv() Me.DgvListaRecorVehi.DefaultCellStyle.NullValue = "no entry" With Me.DgvListaRecorVehi .Columns(1).Visible = False .Columns(2).Visible = False .Columns(7).DefaultCellStyle.Format = "t" .Columns(9).DefaultCellStyle.Format = "t" End With End Sub #Region "Modificador de acceso para cargar el listado" Public Sub CargarListaRecorVehi() Try ObjRegistro_Reco_VehiEN = New Registro_Reco_VehiEN ObjRegistro_Reco_VehiLN = New Registro_Reco_VehiLN DgvListaRecorVehi.AutoGenerateColumns = False FormatoDgv() DgvListaRecorVehi.DataSource = ObjRegistro_Reco_VehiLN.Lista_Recor_Vehi() LblTotalRegistros.Text = "Total de registros" + " " + CStr(DgvListaRecorVehi.Rows.Count) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, ex.Source) End Try End Sub #End Region Private Sub FrmListaSalEntVehi_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load CargarListaRecorVehi() End Sub Private Sub BtnModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnModificar.Click If (CStr(DgvListaRecorVehi.Rows.Count) <= 0) Then MsgBox("Al menos Debes de registrar una salida de vehículo para poder registrar llegada", MsgBoxStyle.Information, "Mensaje") Exit Sub End If If (TxtCapturaId.Text = "") Then MsgBox("Seleccione 1 registro para registrar llegada del vehículo", MsgBoxStyle.Information, "Mensaje") Exit Sub End If Dim FormRegEntVehi As FrmRegEntVehi FormRegEntVehi = New FrmRegEntVehi(Me) FormRegEntVehi.ShowDialog() FormRegEntVehi = Nothing End Sub Private Sub DgvListaRecorVehi_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DgvListaRecorVehi.CellClick If (Convert.ToInt32(DgvListaRecorVehi.Rows.Count) >= 1) Then For Each d As DataGridViewRow In Me.DgvListaRecorVehi.SelectedRows TxtCapturaId.Text = d.Cells(0).Value Next End If End Sub
Luego en un formulario Modal capturo el id como les comente líneas más arriba para que mi procedimiento me filtre lo que requiero mostrar todo bien filtra el procedimiento funca hasta en la capa AccesoDatos en las variables me muestra los datos que el procedimiento filtra. Ahora lo que no puedo hacer hasta el momento es que esos datos me muestre en cada textbox. Aquí esta el código:
Código vb:
Ver original
Imports ENTIDAD Imports LOGICA_NEGOCIO Imports System.IO Imports System.Drawing Imports Helpers Public Class FrmRegEntVehi Dim FormListaSalEntVehi As FrmListaSalEntVehi Public Sub New(ByVal _FormListaSalEntVehi As FrmListaSalEntVehi) ' The Me.InitializeComponent call is required for Windows Forms designer support. FormListaSalEntVehi = _FormListaSalEntVehi Me.InitializeComponent() ' ' TODO : Add constructor code after InitializeComponents '' End Sub Private ObjRegistro_Reco_VehiEN As Registro_Reco_VehiEN Private ObjRegistro_Reco_VehiLN As Registro_Reco_VehiLN Private ObjVehiculoEN As VehiculoEN Private ObjVehiculoLN As VehiculoLN Private ObjPolizaEN As PolizaEN Private ObjPolizaLN As PolizaLN Private x As Integer Private Sub FrmRegEntVehi_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load x = FormListaSalEntVehi.TxtCapturaId.Text LblFechaSys.Text = Date.Today LblHora.Text = Date.Now.ToLongTimeString For Each d As DataGridViewRow In FormListaSalEntVehi.DgvListaRecorVehi.SelectedRows 'TxtCodigo.Text = d.Cells(0).Value TxtIdV.Text = d.Cells(1).Value Next End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick LblHora.Text = Date.Now.ToLongTimeString End Sub 'Estoy codificando en el textchange del textbox donde capturo el id del vehiculo pero no logro hacer que cada text se enlace a cada campo Private Sub TxtIdV_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TxtIdV.TextChanged Try ObjVehiculoEN = New VehiculoEN ObjVehiculoLN = New VehiculoLN ObjVehiculoEN.idv = LTrim(RTrim(TxtIdV.Text)) Dim datos As New List(Of VehiculoEN) datos = ObjVehiculoLN.Filtra_Vehi_PorId(ObjVehiculoEN) While datos.Count TxtNumPlaca.Text = datos(1).numplaca TxtIdMotor.Text = datos(2).idmotor TxtMarca.Text = datos(3).idmarca TxtEstado.Text = datos(4).idestado TxtKmCompra.Text = datos(5).kmcompra TxtkmInicial.Text = datos(6).kmactual End While Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, ex.Source) End Try End Sub
Espero de sus consejos. Gracias.