Copiar registro encontrado de una tabla a otra en Access usando ADO y VisualBasic6

Por aquí de nuevo con una consulta:

Estoy usando conexión ADO a access desde VisualBasic6, ingreso modifico y elimino sin ningún problema, que sucede, los datos guardados son pacientes en los cuales los datos son: #control, nombre, diagnostico, fecha de ingreso, fecha de egreso, días hospitalización y los honorarios cobrados por el medico.

Ahora viene lo bueno; estoy sacando un reporte que me lo genere mensual, según la selección del año y mes que yo le coloque para que así el doctor sepa sus ingresos mensuales por consultas y/o operaciones, para la búsqueda en la tabla uso el siguiente código:

Tbl. Open "SELECT * FROM VENERANDA WHERE FINGR", cn, adOpenDynamic, adLockOptimistic
On Error Resume Next
tbl.MoveFirst
Do Until tbl.EOF
If Month(tbl.Fields(7)) = Val(Combo2.Text) And Year(tbl.Fields(7)) = Val(Combo1.Text) Then
'''''''''''''' LLENADO DEL REPORTE  ------> ES LO QUE REQUIERO explico abajo
MsgBox tbl.Fields(2) & " " & tbl.Fields(0) ----> lo hago para que me muestre que los que quiero en reporte son los del mes y año indicado en los combos (lo ejecuta perfecto solo como guia para mi)
End If
tbl.MoveNext
Loop

Ahora bien, en LLENADO DE REPORTE, necesito que cada vez que consiga un dato (paciente) en la tabla VENERANDA, me lo traslade a la tabla REPORTE, esto porque estoy usando DATAREPORT.

Logro hacer que me copiara TODOS los datos con la instrucción:

cn.Execute " INSERT INTO REPORTE " & "SELECT * " & "FROM VENERANDA;"

Pero me copiar TODOS los datos de la tabla VENERANDA tantas veces como registro consiga, es decir si la tabla VENERANDA poser 5 registros y en ellos hay 3 de los que requiero en el REPORTE me coloca 3 veces los 5 registros de VENERANDA (15 en total). No se si me explico, pero es lo que me resta para finalizar el programa.

1 respuesta

Respuesta
1

Dando y dando aquí la respuesta... ya que quería que en la misma base de datos me agregara alatabla REPORTE los records que ubicaba en la tabla que eligiera el usuario (Veneranda, ABG o Ozanam), paraluego en el DataReporte sacar el reporte tomando la conexión con REPORTE.

Primero tube que crear un Record para cada tabla

''''' Tbl de VENERANDA
Dim tbl As New ADODB.Recordset
tbl.CursorLocation = adUseClient
tbl.CursorType = adOpenDynamic
tbl.LockType = adLockBatchOptimistic
''''' tbl1 de REPORTE
Dim tbl1 As New ADODB.Recordset
tbl1.CursorLocation = adUseClient
tbl1.CursorType = adOpenDynamic
tbl1.LockType = adLockBatchOptimistic
''''' tbl2 de OZANAM
Dim tbl2 As New ADODB.Recordset
tbl2.CursorLocation = adUseClient
tbl2.CursorType = adOpenDynamic
tbl2.LockType = adLockBatchOptimistic
''''' tbl3 de ABG
Dim tbl3 As New ADODB.Recordset
tbl3.CursorLocation = adUseClient
tbl3.CursorType = adOpenDynamic
tbl3.LockType = adLockBatchOptimistic

Y luego hago la comparación del mes y año de la información que se tiene, esto para ubicar los registros que requiero mostar (Reporte Mensual), luego al ubicarlo que lo agregue a la tabla REPORTE y hace lo que requiere de sumar los honorarios para mostrar un total etc etc... espero sirva de ayuda para próximos

tbl1.Open "SELECT * FROM REPORTE WHERE APCONTROL", CN, adOpenDynamic, adLockOptimistic
If Label2.Caption = "CLINICA VENERANDA" Then  ''''' VENERANDA
tbl.Open "SELECT * FROM VENERANDA WHERE FINGR", CN, adOpenDynamic, adLockOptimistic
On Error Resume Next
tbl.MoveFirst
Do Until tbl.EOF
If Month(tbl.Fields(7)) = Val(Combo2.Text) And Year(tbl.Fields(7)) = Val(Combo1.Text) Then
'''''''''''''' LLENADO DEL REPORTE
tbl1.AddNew
tbl1("APCONTROL") = tbl.Fields(1)
tbl1("NOMBRE") = tbl.Fields(2)
tbl1("FINGR") = CDate(tbl.Fields(7))
tbl1("FEGRE") = CDate(tbl.Fields(8))
tbl1("HONORARIOS") = tbl.Fields(9)
tbl1.Update
hon = hon + tbl1("HONORARIOS").Value
End If
tbl.MoveNext
Loop
'''' DE NO HABER REGISTROS
If tbl1.Fields(1) <> Null Then
MsgBox "No Existen Registros para Generar Informe!", vbInformation, "AVISO"
Combo1.Text = "Año a Reportar"
Combo2.Text = "Mes a Reportar"
Command1.Enabled = False
Exit Sub
End If
ElseIf Label2.Caption = "CLINICA OZANAM" Then  ''''' OZANAM
tbl2.Open "SELECT * FROM OZANAM WHERE FINGR", CN, adOpenDynamic, adLockOptimistic
On Error Resume Next
tbl2.MoveFirst
Do Until tbl2.EOF
If Month(tbl2.Fields(7)) = Val(Combo2.Text) And Year(tbl2.Fields(7)) = Val(Combo1.Text) Then
'''''''''''''' LLENADO DEL REPORTE
tbl1.AddNew
tbl1("APCONTROL") = tbl2.Fields(1)
tbl1("NOMBRE") = tbl2.Fields(2)
tbl1("FINGR") = CDate(tbl2.Fields(7))
tbl1("FEGRE") = CDate(tbl2.Fields(8))
tbl1("HONORARIOS") = tbl2.Fields(9)
tbl1.Update
hon = hon + tbl1("HONORARIOS").Value
End If
tbl2.MoveNext
Loop
'''' DE NO HABER REGISTROS
If tbl1.Fields(1) <> Null Then
MsgBox "No Existen Registros para Generar Informe!", vbInformation, "AVISO"
Combo1.Text = "Año a Reportar"
Combo2.Text = "Mes a Reportar"
Command1.Enabled = False
Exit Sub
End If
ElseIf Label2.Caption = "CLINICA ABG" Then  ''''' ABG
tbl3.Open "SELECT * FROM ABG WHERE FINGR", CN, adOpenDynamic, adLockOptimistic
On Error Resume Next
tbl3.MoveFirst
Do Until tbl3.EOF
If Month(tbl3.Fields(7)) = Val(Combo2.Text) And Year(tbl3.Fields(7)) = Val(Combo1.Text) Then
'''''''''''''' LLENADO DEL REPORTE
tbl1.AddNew
tbl1("APCONTROL") = tbl3.Fields(1)
tbl1("NOMBRE") = tbl3.Fields(2)
tbl1("FINGR") = CDate(tbl3.Fields(7))
tbl1("FEGRE") = CDate(tbl3.Fields(8))
tbl1("HONORARIOS") = tbl3.Fields(9)
tbl1.Update
hon = hon + tbl1("HONORARIOS").Value
End If
tbl3.MoveNext
Loop
'''' DE NO HABER REGISTROS
If tbl1.Fields(1) <> Null Then
MsgBox "No Existen Registros para Generar Informe!", vbInformation, "AVISO"
Combo1.Text = "Año a Reportar"
Combo2.Text = "Mes a Reportar"
Command1.Enabled = False
Exit Sub
End If
End If
MsgBox "Reporte Generado Satisactoriamente", vbInformation, "REPORTE GENERADO"
DRMensualVEN.Sections("Sección2").Controls.Item("clinica").Caption = Label2.Caption
DRMensualVEN.Sections("Sección2").Controls.Item("txtmes").Caption = mes
DRMensualVEN.Sections("Sección5").Controls.Item("total").Caption = hon
DRMensualVEN.Sections("Sección5").Controls.Item("txttmes").Caption = mes
CON. Close
Unload Me
Unload DataEnvironment1
DRMensualVEN.Show

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas