lunes, 5 de julio de 2010

Como filtrar un campo Datetime en mi consulta teniendo como parámetro una fecha simple en SQL Server

lunes, 5 de julio de 2010

Poseemos una tabla en la que ademas de otros campos esta incluido la fecha, pero resulta que lo hemos declarado como tipo de dato "DateTime", y que por defecto, al momento de crear o modificar el registro, este campo incluye ademas la hora, minutos, segundos y milisegundos (2007-06-08 12:23:56.234) en la que fue actualizada.

Esto puede resultar un dolor de cabeza al momento de realizar una consulta en la que tengamos como criterio de selección este campo fecha, ya que generalmente lo filtramos o parametrizamos como fecha y formato distinto: Select * from compras where fecha='08/06/2007'. Y el resultado de esto seria: Maldita sea, no tengo registros.

Bueno os traigo una solución sencilla por medio de una función hecha en SQL Server en la que podeis filtrais sin mas apuros que el de ejecutarla:

CREATE FUNCTION [dbo].[CONVERT_FECHA_SIMPLE]
(
@FECHA DATETIME
)
RETURNS SMALLDATETIME
AS
BEGIN
RETURN CAST(CONVERT(varchar, @FECHA, 103) AS DATETIME)
END

Bueno, después de codificar esto, acá lo único que deberais haceis en tu procedimiento almacenado en el cual harás la tan ansiada consulta es llamar a la función convert_fecha_simple desde el campo criterio, asi, mirais:

Select * from Compras where dbo.convert_fecha_simple(fecha)='08/06/2007'

Leer mas

viernes, 2 de julio de 2010

Realizar una búsqueda en una tabla por cada una de sus columnas en SQL Server

viernes, 2 de julio de 2010

En nuestro formulario de vb.net tenemos la idea de mostrar en una lista o en un grid los resultados de una búsqueda específica de los registros de una tabla y para ello tendríamos que filtrar las palabras clave según el tipo de columnas que estas contienen.

Esto podría ser de mucha utilidad para aquellos que utilizan una o pocas tablas en SQL Server para localizar los registros deseados y también para aquellos que quieren mostrar los resultados haciendo uso de un solo criterio y no complicarse con un sinfín de controles específicos para cada palabra o dato clave.

Todo esto se resume en realizar un procedimiento almacenado en SQL Server en la que ¡OJO! solo se pondrá como ejemplo el procedimiento en el cual se almacenarían los datos del nombre y el alias de las columnas asignadas en las tablas o consultas donde se realizará la búsqueda de los registros, y esta obvio que aparte ya tendras un procedimiento o vista en la cual consultaras los registros.

Codigo en SQL Server:

CREATE PROCEDURE SP_COLUMNAS_TABLA
@TABLA VARCHAR(20)
AS
BEGIN
--CREAMOS UNA TABLA TEMPORAL EN LA CUAL ALMACENAREMOS LOS NOMBRES DE LAS COLUMNAS Y SU ALIAS POR CADA TABLA ELEJIDA
DECLARE @TABLA_COLUMNAS TABLE(COLUMNA varchar(50), DESCRIPCION varchar(50))
SET NOCOUNT ON
DECLARE @COLUMNA AS VARCHAR(50)
DECLARE @ARRAY_COL AS NVARCHAR(500)
DECLARE @DESCRIPCION AS VARCHAR(50)
DECLARE @ARRAY_DES AS NVARCHAR(500)
IF @TABLA='PERSONAS' BEGIN
SET @ARRAY_COL='COD_PERSONA,NOMBRE,FECHA_NACIMIENTO,' --NOMBRE DE LAS COLUMNAS EN LA TABLA1 QUE DESEAMOS FILTRAR EN LA BUSQUEDA, OVIAMENTE ESTA TABLA PODRIA TENER MAS COLUMNAS, SOLO SELECCIONAMOS LAS QUE QUEREMOS MOSTRAR
SET @ARRAY_DES='CODIGO,NOMBRE,FECHA DE NAC,' --ALIAS DE LAS COLUMNAS EN ORDEN CORRESPONDIENTE AL NOMBRE, DE ESTA FORMA SE DESCRIBIRAN AL MOMENTO DE MOSTRARLOS EN UN CONTROL DEL FORMULARIO
END
IF @TABLA='CIUDADES' BEGIN
SET @ARRAY_COL='COD_CIUDAD,NOMBRE,'
SET @ARRAY_DES='CODIGO,NOMBRE,'
END
--puedes elejir mas tablas incluso columnas de una consulta


IF @TABLA='CIUDAD_PERSONAS' BEGIN
SET @ARRAY_COL='CIUDADES.NOMBRE,PERSONAS.NOMBRE,'
SET @ARRAY_DES='CIUDAD,PERSONA,'
END

WHILE LEN(@ARRAY_COL)<>0
BEGIN
SET @COLUMNA =SUBSTRING(@ARRAY_COL,0, CHARINDEX(',',@ARRAY_COL))
SET @ARRAY_COL =SUBSTRING(@ARRAY_COL,CHARINDEX(',',@ARRAY_COL,0)+1,LEN(@ARRAY_COL))
SET @DESCRIPCION =SUBSTRING(@ARRAY_DES,0, CHARINDEX(',',@ARRAY_DES))
SET @ARRAY_DES =SUBSTRING(@ARRAY_DES,CHARINDEX(',',@ARRAY_DES,0)+1,LEN(@ARRAY_DES))
INSERT INTO @TABLA VALUES(@COLUMNA, @DESCRIPCION)
END
SELECT * FROM @TABLA_COLUMNAS
END

Pero si tu eres de lo que no quiere complicarse aun mas con este código, y quieres de un porraso todas las columnas de una tabla y que el usuario elija de todas que campo filtrar en la busqueda pues te recomiendo usar este codigo en SQL Server:

Select name from syscolumns where id=object_id('Nombre_Tabla')


Bueno esta claro que acá no pondré el código en vb.net para invocar este procedimiento y efectuar la secuencia de la búsqueda, eso queda a criterio de cada programador, aca solo les di una idea de como podrían solucionarlo de forma práctica la búsqueda en una tabla o consulta específica. El filtro de búsqueda mas o menos quedaría de esta forma:



Leer mas

Recordar los datos de usuario y la clave de inicio de sesión de forma práctica en vb.Net


A veces nos encaprichamos buscando una solución eficaz y fidedigna a nuestra aplicación para establecerle atributos funcionales que se nos escapa la idea de una solución más bien práctica y simple. Por ejemplo una de estas seria el tratar de atribuir a nuestro formulario de inicio de sesión la propiedad de recordar nuestros datos si así lo deseamos.

Había indagado varios artículos en las cuales por obra y gracia de san google me topaba con tipos pidiendo e impartiendo que trabajeis con las coockies, si, ese archivito en formato texto que es indispensable para aquellos que no tienen el mas mínimo tiempo de volver a ingresar sus datos de usuario para ingresar a su web favorita. Pues bien, de seguro habrá si como no código en vb.Net que os permitais estois atributos, pero es demasiado tedioso el estar referenciando librerias y escribiendo código que quizas nunca entendereis, por eso yo oz digo: no te compliques la vida y desarrolla tu propia coockie con el siguiente ejemplo en vb.Net:

Private Sub Btn_Aceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Aceptar.Click
Const RutaCockie As String = "C:\cockie.txt"
If ChkRecordar.Checked = True Then ' activamos el check si deseamos guardar los datos en el archivo de texo
Dim sw As New System.IO.StreamWriter(RutaCockie)
sw.WriteLine(Txt_NomUsu.Text)
sw.WriteLine(Txt_ClaUsu.Text) ' bueno supongo que ya habreis codificado la clave o de lo contrario cualquier gato curioso podria indagar la cockie y mirar lo absurdo de tu clave: porsiempretuyo123
sw.Close()
Else
If IO.File.Exists(RutaCockie) Then
My.Computer.FileSystem.DeleteFile(RutaCockie) ' yo recomiendo eliminar el archivo si antes habeis guardado y ahora oz arrepentir, para ello primero comprobareis si el archivo existeis
End If
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Const RutaCockie As String = "C:\cockie.txt" ' puede ser otra ruta, la que deseais maldicion, total los derechos de libre expresion te guarecen
If IO.File.Exists(RutaCockie) Then ' si existe el archivo, significa que guardastes los datos en la coockie y leeras por cada linea el texto los datos
ChkRecordar.Checked = True
Dim sr As New System.IO.StreamReader(RutaCockie, True)
Txt_NomUsu.Text = sr.ReadLine ' lee la primera linea donde estaria el nombre de usuario ya que en ese orden lo deberiamos haber guardado
Txt_ClaUsu.Text = sr.ReadLine ' leea la segunda linea
sr.Close()
End If
End Sub

Leer mas

¿Porque mi archivo descargado desde mi servidor FTP no se guarda en la carpeta que cree desde mi aplicación en vb.Net?

Estas compilando tu Aplicación en vb.Net que te permitirá descargar los archivos del servidor FTP y todo te sale a la perfección, es decir: estableces la conexión con el Server FTP, tu archivo descargado se guarda en la carpeta que tu has asignado desde código fuente en la ruta de tu aplicación por defecto, es decir "c:\Archivos de Programas\Mi Aplicación\Archivos del FTP\archivo.doc". De pronto, vas a otra maquina, instalas tu Aplicación para probarlo (según tu para jactarte) y te das cuenta que tu Archivo que supuestamente descargaste no aparece en la carpeta deseada ¿Que paso?

La razón de este problemilla?: pues sinceramente no estoy seguro pero todo indica que se trata de los Permisos de Windows ya que estas carpetas son especiales y no pueden ser alteradas desde otra fuente que no sea la acciones directas del usuario mismo como: guardar, eliminar, modificar los archivos (las cuales contienen) desde su interior, por el contrario ya que deseamos alterarlas desde una fuente intermedia haciendo uso de nuestra Aplicación, necesitaríamos un código especial que nos permitiese realizar justamente estas acciones dentro de las carpetas en cuestión.

Señores yo les recomendaria lo siguiente: Evita descargar el archivo en un dirección que pudiera incluir carpetas del Sistema Operativo (Windows, Archivos de Programas, Mis Documentos, etc), que comúnmente (supongo) sería por ejemplo "c:\Archivos de Programas\Mi sistema\Archivos ftp\archivo.doc", ya que podría ocasionar un error o en todo caso ¡no mostrar el error! pero en cambio ¡no guardar el archivo! (lo que sucedió en mi caso), asi que evítalo y no te compliques, yo te sugiero guardarlo en otra unidad o por ejemplo en "C:\Archidos FTP". O Si consigues algun codigo o propiedad que nos permita realizar estas acciones por favor ¡compártalas hombre!, y mucho mejor si los publicais en nuestro blog, tu solución alternativa.

Aca los dejo el código en vb.Net para orientarlos:

Dim ruta_archivo As String
' Si la carpeta donde deseamos guardar nuestros archivos no esta creado , pues que creen, lo creamos pues
If Not Directory.Exists("c:\Archivos FTP") Then
Directory.CreateDirectory("c:\Archivos FTP")
End If
ruta_archivo = "c:\Archivos FTP\archivodescargado.doc"

'importante, es necesario comprobar si el archivo ya existe para abrirlo o ejecutarlo (si es que esa es tu intensión) directamente y no enviar otra vez la solicitud de descarga del servidor FTP
If Not File.Exists(ruta_archivo) Then
Try
DescargarArchivoFTP(ruta_archivo, "archivodescargado.doc") ' Click aqui para ver el procedimiento en la cual descarga el archivo
Catch ex As Exception
MsgBox(ex.Message)
Exit Sub
End Try
End If
End If
Try
System.Diagnostics.Process.Start(ruta_archivo) ' si es que tu intension es abrir oejecutar el archivo
GrabarEstado()
Catch ex As Exception
MsgBox(ex.Message)
End Try

Leer mas

Buscar

 
Copyright © 2009 .Net Solucion