Problema al imprimir un registro nuevo

Hola expertos,
Tengo un problema al querer imprimir un registro "que se acaba de grabar". El mismo código empleado com un registro ya grabado con anterioridad funciona correctamente pero cuando lo intento hacer un un registro que se acaba de grabar no me funciona siempre (a veces si a veces no)
Este es el código
Private Sub Impr_sor_Click()
CrystalReport1.ReportFileName = App.Path & "\inf_reg_sortida.rpt"
RegistrePrint.Refresh
RegistrePrint.RecordSource = "SELECT * FROM CPrintRegistre WHERE ID_Registre = " & "'" & Text10.Text & "'"
RegistrePrint.Refresh
CrystalReport1.Destination = crptToPrinter
CrystalReport1.Action = 1
End Sub
Es curioso que a veces funcione y a veces no. He probado de poner este código en un bucle para volver a probar hasta que el usuario quiera terminar. Lo curioso es que cuando no funciona la primera vez, si repetimos el código otra vez si que funciona. Vaya, intuyo como si la base de datos no se actualizara y no encontrara el registro.
Es un problema algo raro. Agradezco cualquier solución.
Gracias

1 Respuesta

Respuesta
1
Ese problema tiene toda la pinta de ser debido a que para añadir el registro usas una consulta que se actualiza por lotes (adLockBatchOptimistic), así que no aparece el registro, porque aún no se ha enviado a la BD, lo que explica que la segunda vez sí funcione.
Prueba a poner esto:
RS. UpdateBatch adAffectAll
Sustituyendo al usual RS. Update, siendo RS el recordset con el que actualizas la base de datos.
¿No existe adAffectAll?
¿Qué tipo de objeto es "RegistrePrint"?
Ante todo muchas gracias por tu dedicación.
He probado lo que me has dicho. Supongo que cuando te referías a:
RS.UpdateBatch adAffectAll
es lo mismo que:
RS.UpdateBatch adAffectAllChapters
Ya que el anterior no existe.
La question es que continua sin funcionar. Ya no se que hacer ya que he seguido todos los pasos del libro de VB y nada.
También he probado de poner la consulta del tipo adLockBatchPessimistic, y tampoco funciona.
Para tu información, es curioso lo que me pasa ya que como te dije normalmente funciona a la segunda pero a veces también funciona a la primera. Esto solo pasa si nos esperamos unos segundos (7-10) para imprimir.
Estoy en una situación bastante embarazoas ya que no le puedo pedir al cliente que se espere 10 segundos para imprimir. :D
De nuevo muchísimas gracias.
Saludos
Hola otra vez Juancg,
El objeto que uso para hacer el update, no es RegistrePrint. Registre print es un simple "Data Control" que lo uso para hacer una consulta que ataca a una tabla donde otro control (Registre_E) es el que hace los updates de los registros. Éste último, en el que hago los updates es un objeto adodc. Ahora te mostraré las posibilidades que me da VB al hacer el updatebach que me dijiste:
Registre_E.Recordset.UpdateBatch adAffectAllChapters
Registre_E.Recordset.UpdateBatch adAffectCurrent
Registre_E.Recordset.UpdateBatch adAffectGroup.
En resumen, que el código que te pase inicialmente era solo el de imprimir i uso el control RegistrePrint. En otra parte del programa, donde grabo los registros uso el control Registre_E. Los dos atacan a la misma tabla.
Espera que te haya aclarado lo que me pedías.
De nuevo muchísimas gracias.
David
Vaya, esto cambia las cosas. Lo primero, es muy desaconsejable usar el control Data, sobre todo por eficiencia. Lo segundo, si decides seguir usándolo, o no te queda otro remedio, te recomiendo cerrar el Recordset asociado al control y liberarlo, crear uno nuevo con la consulta que quieras, y asociarlo al control.
Dim RS as New ADODB.Recordset
Data.Recordset.Close
set Data.Recordset=nothing
RS.Open [...lo que sea...]
set Data.Recordset=RS
Si usas la edición empresarial o profesional de VB, no necesitas cerrar ni liberar el recordset original, ya que el VB lo hace solo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas