sábado, 8 de noviembre de 2014

RESOLVER PROBLEMA DE COLLATION EN EL JOIN DE UNA CONSULTA EN SQL SERVER

sábado, 8 de noviembre de 2014

Ya había visto ese mensaje antes, así que sabía que estaba mal. Las colaciones para las dos tablas fueron inconsistentes. Como se trataba de una base de datos que se actualizó desde otra versión de SQL, y utiliza los objetos de un tercero, no me sorprendió que se utilizara una intercalación específica. Yo había creado la tabla "b" por mí mismo, usando los valores predeterminados de las bases de datos, y no coincidieron con el objeto.

Hice una búsqueda rápida ya que no podía recordar la sintaxis exacta de la cláusula para añadirlo a mi consulta. Acabé en el blog de un amigo y leí en ese post: No se puede resolver el conflicto de intercalación entre "SQL_Latin1_General_CP1_CI_AS" y "Modern_Spanish_CI_AS" de la operación equal to.

La solución es fácil, añadir un COLLATE DATABASE_DEFAULT a la condición de Join para forzar una intercalación específica sobre el campo. Yo fácilmente podría haber añadido un COLLATE Latin1_General_CI_AS también, pero ya que sabía que el segundo campo era por defecto el de base de datos actual, hice esto:

select TOP 10 * 
 from usuarios a
   inner join baneados b
   on a.idusuario COLLATE DATABASE_DEFAULT = b.idusuario

Leer mas

miércoles, 3 de julio de 2013

Grabar y Actualizar en la Base de Datos al cambiar de fila o columna en un DataGrid en VB.Net

miércoles, 3 de julio de 2013

El caso:
Tenemos la tarea de llenar los datos requeridos para guardarlos y mostrarlos en una lista. Pero aveces es necesario y práctico realizar cambios, mas específicamente al tratar de guardar en la BD, con solo poquísima necesidad de hacer clic en cuantos botones y controles pudiéramos disponer para que el usuario final pueda interactuar, ya sea por cuestiones de facilitarlo o porque no hay mucho espacio en la ventana que estemos programando en ese momento. Entonces porque no hacer todo este rollo con solo cambiar de fila o columna, es decir con solo tocar la bendita celda?...pues acá les va un ejemplo práctico.

A la práctica:
En mi DataGridView Cuento con 4 COLUMNAS, que corresponden a 3 CAMPOS de la tabla con la que deseo interactuar, y que cada vez que cambie y valide los datos de las celdas se insertaran o actualizaran dependiendo del caso, y en el caso de eliminar tengo una ultima columna que me permitirá hacer clic para eliminar el registro completo. (Ojo el campo que corresponde a la clave primaria esta oculto en el grid)



Para todo esto deberán ubicar el EVENTO donde se desencadene el cambio de un valor dentro de una celda. En DataGridView se llama CellValueChanged

También tienen que considerar el hecho de como esta estructurado la tabla donde se guardaran los datos, es decir si de hecho poseen un clave primaria y si los demás campos permiten valor nulo, por lo que se validará de la siguiente forma.

Private Sub DataGridView_CellValueChanged(ByVal sender AsSystem.Object, ByVal e AsSystem.Windows.Forms.DataGridViewCellEventArgs) HandlesDataGridView.CellValueChanged


' aca indico si la columna de la fila donde estoy escribiendo es diferente a la ultima columna (eliminar)
            If e.ColumnIndex <> 3 Then
                'aca pondras tu codigo que usaras para interactuar con la BASE DE DATOS
                'ademas de la coneccion, tabien se deben definir las variables
                'que serviran como parametros al momento de insertar o actualizar

                    'en un principio capturamos los datos parametro,
                    'sobre todo el de la celda que contiene la clave primaria,
                    'es decir _cod_util que es un campo numerico

                    ._cod_util = dg_utilidades.Item(0, e.RowIndex).Value
                    ._nombre = dg_utilidades.Item(1, e.RowIndex).Value

                    'si estoy dentro de una columna que implica escribir un numero pues lo valido de la siguiente forma
                    If Not DataGridView.Item(2, e.RowIndex).Value Is Nothing Then
                        If IsNumeric(DataGridView.Item(2, e.RowIndex).Value) = False Then
                            ' si no cumple el requisito de un numero, a lo que escribi recientemente
                            'y se remplaza por su valor por defecto ("")
                            'y terminamos este evento para que vuelvan a escribir correctamente
                            DataGridView.Item(2, e.RowIndex).Value = ""
                            Exit Sub
                        End If

                    End If
                    ._tasa = DataGridView.Item(2, e.RowIndex).Value

                    ' esta validadacion es importante
                    'ya que decidira si se insertara o solo se modificara el registro en la BD
                    ' dependiendo de lo que capturo como dato nuestro parametro _cod_util arriba entonces

                    If ._cod_util = 0 Then
                        'es logigo asumir que si se capturo el valor cero o un valor en blanco o nulo, 
                        'esta operacion es para insertar un nuevo registro
                        'y no se olviden de validar si los demas datos son requisito ingresar,
                        'de lo contrario no considerar estos IF
                        If Not ._nombre Is Nothing Then
                            If ._tasa <> 0 Then
                                'aca usas tu codigo para instertar en la base de datos                               
                               
                                    'una ves grabada la data debemos hacer que la clave primaria retorne
                                    'para que la celda contenga el nuevo dato del codigo unico
                                   
                                    DataGridView.Item(0, e.RowIndex).Value = ._cod_util
                                   
                                End If
                            End If
                        End If
                    Else
                        'si se capturo un valor cualquiera menos los valores cero, vacios o nulos, 
                        'es logico asumir que esta operacion ya tiene un registro en la BD
                        'y solo es para actualizar los datos escritos en las celdas
                        'y no se olviden de validar si los demas datos son requisito ingresar,
                        'de lo contrario no considerar estos IF

                        'si no cumple la validacion devolvemos a la celda el valor anterior para esta celda
                        'que obviamente esta en el registro de la BD
                        'por lo deberiamos hacer una consulta para justamente traer el valor

                        If Not ._nombre Is Nothing Then

                            If ._nombre.Trim.Length <> 0 Then
                           
                                If ._tasa <> 0 Then
                                    'aca usas tu codigo para actualizar en la base de datos
                                Else
                                   
                                    DataGridView.Item(2, e.RowIndex).Value = _sql_config.query_registro("tbl_utilidad", "cod_util=" & DataGridView.Item(0, e.RowIndex).Value).Rows(0).Item("tasa")
                                   
                                End If
                            Else
                               
                                DataGridView.Item(1, e.RowIndex).Value = _sql_config.query_registro("tbl_utilidad", "cod_util=" & DataGridView.Item(0, e.RowIndex).Value).Rows(0).Item("nombre")
                               
                            End If
                        Else
                           
                            DataGridView.Item(1, e.RowIndex).Value = _sql_config.query_registro("tbl_utilidad", "cod_util=" & DataGridView.Item(0, e.RowIndex).Value).Rows(0).Item("nombre")
                           
                        End If

                    End If

                   
                    DataGridView.Item(3, e.RowIndex).Value = "ELIMINAR"

            End If
End Sub

ESTE CODIGO ES SOLO PARA ELIMINAR UN REGISTRO DE LA BASE DE DATOS USANDO COMO DESENCADENADOR UN CELDA EN FORMA DE LINK

Private Sub DataGridView_CellContentClick(ByVal sender AsSystem.Object, ByVal e AsSystem.Windows.Forms.DataGridViewCellEventArgs) HandlesDataGridView.CellContentClick
       
            If e.ColumnIndex = 3 Then

'aca validamos si la celda de la columna donde esta la clave primaria tiene valor o no y de acuerdo a esto eliminar en la BD
                If DataGridView.Item(0, e.RowIndex).Value = 0 Then
                    DataGridView.Rows.RemoveAt(e.RowIndex)
                Else
                    'aca usas tu codigo para actualizar en la base de datos
                        ._cod_util = DataGridView.Item(0, e.RowIndex).Value                      
                        If .transact_utilidades = True Then
                            DataGridView.Rows.RemoveAt(e.RowIndex)
                        End If
                    End With
                End If

            End If
        

    End Sub

Leer mas

martes, 14 de agosto de 2012

Codigo fuente de un Sistema de Ventas de Ropa en VB.Net y SQL Server

martes, 14 de agosto de 2012


Digamos que vives en una tierra donde uno de los negocios mas abundantes y prósperos de tu ciudad son las ventas de ropa o vestidos (o como quiera llamarlo), y digamos también que por el hecho de que es un negocio fluctuante y añadimos a esto que están bajo las normas de un país que les cobra mucho por el impuesto a las ventas y compras, por lo tanto los negociantes no les queda otra que se ven envueltos en la necesidad de administrar sus ventas, controlar el stock de la mercadería y planificar sus gastos sin tener que declarar al fisco las utilidades reales, pero al mismo tiempo desean un sistema que le permita realizar estas operaciones de forma sencilla, práctica y útil,  pues bueno este proyecto (código fuente y base de datos) te ahorrará tener que codificar y sofisticar tu sistema de ventas para un tipo de usuario y negocio que no necesita tantas cosillas para que funcione como la realidad del negocio exige.

Por lo tanto este sistema solo consta básicamente todo lo referente a Ventas, Compras e Inventario de tal forma que el adquiriente de la aplicación no tenga la noción de algo tedioso y costoso para su inversión, y haciendo de cuenta que hay muchísimas tiendas en tu ciudad sin esta herramientas, pues ni que decir que podrás sacar provecho ($) de la situación.

Hecho en Visual Basic 2008 y bajo el soporte de datos en SQL SERVER 2005-2008, tanto  el diseño como el código es flexible, fácil y adaptable a otras personalizaciones o añadiduras por parte del programador (suponiendo que sabes en lo que te has metido), ademas de adaptarle a otro rubro que deseáis.

El sistema se compone de lo siguiente:

* Ventas: registro y cobro de las ventas, es opcional el tipo comprobante de pago y selección del cliente (acceso directo a mantenimiento de los datos), la correlación de los números así como la modificación de los datos de la venta son configurables directamente en el sistema, se incluyen los reportes en el formulario.

* Transferencias: incluye transferencia de la mercadería de un establecimiento a otro o salidas o dar de baja a la mercadería que no se incluirá directamente en la venta

* Compras: registro y pago (configurable) de las compras, es opcional el tipo de comprobante, el proveedor se crea y edita sus datos directamente del formulario.

Distribución: actualización del inventario en sus respectivos establecimientos a partir de las compras de mercadería para la venta.

Mercadería: registro de datos de la mercadería propiamente dicha, así como la actualización del inventario actual de stock

Caja: registro de los flujos de dinero en caja

Configuración: apartado para definir los usuarios, establecimientos, periodos, ajustes de ventas y demás datos tributarios y propios del negocio.

* Los usuarios pueden ser de dos tipos: Administrador (solo uno) y Vendedores (ilimitado)
* Las ventas de acuerdo al stock, así como la compra/venta haciendo uso del dinero en caja son opcionales (configuración)

La Aplicación del Sistema consta de Formularios independientes, Clases, controles personalizados, reportes (crystal Reports) e instalador.

La Base de Datos consta de tablas con PK de autoincremento, Procedimientos almacenados generales y específicos por cada operación (querys & Transacs) y funciones escalares. (el sistema es tan compacto y práctico que no me tome la molestia de hacer Triggers, ni indexaciones, ni vistas y mucho menos diagramas)

Bueno así que si estas en busca código fuente fácil, reutilizable y con garantía para tu practica de ingeniería o se lo vendas a algún incauto, digo, a algún comerciante, o aun mejor para que sorprendas a tu chica y te jactes de buen programador,  pues este sistemilla queda perfecto para voz, hecha aquí un vistazo de lo que os habléis y no te arrepentiríais:

Adquiéralo por solo $200

Contacto y soporte: vb.NetSolucion@gmail.com


  







Leer mas

Buscar

 
Copyright © 2009 .Net Solucion