martes, 20 de julio de 2010

Restaurar un backup en un servidor diferente sql server 2008 R2



Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.

 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.

 www.artprogramnet.wordpress.com
Bueno,les cuento, en una ocasión no tenia acceso al servidor donde tenia mi base de datos; lo unico que tenia era un backup de la base de datos y me urgia ver ciertas estructuras y datos. Lo intente de varias maneras, y casi siempre me salia un error como este; Microsoft SQL Server, Error: 3203,pero lo que me funciono fue esto:.

OJO, tienen que tener escritas en algun lugar las rutas de donde esta la base de datos y el backup original y crear los directorios en la maquina o servidor en donde quieran recuperar la base .

1.-Lo primero que hice fue crear una base de datos con el mismo nombre de la base de datos original(una base de datos vacia) y dirigida hacia la misma ruta original.
2.-Realizar un backup de esa base de datos vacia al mismo directorio(si no existe, crearlo) en donde estaba el backup original.
3.-Sobrescribir ese backup de datos vacios con el backup original(el que te interesa restaurar).
4.-Realizar un restore a la base de datos con la opcion(en la pestaña de opciones) de :sobreescribir la base de datos existente(WITH REPLACE)

Y eso seria todo. El tipo de autenticacion es MODO DE AUTENTICACION DE WINDOWS
NOTA: ESTO SOLO OCUPENLO CUANDO NO TENGAN OTRA FORMA DE RECUPERAR LOS DATOS Y SOLO DISPONGAN DEL BACKUP. FIJENSE BIEN EN LO QUE ESTAN HACIENDO, NO VAYAN A SOBREESCRIBIR UNA BASE DE DATOS QUE ESTA ACTUALIZADA CON UNA OBSOLETA

Si alguien tiene mas claro el procedimiento, echenos un cable por ahí.
Que esten bien!

viernes, 9 de julio de 2010

Filtrar datos nulos o falsos en un campo boolean en un dataview



Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.

 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.

Supongamos que quiero saber cuantos elementos son falso o estan nulos en un dataview
'Se asume que quiero saber que registros estan sin autorizar o nulos
'creamos nuestro dataview
Dim dvsinautoriza As DataView = New DataView(datos)
'creamos la cadena de filtro
Dim str As String = String.Empty
'construimos nuestra condicion, observen la condición de null
'mi cambo boolean es: autorizada
str = "autorizada ='FALSE' "
str = str & " or autorizada Is Null "
'hacemos el filtro
dvsinautoriza.RowFilter = str
'si no encontramos datos nulos procedemos a procesarlos
If dvsinautoriza.Count = 0 Then
'procesar datos
Else
'mandamos un mensaje al usuario
MessageBox.Show("tienes parámetros sin autorizar “
Endif
claro que lo anterior es un sencillo ejemplo, pero es la base para hacer rutinas mas complejas cuando estemos manejando datos nulos o de tipo boolean
saludos

jueves, 13 de mayo de 2010

Como obtener un rango entre dos DateTimePicker y después presentar los datos en un datagridview.



Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.

 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.
La solución que hago es la siguiente

‘declaro dos variables para almacenar la fecha en formato yyyymmdd de inicio 'y final, la razon de usar este formato es para no tener problemas si el servidor 'sql server maneja diferentes tipos de fecha: anericano o europeo etc
Dim cCadsel As String
Dim sFechainic As String
Dim sFechafin As String
'convertimos desde datetimepicker en el formato de año mes dia
sFechainic = Dtfecha.Value.ToString("yyyyMMdd")
sFechafin = dtfechafin.Value.ToString("yyyyMMdd")
'creo la cadena del query, se recomienda usar stored procedure, pero esta manera
'es para que tengan idea de hacerlo directamente
cCadsel = " Select clapar ,nombre,fecha,area,descarea from datos WHERE fecha >='" & sFechainic _
& "' and fecha < dateadd(dd,1,'" & sFechafin & "')"
'Nota: A la fecha final se le añade un día, de otra manera solo traeria la 'fecha que tuviera 0 horas, ignorando el resto de registros con otra hora

' Declaro el sqldataadapter y el datatable
Dim daparametro As SqlDataAdapter
Dim dtabparam As DataTable
daparametro = New SqlDataAdapter(cCadsel, Conexion)
dtabparam = New DataTable
' Llenar la tabla con los datos indicados
daparametro.Fill(dtabparam)
‘asigno a mi datagrid la tabla
DgParam.DataSource = dtabparam
'y eso seria todo

Datagridview EndEdit Problema, no graba la última fila ingresada, el usuario debe cambiarse de fila. Si pulso el botón de grabar, no actualiza BD


Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.
 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.
 www.artprogramnet.wordpress.com
Un detalle que se observa en el datagridview, es que para que los datos modificados sean grabados en la base de datos, debe moverse de fila(también pasa cuando el datagrid tiene la propiedad readonly a true y los valores se llenan desde textbox), para así internamente el datagridview confirme los cambios a sus tablas subyacentes, este comportamiento causa los siguientes problemas:
1.-El usuario modifica una celda del datagridview y de inmediato pulsa el botón de grabar, no graba la fila en que está posicionado.
2.-De un conjunto de filas modificadas, la última no se graba.

Bueno para solucionar este detalle, en el botón de grabar, se recorre la tabla subyacente que en este caso se llama dtabalumnos y finalizo todos los cambios pendientes de cada fila.
Luego finalizó todos los cambios pendientes del datagridview, que en este caso se llama dgalumnos
Dim filaalumno As DataRow
For Each filaalumno In dtabalumnos.Rows
filaalumno.EndEdit()
Next filaalumno
Dgalumnos.EndEdit()
Nota: se debe finalizar la edicion de la fila con endedit y despues el datagridview, de otra manera no funciona.
Si han encontrado otra solución mas sencilla, no duden en compartirla

miércoles, 28 de abril de 2010

nombre del archivo PDF por medio de codigo con PDFcreator



Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.

 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.

Existe la necesidad de que el nombre del archivo PDF sea creado desde nuestro código de visual net. Porque?, una de las razones basicas es para tener mayor control sobre los nombres, sobre todo si hacen referencia a numeros, como pueden ser: Ordenes de compra, Número de factura etc. El usuario facilmente se equivoca al poner el nombre y se pierde el control
Bueno la forma en que yo he controlado esto, es la siguiente:
Asumiendo que oImpresion es una instancia de la clase PrintDocument, creamos una cadena y la asignamos a la propiedad DocumentName.

With oImpresion
.DocumentName = "OC" & txtordcompra.text
End With

En Autoguardado que es una opción de PdfCreator bajo el menu de opciones, configuramos mas o menos como sigue:
En nombre de archivo colocamos el nombre de la compañía- mas Title-DateTime que son elementos predefinidos.En Title, aparecera la cadena que hayamos puesto en DocumenteName.
Podemos seleccionar la opción de abrir y enviar por mail, asi como la ruta predefinidad donde iran quedando todos los archivos PDF.

miércoles, 21 de abril de 2010

CONTROLAR DOS COMBOBOX O VARIOS COMBOBOX DENTRO DE UN DATAGRIDVIEW



Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.

 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.

www.artprogramnet.wordpress.com
Cuando tenemos dos o mas controles de tipo combobox en un datagridview, nos puede ocurrir que tengamos que ocupar el evento SelectedValueChanged del combo para realizar alguna acción, como puede ser: validar algo, colocar valores en otra columna etc,etc. OJO, pero resulta que si creamos un evento de tipo SelectedValueChanged (lo tenemos que crear manualmente, puesto que no existe este evento en un combobox dentro de un datagridview), lo que sucede es que cuando es mas de un combo en nuestro grid se dispara el mismo evento para TODOS los combos. La solución es saber el nombre del combo que necesita el evento. Supongamos que tenemos dos combobox en un grid, uno trae los articulos y otro el tipo de descuento para ese articulo. Cuando ocupamos el combo de articulos, necesitamos agregar ciertos valores al grid y cuando ocupamos el combo de tipo de descuento no necesitamos hacer nada, unicamente seleccionar. Por lo tanto creamos un evento para combo articulos. Para eso ocupamos el evento del grid EditingControlShowing de la manera siguiente.
‘Nuestro grid se llama dgdetalles
Private Sub Dgdetalles_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgdetalles.EditingControlShowing
‘validamos si el control que se esta editanos es un combo
If e.Control.GetType Is getType(DataGridViewComboBoxEditingControl) Then
‘obtenemos el nombre del combo en una variable para decidir si creamos el evento o no
Dim cNombreCbo As String = dgdetalles.Columns(Me.dgdetalles.CurrentCellAddress.X).Name
‘validamos que el nombre del combo sea el de articulos Nota:si fuera ‘el de combo de tipo de precio no necesito crear ningun evento
If cNombreCbo = "cboNombreArt" Then
‘asignamos el control que nos interesa a una variable, esta variable ‘debe estar declarada como private
m_comboBox = DirectCast(e.Control, ComboBox)
' Instalamos el controlador para el evento SelectedValueChanged
‘y lo direccionamos a ComboBoxOnSelectedValueChanged
AddHandler m_comboBox.SelectedValueChanged, _
AddressOf ComboBoxOnSelectedValueChanged
End If ‘fin de añadir evente
End If ‘fin de validar si el control es de tipo combobox
End Sub

‘aquí viene la rutina de lo que deseamos hacer para el combo de ‘articulos
Private Sub ComboBoxOnSelectedValueChanged( _
ByVal sender As Object, ByVal e As EventArgs)

' Referenciamos el control ComboBox que ha
' desencadenado el evento.
Dim cb As ComboBox = DirectCast(sender, ComboBox)
' Obtenemos el valor de su propiedad ValueMember
Dim valorseleccionado As Object = cb.SelectedValue
‘si deseamos ocupar el valor seleccionado, lo podemos poner en ‘el mismo grid o en cualquier otro lugar que se desee
‘en este caso particular lo coloco en otra columna llamada valor dgdetalles.Rows(dgdetalles.CurrentRow.Index).Cells("valor").Value = valorseleccionado.ToString
‘tambien grabo la orden de compra que se encuentra en una variable dgdetalles.Rows(dgdetalles.CurrentRow.Index).Cells("Orden").Value = sOrdCompra
End sub
‘en el rowvalidating eliminamos el evento creado '
Private Sub dgdetalles_RowValidating( _
ByVal sender As Object, _
ByVal e As DataGridViewCellCancelEventArgs) _
Handles dgdetalles.RowValidating
‘validamos que el m_combobox tenga algun valor para eliminar el evento
If m_comboBox IsNot Nothing Then
' Desinstalamos el controlador de eventos
RemoveHandler m_comboBox.SelectedValueChanged, _
AddressOf ComboBoxOnSelectedValueChanged
End If
End Sub
Si conocen alguna otra tecnica para resolver el manejo de varios combos en un datagridview, no duden en enviarmela para compartirla. Saludos

viernes, 2 de abril de 2010

Eliminar fila seleccionada datagridview con SUPR, actualizar valor o stock en el evento UserDeletingRow y si es maestro/detalle eliminar datatable

 Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.
 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.

 www.artprogramnet.wordpress.com
Un problema común es el siguiente:
Eliminar maestro/detalle con código con SUPR, en donde el maestro y detalle están en diferente datagridview, y actualizar un valor cualquiera, que puede ser: Restar un valor a un stock o factura.
Para Eliminar fila seleccionada de un datagridview con SUPR¨— la propiedad ALLOWUSERTODELETEDROWS debe estar como True—
El evento que se produce es UserDeletingRow
Suponiendo que tenemos dos datagridview, en uno tenemos los articulos(maestro) y en otro las fechas en que se vendieron(detalle). Lo que deseamos es que al borrar el articulo se actualice el total de ventas,
Podemos usar la siguiente rutina

Private Sub dgarticulos_UserDeletingRow(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewRowCancelEventArgs) Handles dgarticulos.UserDeletingRow
‘ponemos una variable en donde vendra el total de ventas de ese ‘articulo
Dim valprecio As Single = CType(e.Row.Cells("totprecio").Value, Single)
‘variable para colocar la clave del articulo a borrar
Dim scveart As String = e.Row.Cells("cveart").Value.tostring
‘preguntamos si realmente se desea borrar, ya que el usuario puede haber oprimido la tecla SUPR por equivocación
Dim respuesta As Integer
respuesta = MessageBox.Show("Deseas borrar este articulo?" & sgpoborrar, "Borrar Articulo", _
MessageBoxButtons.YesNo, _
MessageBoxIcon.Question, _
MessageBoxDefaultButton.Button2)
If respuesta = DialogResult.Yes Then
‘si queremos eliminar el registro e.cancel debe ser false
e.Cancel = False
‘aquí restamos el valor de las ventas del articulo eliminado
txtsuma.Text = CType((Val(txtsuma.Text) - valprecio), String)
'borra todos los elementos del datatable de fechas de venta que coincidan con este articulo
‘primero hacemos un filtro de la tabla donde estan las fechas de venta
Dim dv As DataView = New DataView(dtabfechasart)
Dim str As String = String.Empty
str = "cveart ='" & scveart & "'"
dv.RowFilter = str
‘recorremos la el dataview para marcar todas las fechas de venta para ese articulo como borradas
For i = dv.Count - 1 To 0 Step -1
dv.Delete(i)
Next
Else
‘si el usuario no desea borrar
e.Cancel = True
End If
End Sub.

‘al final, ya sea cuando vayan a grabar los datos a la base de datos en forma definitiva recuerden ocupar update y acceptchanges
Como en el siguiente ejemplo
‘maestro
daarticulos.Update(datarticulos)
datarticulos.AcceptChanges()
‘detalles
dafechasart.Update(dtabfechasart)
dtabfechasart.AcceptChanges()
Cualquier comentario es bienvenido