none
ajustar recorset RRS feed

  • Pregunta

  • Buenos Dias colesgas, tengo el siguiente codigo en Visual Basic 6.0 con sql server

    sql = "select  a.fec_emis, a.co_cli, left(Rtrim(Ltrim(b.campo5)),11), sum (a.tot_neto) as tot_neto1 from factura a inner join clientes b on a.co_cli = b.co_cli left join sms_enviados c on a.fact_num = c.fact_num where    b.campo5 <>'' and len(Rtrim(Ltrim(b.campo5))) = '11' and (c.status = '' or c.status is null) and a.fec_emis = 'jun 01 2012'  group by   a.co_cli, left(Rtrim(Ltrim(b.campo5)),11), a.fec_emis"
    Rs.Open sql, g_db, adOpenKeyset

    sql1 = "select  a.fact_num, a.fec_emis, a.co_cli, b.campo5 from factura a inner join clientes b on a.co_cli = b.co_cli left join sms_enviados c on a.fact_num = c.fact_num where b.campo5 <>'' and a.fec_emis = 'jun 01 2012' and (c.status = '' or c.status is null)"
    rs1.Open sql1, g_db, adOpenKeyset

    If Hora = "09:22:00 a.m." Then
    g_db.Execute sql


          Do While Not Rs.EOF
          
           If Not IsNull(Rs.Fields.Item(0).Value) Then
              mensaje = "Ha sido despachada de DISTORBERA La tornilleria, la(s) factura(s) por un monto Total de " & Rs.Fields.Item(3).Value & " BsF de la fecha " & Rs.Fields.Item(0).Value & ". Visitenos por www.distorbera.com/"
               End If
               
               If Not IsNull(Rs.Fields.Item(0).Value) Then
             Enviarsms "distorsistemas", "123", Rs.Fields.Item(2).Value, mensaje

               End If
                
                Rs.MoveNext
      Loop
           
       g_db.Execute sql1
            Do While Not rs1.EOF         
             If Not IsNull(rs1.Fields.Item(0).Value) Then  
             sql2 = "insert into sms_enviados (status, numero_envio, co_cli, fecha_envio, hora_envio, texto_mensaje, fact_num) values ('enviado','" & rs1.Fields.Item(3).Value & "','" & rs1.Fields.Item(2).Value & "','" & Date & "', '" & Time & "','" & mensaje & "', '" & rs1.Fields.Item(0).Value & "' )"
                  g_db.Execute sql2      
            End If
                rs1.MoveNext
         Loop
       rs1.Close
       Rs.Close

    End If

    Este se encarga de envio de sms y los datos enviados guardarlos en la bd, utilizo dos select ya que en uno tomo solo la suma total de todas las facturas emitidas por un cliente y en el otro traigo los datos de cada uno de los clientes por separado para guardarlos en el insert. Ok el codigo envia el sms perfecto solo que tengo un problema con el recorset que no me esta colocando en el mensaje de texto que envia el valor total de cada cliente sino que me toma el ultimo valor nada mas, es decir este es el mensaje de texto:

    Ha sido despachada de ...., la(s) factura(s) por un monto Total de 229.49 BsF de la fecha 22/06/2012. Visitenos por www.distorbera.com/

    ese monto lo coloca en todos los sms que envie al momento, tiende  siempre a ser el ultimo valor de los datos que me trae el primer select, alguien que pueda orientarme y marcarme donde tengo el error el por que el recorset no me esta haciendo el ciclo¿?¿?

    lunes, 25 de junio de 2012 14:12

Todas las respuestas

  • Hola estoy analizando tu codigo, lo que estoy viendo es

          left(Rtrim(Ltrim(b.campo5)),11)

    no es lo mismo si empleas esto

          LEFT(TRIM(b.campo5),11)

    Aunque esto no es el problema.

    Sigo analizando

    Saludos




    • Editado ToniAG lunes, 25 de junio de 2012 15:26
    lunes, 25 de junio de 2012 15:06
  • ok la idea es que me tome los costos de todos los registros y solo me toma el ultimo, las sentencias en sql cumplen su funcion perfecta todo se complica es a la hora de visual el recorset no me esta tomando todos los valores
    lunes, 25 de junio de 2012 15:38
  • Hola prueba a sin a ver:  

    Do While Not Rs.EOF
                    If Not IsNull(Rs.Fields.Item(0).Value) Then
                        mensaje = "Ha sido despachada de DISTORBERA La tornilleria, la(s) factura(s) por un monto Total de " & Rs.Fields.Item(3).Value & " BsF de la fecha " & Rs.Fields.Item(0).Value & ". Visitenos por www.distorbera.com/"
                    End If
                    If Not IsNull(Rs.Fields.Item(0).Value) Then
                        Enviarsms("distorsistemas", "123", Rs.Fields.Item(2).Value, mensaje)
                    End If
                    g_db.Execute(sql1)
                    Do While Not rs1.EOF
                        If Not IsNull(rs1.Fields.Item(0).Value) Then
                            sql2 = "INSERT INTO sms_enviados (status, numero_envio, co_cli, fecha_envio, hora_envio, texto_mensaje, fact_num)" & _
                                  " VALUES ('enviado','" & rs1.Fields.Item(3).Value & "','" & rs1.Fields.Item(2).Value & "','" & Date & "', '" & Time & "','" & mensaje & "', '" & rs1.Fields.Item(0).Value & "' )"
                            g_db.Execute(sql2)
                        End If
                        rs1.MoveNext()
                    Loop
                    Rs.MoveNext()
                Loop
    Pero creo que tampoco, es que me pierdo, si puedes explicar mejor, con mas detalles

    • Editado ToniAG lunes, 25 de junio de 2012 15:41
    lunes, 25 de junio de 2012 15:39
  • Ok supongamos que tenemos para la fecha de hoy las siguientes facturas

    co_cli     fact_num   tot_neto    campo5

    001         120             152.03     0414236563

    548          121            485.32      04125698966

    548          122             340.23     04125698966

    ok los datos del cliente 548 se me repiten a ellos se les envian los sms y preferi optar por sumarle las facturas q tiene el cliente para solo mandarle un mensaje con el costo total de las facturas que haya adquirido.

    El primer select me trae los datos para el envio del sms

    El segundo select me trae los datos para guardarlos en la bd

    Lo realize de estas dos maneras ya que el primer select me trae monto total de las facturas y no me puedo traer el numero de la factura por esta misma razon y necesito el numero de la factura para poder pasarme a la tabla sms_enviados y verificar si a sido enviado o no el sms. El hecho es que me trae solo una ves el cliente por todos sus pedidos, peeeero en ves de anexarle el costo total de cada uno no lo hace y me toma el ultimo valor es decir para el caso del ejemplo anterior me guarda en la bd solo dos pero todos en el mensaje con 340.23 bsf y la idea es que cada uno tenga su propio valor

    lunes, 25 de junio de 2012 16:19
  • Los sms los manda bien, con sus valores correctamente.

    Creo que tendria que ser de esta manera, segun entiendo

    If Not IsNull(Rs.Fields.Item(0).Value) Then mensaje = "Ha sido despachada de DISTORBERA La tornilleria, la(s) factura(s) por un monto Total de " & Rs.Fields.Item(3).Value & " BsF de la fecha " & Rs.Fields.Item(0).Value & ". Visitenos por www.distorbera.com/" Enviarsms "distorsistemas", "123", Rs.Fields.Item(2).Value, mensaje
    ' Aqui guardamos, el INSERT
    End If

    por que tu recorres todos los registros y cuando llegas a

     g_db.Execute sql1

    Creas todos los INSERT con el ultimo mensaje


    • Editado ToniAG lunes, 25 de junio de 2012 16:33
    lunes, 25 de junio de 2012 16:33
  • Creo que tendria que ser a sin

        ' agrupamos las facturas del mismo cliente
        sql = "SELECT a.fec_emis, a.co_cli, LEFT(TRIM(b.campo5),11), SUM(a.tot_neto) AS tot_neto1" & _
             " FROM factura a" & _
             " INNER JOIN clientes b ON a.co_cli = b.co_cli" & _
             " LEFT JOIN sms_enviados c ON a.fact_num = c.fact_num" & _
             " WHERE b.campo5 <>'' AND LEN(TRIM(b.campo5)) = '11' AND (c.status = '' OR c.status IS NULL) AND a.fec_emis = 'jun 01 2012'" & _
             " GROUP BY a.co_cli, LEFT(TRIM(b.campo5),11), a.fec_emis"
        rs.Open sql, g_db, adOpenKeyset
            
        If Hora = "09:22:00 a.m." Then
                
            ' recorremos todos los registro agrupados
            Do While Not rs.EOF
              
                If Not IsNull(rs.Fields.Item(0).Value) Then
                
                    mensaje = "Ha sido despachada de DISTORBERA La tornilleria, la(s) factura(s) por un monto Total de " & rs.Fields.Item(3).Value & " BsF de la fecha " & rs.Fields.Item(0).Value & ". Visitenos por www.distorbera.com/"
                    Enviarsms "distorsistemas", "123", rs.Fields.Item(2).Value, mensaje
                    
                    'desglosamos el actual registro
                    sql1 = "SELECT a.fact_num, a.fec_emis, a.co_cli, b.campo5" & _
                          " FROM factura a" & _
                          " INNER JOIN clientes b ON a.co_cli = b.co_cli" & _
                          " LEFT JOIN sms_enviados c ON a.fact_num = c.fact_num" & _
                          " WHERE b.campo5 <>'' AND (c.status = '' OR c.status IS NULL)" & _
                                " AND a.fec_emis = 'jun 01 2012' AND a.co_cli = " & rs(1).Value
                                
                    rs1.Open sql1, g_db, adOpenKeyset
                                
                    Do While Not rs1.EOF
                        
                        sql2 = "INSERT INTO sms_enviados" & _
                               " (status, numero_envio, co_cli, fecha_envio, hora_envio, texto_mensaje, fact_num)" & _
                               " VALUES ('enviado','" & rs1.Fields.Item(3).Value & "','" & rs1.Fields.Item(2).Value & "','" & Date & "', '" & Time & "','" & mensaje & "', '" & rs1.Fields.Item(0).Value & "' )"
                        
                        g_db.Execute sql2
                        
                        rs1.MoveNext
                        
                    Loop
                    
                End If
                    
                rs.MoveNext
            Loop
                         
            rs1.Close
            rs.Close
        End If

    lunes, 25 de junio de 2012 17:17