Usuario
ajustar recorset

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, mensajeEnd 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 IfEste 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¿?¿?
Todas las respuestas
-
-
-
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
-
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
-
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 Ifpor 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
-
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