Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - anmaroso

Páginas: [1] 2
1
Hola, Alex:

Buenos días.

Al final después de tanto tiempo encontré el error .Estaba en que uno de los registros de la base de datos no se actualizaba porque el registro estaba corrupto, no se solucionaba compactando la base de datos por eso he tardado tanto en descubrirlo, ha sido borrar el registro y actualizar bien.

Muchas gracias por tu comprensión.

Saludos.

2
Aprender a programar desde cero / Re:No me actualiza la base de datos.
« en: 17 de Noviembre 2015, 12:33 »
Hola Alex, buenos días:

He ido a los enlaces que me indicaste y no encontré la solución. Después de mucho indagar he logrado que me actualice todos los registros modificados a excepción del primero de la base de datos que no encuentro la manera.

Te paso el código a ver dónde falla.

Código: [Seleccionar]

Imports System
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.DataRow

Public Class FPTRANSF2
    Dim cnn As New OleDb.OleDbConnection
    Dim cnnm As New OleDb.OleDbConnection
    Dim da As New OleDb.OleDbDataAdapter
    Dim daf As New OleDb.OleDbDataAdapter
    Dim dt As DataTable
    Dim dtf As DataTable
    Dim ds As DataSet
    Dim vffp As DateTime
    Dim de As New BindingSource
    Public vfs1 As Single
    Public vfi1 As Integer
    Dim col As Double
    Dim col1 As String
    Dim col2 As Date
    Dim col3 As Integer
    Private Sub FPTRANSF2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        vffp = FPTRANSF.vffp
        Dim cb As New OleDbCommandBuilder(da)
        cnn = New OleDb.OleDbConnection
        cnn.ConnectionString = strcon
        cnnm = New OleDb.OleDbConnection
        cnnm.ConnectionString = strcon
        Dim consulta As String
        Dim consulta1 As String
        If vffp = Nothing Then '> vgfi Then
            MsgBox("Fecha no seleccionada ")
        Else
            Me.B1.Visible = True
            Me.B2.Visible = True
            MsgBox("Fecha seleccionada " & vffp)

        End If

        consulta = "SELECT TFACTURASR.VENCIMIENTO, TPROVEEDORES.NOMBRE, " & _
                   "TFACTURASR.IMPORTE, TFACTURASR.IMPORTET, " & _
                   "TFACTURASR.FACTURANR, TFACTURASR.FECHAE, " & _
                   "TFACTURASR.FACTURANE, TFACTURASR.CONCEPTOP, " & _
                   "TFACTURASR.FECHAP, TFACTURASR.CLAVE " & _
                   "FROM TPAGO INNER JOIN (TPROVEEDORES INNER JOIN " & _
                   "TFACTURASR ON TPROVEEDORES.CLAVE = TFACTURASR.CPROVEEDOR) " & _
                   "ON TPAGO.CLAVE = TFACTURASR.FPAGO " & _
                   "WHERE (((TPROVEEDORES.NOPAGAR)= FALSE) AND " & _
                   "((TFACTURASR.NOPAGAR)= FALSE) AND  " & _
                   "((TFACTURASR.IMPORTET)= 0) AND " & _
                   "((TFACTURASR.FECHAP)<= Datevalue('" & vgfi & "')) AND " & _
                   "((TFACTURASR.PAGADA)= FALSE) AND " & _
                   "((TFACTURASR.FPAGO) LIKE '4%') AND " & _
                   "((TFACTURASR.VENCIMIENTO) = Datevalue('" & vffp & "'))) " & _
                   "ORDER BY TPROVEEDORES.NOMBRE"


        da = New OleDb.OleDbDataAdapter(consulta, cnn)
        ds = New DataSet
        dt = New DataTable
        da.Fill(dt)

        ds.Tables.Add(dt)

        consulta1 = "SELECT IMPORTET, CONCEPTOP, FECHAP, CLAVE FROM TFACTURASR " & _
                    "ORDER BY CLAVE"
        daf = New OleDb.OleDbDataAdapter(consulta1, cnnm)

        dtf = New DataTable
        daf.Fill(dtf)

        If dt.Rows.Count > 0 Then
            preparartransferencia()
        Else
            MsgBox("sigue")
            prepararfichero()
        End If


    End Sub

    Private Sub preparartransferencia()
     
        DG1.DataSource = dt

        Dim vmt1 As String
        Dim vmt2 As String
        Dim vms1 As Single
        Dim fila As Integer = 0
        While fila <= dt.Rows.Count - 1
            vmt1 = DG1.Rows(fila).Cells(1).Value
            vmt1 = dt.Rows(fila)(1)
            vms1 = 0.0
            vmt2 = ""
            Do While dt.Rows(fila)(1) = vmt1 And fila <= dt.Rows.Count - 1
                vms1 = vms1 + dt.Rows(fila)(2)
                If vmt2 = "" Then
                    vmt2 = dt.Rows(fila)(6)
                Else
                    vmt2 = vmt2 & "," & dt.Rows(fila)(6)
                End If
                dt.Rows(fila)(8) = dt.Rows(fila)(0)
                If fila = dt.Rows.Count - 1 Then
                    dt.Rows(fila)(3) = vms1
                    dt.Rows(fila)(7) = vmt2
                    vfs1 = vfs1 + vms1
                    Exit While
                Else
                    If fila < dt.Rows.Count - 1 Then
                        fila = fila + 1
                    End If
                End If
            Loop
            If fila <= dt.Rows.Count - 1 Then
                fila = fila - 1
                dt.Rows(fila)(3) = vms1
                dt.Rows(fila)(7) = vmt2
                vfs1 = vfs1 + vms1
                fila = fila + 1
            End If
        End While

       
        For Each row As DataRow In dt.Rows
            If row.RowState = DataRowState.Modified Then
                col = row.Item("IMPORTET")
                col1 = row.Item("CONCEPTOP").ToString
                col2 = row.Item("FECHAP")
                col3 = row.Item("CLAVE")
             
                Dim consultam As String
                consultam = "UPDATE TFACTURASR SET IMPORTET = ('" & col & "'), " & _
                            "CONCEPTOP = ('" & col1 & "'), " & _
                            "FECHAP = Datevalue('" & col2 & "') " & _
                            "WHERE (CLAVE) = (" & col3 & ") "

                Try
                    If (Not cnnm Is Nothing) Then
                        cnnm.Close()
                    End If
                    cnnm.Open()
                    Dim cmd As New OleDbCommand(consultam, cnnm)

                    cmd.ExecuteNonQuery()
                    dtf.AcceptChanges()


                Catch ex As Exception
                    MessageBox.Show("No ha actualizado bien")

                End Try

            End If
        Next
    End Sub



Perdona por mi atrevimiento ya que soy muy novato pero pienso que pudiera ser porque se tratase del último registro del bucle de los modificados.

Te agradecería si puedes revisarlo a ver si hay errores.

Gracias y saludos.

3
Hola, Alex. Buenos días:

El curso ya lo estoy haciendo, voy por la lección 25. Seguiré con él.

Muchas gracias y saludos.

4
Buenos días y saludos para tod@s.

Sumar los registros de una columna (Importe) que tengan el mismo valor de otra columna (nombre) y poner el valor de la suma en el último registro de mismo (nombre) en la columna (total). Lo mismo que agrupar por (nombre).

Paso el código.

Código: [Seleccionar]

 da.Fill(dt)
        ds.Tables.Add(dt)

        Dim vmi1 As Integer
        Dim vmt1 As String
        Dim vmt2 As String
        Dim vms1 As Single
        Dim vms2 As Single
        Dim fila As Integer = 0


        While fila <= dt.Rows.Count - 1
            vmt1 = dt.Rows(fila)(1)
            vms1 = 0.0
            vmt2 = ""
            Do While dt.Rows(fila)(1) = vmt1 And fila <= dt.Rows.Count - 1
                vms1 = vms1 + dt.Rows(fila)(2)
                If vmt2 = "" Then
                    vmt2 = dt.Rows(fila)(6)
                Else
                    vmt2 = vmt2 & "," & dt.Rows(fila)(6)
                End If
                dt.Rows(fila)(8) = dt.Rows(fila)(0)

                If fila = dt.Rows.Count - 1 Then
                    dt.Rows(fila)(3) = vms1
                    dt.Rows(fila)(7) = vmt2
                    vms2 = vms2 + vms1
                    Exit While
                Else
                    If fila < dt.Rows.Count - 1 Then
                        fila = fila + 1
                    End If
                End If
            Loop
            If fila < dt.Rows.Count - 1 Then
                fila = fila - 1
                dt.Rows(fila)(3) = vms1
                dt.Rows(fila)(7) = vmt2
                vms2 = vms2 + vms1
                fila = fila + 1
            End If
        End While


dt es un DataTabla.

He estado dándole mil vueltas y no lo conseguía . Ya sé que esta forma es a la antigua usanza... muy rudimentaria pero es de la única manera que lo he logrado.

No sé si habrá alguna forma de hacerlo más práctico y con menos código. Lo he intentado con el Grouping y no me funcionó, viene casi todo con Query y yo uso Acces.

De todas formas ahí queda por si le sirve a alguien.

Gracias y saludos.

5
Buenos días.

No me actualiza la base de datos con Visual Basic. Paso el código.

Código: [Seleccionar]

 If ds.HasChanges Then
            Try
                Me.Validate()
                dt.AcceptChanges()
                da.Update(dt)
                MsgBox("datos actualizados")
            Catch ex As Exception
                MsgBox("Update failed")
            End Try

            MsgBox(vms2)
        Else
            MsgBox("No hay modificación de registros")
        End If


dt es la tabla  Dim dt As DataTable
   
da el OleDbDataadapter Dim da As New OleDb.OleDbDataAdapter

Lo intento de mil maneras y no lo logro. algo hago mal pero no lo veo.


Gracias y Saludos.

6
Hola Alex. Buenos días.

Las vfi1 y demás vf son variables que en algún sitio he leído que se tienen que entrecomillar para este tipo de clases de XML. No sé si debe de ser así.
Probaré quitando las comillas que lo cierto es que es más lógico y correcto.

Gracias y saludos.

7
Hola Alex, buenos días.

Perdona por la tardanza en contestar pero es que ayer no estuve con el ordenador.

Te copio un fichero XML

Código: [Seleccionar]

<?xml version="1.0" encoding="utf-8" ?>
<CstmrCdtTrfInitn>

  <GrpHdr>
     
    <MsgId>FTRANSF_E.vft13</MsgId>
    <CreDtTm></CreDtTm>
    <NbOfTxs></NbOfTxs>
    <CtrlSum></CtrlSum>

  </GrpHdr>
   
</CstmrCdtTrfInitn>

______________________________________

Public Class GrpHdr ' cabecera
    Public MsgId As String, Length(35)
    Public CreDtTm As String       '   , Length(19)
    Public NbOfTxs As Integer
    Public CtrlSum As Single, format("##,##0.00")

    Public Sub New(ByVal MsgId As String, ByVal CreDtTm As String, _
     ByVal NbOfTxs As Integer, ByVal CtrlSum As Single)
        Me.MsgId = "vft16"     ' MsgId
        Me.CreDtTm = "vft14"  'CreDtTm
        Me.NbOfTxs = "vfi1"       '   NbOfTxs
        Me.CtrlSum = "vfs1"     'CtrlSum
    End Sub

End Class


En el primer caso en la etiqueta MsgId debe de ir el valor de una variable que en  sería la vft13 que está en el formulario FTRANSF. Luego hay otras etiquetas con valores de una tabla de datos. Además hay etiquetas que se validarían con condicionantes. Este fichero creo que se haría por WRITER.

Pero he leído algo de que se pueden hacer más sencillo por clases, te paso en el segundo caso, algo que intento pero que me pasa lo mismo no coge el valor de la variable. Además habría que serializar estas clases.

Gracias y saludos.

8
Hola a tod@s, buenos días.

Tengo un fichero XML con todas las etiquetas bien esquematizadas.

Mi pregunta es cómo paso valores a las que lo requieren. o qué método es más sencillo para emitir ese fichero.

He leído que se puede hacer por WRITER o por diseño XLS pero la verdad es que no sé como seguir después de ordenar todas las etiquetas.

 Agradecería cualquier tipo de información al respecto.

Saludos.

9
Hola, Alex.

Buenos días.

Gracias por contestar y estando de acuerdo a lo que comentas para el buen funcionamiento del foro iniciaré otro post con el tema del XML.

En cuanto al tema principal, me ha funcionado de una forma más resumida de la siguiente forma:

 Dim fecha As DateTime = Now()
        Dim strf As String

        strf = Format(fecha, "yyy-MM-ddTHH:mm:ss")
        MsgBox(strf)

10
Hola, Alex, gracias por contestar.

De momento el de 2015 no lo voy a poder instalar no tengo tanta memoria RAM. Ando con un portátil viejo y se nota, y es que esto de querer aprender ya de jubilado tiene sus pegas pero como es por hobby tampoco me voy a liar a comprar uno nuevo, al menos de momento.

Saludos.

11
Hola, Alex, buenas tardes.

En el enlace que me pones es para efectuar las transferencias en formato txt, pero a partir de febrero del 2016 han de efectuarse todas con formato XML y en las instrucciones para este formato indica lo siguiente:


1.2 Fecha y hora de creación - CreationDateTime
Definición: Fecha y hora cuando la parte iniciadora ha creado un (grupo de) instrucciones de pago.
Etiqueta XML: <CreDtTm>
Ocurrencias: [1..1]

Formato: ISODateTime YYYY-MM-DDThh:mm:ss (Año-mes-día)

Ejemplo: 10 de junio de 2010, a las 08:35 horas y 30 segundos.
<CreDtTm>2010-06-10T08:35:30</CreDtTm>


Entonces yo suponía que ese formato se podía conseguir aplicando un Format puesto que en  MSDN en los formatos de fecha viene ese formato con la T. Lo cierto es que llevo indagando ya días y no veo nada al respecto.

Pensaba preguntar el cómo iniciarse un fichero XML, ya tengo en un XML todas las etiquetas esquematizadas para hacer el SEPA de transferencias antes de que empiece la obligación de presentarlas con ese formato. Lo que no entiendo es como dar valor a las etiquetas que lo requieren. He leído que por WRITER, otros que con un diseñador que tiene el VB NET.... en fin que no sé ni cómo empezar.

Muchas gracias por tu interés y saludos.

12
Hola, buenos días:

¿Sabes si está en español?
¿Se puede instalar a la vez que el visual studio 2008?

Gracias y saludos.

13
Hola Alex.

Buenos días.

El enlace que pusiste no me funcionó porque era para SQLServer y yo uso el Access.

Después de buscar mucho, al fin, encontré la solución a la consulta. La pongo a continuación por si es de utilidad a alguien.

Código: [Seleccionar]

 "WHERE (((TPROVEEDORES.NOPAGAR)=0) AND " & _
                                        "((TFACTURASR.NOPAGAR)=0) AND " & _
                                        "((TFACTURASR.FPAGO) Like '4%') AND " & _
                                        "((TFACTURASR.VENCIMIENTO) = Datevalue('" & vpf1 & "'))) "



Con Datevalue('" & vpf1 & "') ya me funciona la consulta, vpf1 es una variable de tipo DateTime.

Ahora me surge otro problema con los formularios, que ya me pasó con el de MENU.

Si ejecuto la aplicación desde el formulario que contiene la consulta funciona bien, pero si la ejecuto desde el FINICIO>>>>MENU ya no funciona y no es por la consulta sino por el formulario.

La verdad es que ya no entiendo nada.

14
Buenos días.

Solución que le he dado: Hacer nuevos formularios y a funcionar.

No entiendo el motivo pero hay que seguir adelante.

Saludos.

15
Muchas gracias Alex.

Lo voy a consultar.

16
Hola, Alex, buenos días.

Estoy con Visual Basic NET.

Es formato es requerido para hacer transferencias SEPA,es ISO dateTime o algo asi.

Gracias y saudos

17
Hola Mastermind, buenos días.

Me refiero a una variable que está en un formulario y quiero pasar su valor a otro formulario.
El problema está en que me funcionaba y de repente deja de funcionar.
El pase de valores de variables entre formularios lo hago entre otros formularios y lo hace bien. Yo creo que el problema está en el FTRANSF_C_Load pero no lo consigo encontrar.

Paso el código por si ven el error.

Del primer formulario

Código: [Seleccionar]

Public Class FTRANSF
    Public vff As Date
    Public V1 As Integer

    Private Sub FTRANSF_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'TODO: esta línea de código carga datos en la tabla 'GESTIONDataSet1.CVFR1' Puede moverla o quitarla según sea necesario.
        Me.CVFR1TableAdapter.Fill(Me.GESTIONDataSet1.CVFR1)
    End Sub
    Private Sub BS_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BS.Click
        Me.Close()
    End Sub
    Private Sub DG1_CellDoubleClick(ByVal sender As  _
                System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
                Handles DG1.CellDoubleClick
        vff = DG1.SelectedCells(0).Value
        V1 = DG1.SelectedRows.Count
        If DG1.SelectedRows.Count > 0 Then
            MsgBox("Registros " & V1)
            MsgBox("Fecha seleccionada " & vff)
        End If
    End Sub

    Private Sub B2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B2.Click
        FTRANSF_C.Show()
    End Sub
End Class


Del segundo formulario

Código: [Seleccionar]

Public Class FTRANSF_C
    Public vff As Date
    Public V1 As Integer
    Public Const vgf As Date = #1/1/1001#
    Dim strcnn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                           "Data Source=C:\GESTION\GESTION.mdb"

    Private Sub FTRANSF_C_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        '    Private Sub FTRANSF_C_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.vff = FTRANSF.vff
        Me.V1 = FTRANSF.V1
        FTRANSF.Close()
        MsgBox("Fecha seleccionada " & vff, 1)
        MsgBox(V1)
    End Sub

    Private Sub BS_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BS.Click
        Me.Close()
    End Sub

    Private Sub B2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B2.Click
        FTRANSF_B.Show()
    End Sub
End Class


18
Buenas tardes.

Gracias por contestar, lo que me pasa es que es una consulta en la que el Where compara un campo de la tabla con una variable y aquí es donde me falla pues no sé donde poner la variable ya que no me muestra registros.

Gracias y saludos.

19
Buenos días.

¿Es posible formatear la fecha de forma que el valor sea 2015-14-10T10:34:23.

(date1.ToString("s")) así no me funciona.

Gracias y saludos.

20
Hasta hace poco me funcionaba pero no sé que he hecho que ya no funciona y sin el valor de la variable no me deja seguir.

Paso el código por si hay alguna solución.

Código: [Seleccionar]
Public Class FTRANSF_C
    Public vff2 As Date
    Public Const vgf As Date = #1/1/1001#
    Dim strcnn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                           "Data Source=C:\GESTION\GESTION.mdb"
    Private Sub FTRANSF_C_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        vff2 = FTRANSF.vff
        MsgBox("Fecha seleccionada " & vff2, 1)
        FTRANSF.Close()

        vencimiento(vff1:=vff2)
        'DG1.DataSource = dst.Tables("Vencimientos").DefaultView
        'Dim vpi As Integer
        'vpi = DG1.RowCount
        'If vpi = 0 Then
        ' Dim vpt As String
        'Dim vpt1 As String
        ' Dim vpd As Single
        'Dim vpi1 As Integer = 0
        'For i = 1 To vpi
        'vpt = DG1.Rows(vpi1).Cells(1).Value
        '       While DG1.Rows(vpi1).Cells(1) = vpt
        '      End While
        'Next
        'DG1.Name = "Listado de Vencimientos"
        ' DG1.ReadOnly = True
        'DG1.DataSource = dst.Tables("Vencimientos").DefaultView
        'If DataRow = 0 Then 'DG1.RowCount = 0 Then
        'MsgBox("NO HAY REGISTROS")
        'Else
        'MsgBox("Si")
        'End If
        'End If
    End Sub

    Private Sub vencimiento(ByVal vff1 As Date)
        vff1 = vff2
        If vff1 > vgf Then
            Dim conexion As OleDb.OleDbConnection = _
            New OleDb.OleDbConnection(strcnn)
            Dim adaptador As OleDb.OleDbDataAdapter = _
            New OleDb.OleDbDataAdapter("SELECT TFACTURASR.VENCIMIENTO, " & _
                     "TPROVEEDORES.NOMBRE,TFACTURASR.IMPORTE,TFACTURASR.IMPORTET," & _
                     "TFACTURASR.FACTURANE,TFACTURASR.CONCEPTOP,TFCTURASR.FECHAE," & _
                     "TFACTURASR.FACTURANR,TFACTURASR.FECHAP " & _
                     "FROM TFACTURASR INNER JOIN TPROVEEDORES ON " & _
                     "TPROVEEDORES.CLAVE = TFACTURASR.CPROVEEDOR " & _
                     "WHERE TFACTURASR.VENCIMIENTO = # " & Format(vff1, "MM/DD/YYYY") & " # " & _
                     "AND TFACTURASR.NOPAGAR = 0 AND TFACTURASR.PAGADA = FALSE " & _
                     "AND TPROVEEDORES.NOPAGAR = 0 AND TFACTURASR.FPAGO LIKE '" & 4 & "%'" & _
                     "ORDER BY TFACTURASR.VENCIMIENTO, TPROVEEDORES.NOMBRE", conexion)

            Dim dst As DataSet = New DataSet
            Try
                conexion.Open()
                adaptador.Fill(dst, "Vencimientos")
                DG1.Name = "Listado de Vencimientos"
                'DG1.ReadOnly = True
                DG1.DataSource = dst.Tables("Vencimientos").DefaultView
                If DG1.RowCount = 0 Then
                    MsgBox("NO HAY REGISTROS")
                Else
                    MsgBox("Si")
                End If
                '  Vencimientos = dst.Tables(0)
            Catch ex As OleDb.OleDbException
                MsgBox("se ha producido una excepción: " + ex.Message, 16, Me.Text)
            Finally
                conexion.Close() 'conexion.Dispose()adaptador.Dispose(dst.Dispose())
            End Try
        End If
    End Sub

    Private Sub BS_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BS.Click
        Me.Close()
    End Sub

End Class

Páginas: [1] 2

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".