Access - ¿Como hago esto? ¡Urgente!!!!!

 
Vista:

¿Como hago esto? ¡Urgente!!!!!

Publicado por Victor Manuel (101 intervenciones) el 31/03/2007 21:32:14
Tengo dos formularios uno para dar de alta, de baja y hacer modificaciones en una tabla, el otro es para realizar busquedas mediante un listbox.

Cuando llamo al formulario de busquedas este me carga en el listbox los registros que yo anteriormente guarde en la tabla mediante el otro formulario.

¿Como le hago para que cuando de doble click en el listbox a un registro, se me muestre en el primer formulario para poder hacer modificaciones o simplemente consultar la informacion?

Tengo este codigo en el evento doble click del listbox pero no me funciona:

Private Sub ListRegistros_DblClick(Cancel As Integer)
DoCmd.OpenForm "Registros"
Form_Registros.NumeroReporte.SetFocus
Form_Registros.NumeroReporte.Text = ListRegistros.ItemData(ListRegistros.ListIndex)
Form_Registros.Empresa.SetFocus
DoCmd.Close acForm, "Buscador de registros"
End Sub

Donde Registro es el primer formulario y Buscador de registros es el segundo.

Espero puedan ayudarme o decirme de algun metodo que haya para hacerlo, Muchas Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¿Como hago esto? ¡Urgente!!!!!

Publicado por Pepe (766 intervenciones) el 01/04/2007 08:58:39
Hola Victor Manuel

Si lo único que que quieres hacer es que al hacer doble click en el cuadro de lista abrir el formulario registros, con esto lo tienes solucionado

Private Sub Lista2_DblClick(Cancel As Integer)
DoCmd.OpenForm "Registros", acNormal, "", "[numero report]=[Forms]![Buscador]![Lista2]", , acNormal

End Sub

Al cuadro de lista le he llamado "lista2", al primer formulario "registros" y al campo por el que localiza "numero report"

Espero que sea esto lo que necesitabas, Pepe
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como hago esto? ¡Urgente!!!!!

Publicado por Victor (101 intervenciones) el 02/04/2007 16:42:36
Ya lo hice pepe, pero no me jala el registro el primer formulario, si me abre el formulario pero no me despliega nada.

De hecho el codigo que use yo si sirve para otra aplicacion y no se la razon por la cual no me sirve en este proyecto.

Espero alguien me pueda ayudar, plz.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como hago esto? ¡Urgente!!!!!

Publicado por Pepe (766 intervenciones) el 02/04/2007 17:01:37
Perdona Victor, pero por no jalar que quieres decir, que el formulario se abre pero todos los campos estam vacios, o que el formulario tinene el registro, pero los campos estan bloqueados y no los puedes manipular.

Pepe
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como hago esto? ¡Urgente!!!!!

Publicado por Victor Manuel (101 intervenciones) el 02/04/2007 17:18:35
Me refiero a que me abre el formulario "me jala el formulario", a eso me refiero, pero no me pone ningun registro, osea, los campos aparecen en blanco.

Nota.- Con mi codigo el que use anteriormente si me ponia un campo mas no me descargaba la informacion relacionada a este, osea para ser mas explicitios.
En mi tabla yo tengo un campo llamado NumeroReporte, el cual es la clave principal, y mi codigo el siguiente:

Private Sub ListRegistros_DblClick(Cancel As Integer)
DoCmd.OpenForm "Registros"
Form_Registros.NumeroReporte.SetFocus
Form_Registros.NumeroReporte.Text = ListRegistros.ItemData(ListRegistros.ListIndex)
Form_Registros.Empresa.SetFocus
DoCmd.Close acForm, "Buscador de registros"
End Sub

Ahora si te fijas NumeroReporte obtiene el foco y llama del ItemData, despues obtiene el foco la Empresa que es el siguiente campo en mi form.

Ahora tengo este codigo para la caja de texto NumeroReporte, checalo:

Private Sub NumeroReporte_AfterUpdate()
'Manejo de los Recordset con ADO
'Referencia: Microsoft ActiveX Data Objects 2.1 Library
On Error Resume Next
Dim rst As New ADODB.Recordset, SQL As String
SQL = "Select Numeroreporte,Empresa From TablePrincipal where NumeroReporte ='" & NumeroReporte & "'"
Set rst = CurrentProject.Connection.Execute(SQL)
If Not rst.EOF Then
NumeroReporte = rst!NumeroReporte
Empresa = rst!Empresa
Organizacion = rst!Organizacion
Embarcacion = rst!Embarcacion
Descripcion = rst!Descripcion
FechaI = rst!FechaI
HoraI = rst!HoraI
FechaF = rst!FechaF
HoraF = rst!HoraF
NoFactura = rst!NoFactura
Anticipo = rst!Anticipo
Pagado = rst!Pagado
Notas = rst!Notas
rst.Close
Set rst = Nothing
End If
End Sub

Esto para que me despliegue los demas registros en relacion al NumeroReporte, este otro codigo lo tengo en el evento Lostfocus:

Private Sub NumeroReporte_LostFocus()
NumeroReporte_AfterUpdate
End Sub

Esto para que e ejectue el codigo de arriba cuando la caja de texto pierda el foco y me descargue la informacion de la tabla al formulario Registros, pero solamente me despliega lo que es el NumeroReporte y no los demas campos relacionados con este.

Y pues con el codigo que me diste no me funciona, espero puedas ayudarme, la verdad no se que es lo que pasa. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como hago esto? ¡Urgente!!!!!

Publicado por Enrique (1299 intervenciones) el 02/04/2007 19:54:27
Fíjate que en esta línea de código solo estás cargando en el SQL los campos "Numeroreporte" y "Empresa", por lo tanto no puedes esperar que luego te despliegue el resto de campos en el formulario:
SQL = "Select Numeroreporte, Empresa From TablePrincipal where NumeroReporte ='" & NumeroReporte & "'"

Lo correcto sería poner un asterisco ( * ) cuando son muchos campos y quieres ponerlos todos o casi todos en lugar de detallarlos uno a uno:
SQL = "Select * From TablePrincipal where NumeroReporte ='" & NumeroReporte & "'"
Además te aconsejo unos cambios en la forma de utllizar la librería de ADO, usando el motor Jet 4.0 de Microsoft en vez de un SQL para conectar con la Tabla:

'Esto lo pones en la Sección de declaraciones del editor de VBA en el Form:
Option Compare Database
Private cnn As ADODB.Connection
Private rst As ADODB.Recordset
Option Explicit
-----------------------------------------------------------------------------------------------
Private Sub NumeroReporte_AfterUpdate()
On Error Resume Next
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Application.CurrentProject.Connection & ";"
rst.Open "Select * From TablePrincipal Where NumeroReporte ='" & NumeroReporte & "'", cnn, adOpenDynamic, adLockOptimistic
If Not rst.EOF Then
'NumeroReporte = rst!NumeroReporte '<-- Esto no será necesario puesto que ya se carga desde el ListBox en el campo NumeroReporte del formulario.
Empresa = rst!Empresa
Organizacion = rst!Organizacion
Embarcacion = rst!Embarcacion
...............
...............
Todo lo demás como lo tienes ahora.
Un saludo y olvidemos lo pasado pués me gusta llevarme bien con todos.
Enrique
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como hago esto? ¡Urgente!!!!!

Publicado por Victor Manuel (101 intervenciones) el 02/04/2007 21:00:43
Pido mil disculpas si te hice sentir incodomo pero bueno.

Es muy raro mi problema ya que he intentado con todo y no funciona con nada.
Esta solucion que me has dado es muy buena pero lamentablemente no me sirve tampoco, no se realmente que pasa, si el codigo esta bien.

Aqui te explico mas detalladamente:

Yo quiero que de un list box con los regitstros que se ven en ella, al hacer doble click me habra el form registros y me muestre la informacion relacionada con mi eleccion, este es el evento Doble click del listbox:

Private Sub ListRegistros_DblClick(Cancel As Integer)
DoCmd.OpenForm "Registros"
Form_Registros.NumeroReporte.SetFocus
Form_Registros.NumeroReporte.Text = ListRegistros.ItemData(ListRegistros.ListIndex)
Form_Registros.Empresa.SetFocus
DoCmd.Close acForm, "Buscador de registros"
End Sub

Espero no este mal.

Ahora este otro codigo esta en el campo NumeroRegistro del otro formulario:

Private Sub NumeroReporte_AfterUpdate()
On Error Resume Next
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Application.CurrentProject.Connection & ";"
rst.Open "Select * From TablePrincipal Where NumeroReporte ='" & NumeroReporte & "'", cnn, adOpenDynamic, adLockOptimistic
If Not rst.EOF Then
NumeroReporte = rst!NumeroReporte
Empresa = rst!Empresa
Organizacion = rst!Organizacion
Embarcacion = rst!Embarcacion
Descripcion = rst!Descripcion
FechaI = rst!FechaI
HoraI = rst!HoraI
FechaF = rst!FechaF
HoraF = rst!HoraF
NoFactura = rst!NoFactura
Anticipo = rst!Anticipo
Pagado = rst!Pagado
Notas = rst!Notas
rst.Close
Set rst = Nothing
End If
End Sub

Codigo que tu me diste, espero haberlo puesto bien, por ultimo este es el ultimo evento que tengo en este control:

Private Sub NumeroReporte_LostFocus()
NumeroReporte_AfterUpdate
End Sub

Este para que cuando pierda el foco me ejecute el afterupdate, espero puedas ayudarme, gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como hago esto? ¡Urgente!!!!!

Publicado por Enrique (1299 intervenciones) el 02/04/2007 22:10:38
Hola Victor:
Aparentemente todo está correcto, lo que se diferencia del método original de mi ejemplo "Busquedas" es el abrir el Formulario "Registros" al dar doble click en el cuadro de lista pués en mi ejemplo ese formulario ya está abierto debajo del formulario Buscador de Registros.
Primero tienes que comprobar que al abrirse "Registros", éste toma el control, o sea, que el campo NumeroReporte recibe el Foco antes de cerrarse "Buscador de registros", esto se aprecia en la barra de color azul del Formulario "Registros", si la barra se vé de color azul intenso es que ha recibido el control pero si la barra se queda en un azul atenuado es que no tiene el control y por tanto el campo "NumeroReporte"no recibirá el valor del ListBox. Otra cosa que debes de hacer es desactivar provisionalmente la primera línea de NumeroReporte, la de On Error Resume Next para ver si marca algún error y eliminar tambien la Propiedad Text en la línea del ItemData en el ListBox porque parece que de la forma que tu abres el Form Registros, esa propiedad no es válida.

Si a pesar de todo esto sigue sin funcionar, ya no queda otra solución que enviarme en una mdb nueva, solo los formularios implicados y la tabla con unos cuantos registros para que yo haga unas pruebas y luego te digo donde tienes el error, el porqué de ese error y como solucionarlo para esta y sucesivas ocaisones, otra cosa no puedo hacer ya.

Saludos
Enrique
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como hago esto? ¡Urgente!!!!!

Publicado por Victor Manuel (101 intervenciones) el 03/04/2007 00:06:02
Elimine la linea de codigo On Error Resume Next y me marco un error de este tipo:

Run time-error "2147217904(80040e1o)':

No value given for one or more required parameters

No se a que se refiera con parametros requeridos, a la mejor me refiero mal a la tabla, o quien sabe, de todos modos investigare, pero si tu has tenido alguna experiencia de este tipo, creo que eres el unico que puede ayudarme, sale, Muchisimas Gracias y un Saludo.

Haber que pasa
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como hago esto? ¡Urgente!!!!!

Publicado por Enrique (1299 intervenciones) el 03/04/2007 11:49:47
Victor, ese error indica que en esta línea que te pongo a continuación, el recordset "rst" no está cargando nada, ya sea porque el nombre de la tabla esté mal escrito o NumeroReporte en la tabla o en el formulario estén escritos de otra forma. El NumeroReporte que vá después del Where es el de la Tabla y el que vá al final entre comillas justo antes de cnn es el del formulario, fíjate que estén bien escritos porque no tienen porqué llamarse igual necesariamente.

rst.Open "Select * From TablePrincipal Where NumeroReporte ='" & NumeroReporte & "'", cnn, adOpenDynamic, adLockOptimistic

Tambien en esta línea de código puedes eliminar la última parte:
, adOpenDynamic, adLockOptimistic
No pasa nada si está, pero realmente no es necesario porque estamos abriendo el Recordset para lectura y eso solo es necesario cuando lo abrimos para modificar.

Otra cosa, supongo que pondrías lo que te dije en la Sección de Declaraciones:
Option Compare Database
Private cnn As ADODB.Connection
Private rst As ADODB.Recordset
Option Explicit

porque sin esto no funciona tampoco y lo más importante de todo es que en la Ventana Referencias esté marcada la librería de ADO: Microsoft ActiveX Data Objects 2.1 Library, aunque esto doy por hecho que si estará.

Saludos y suerte. Ya sabes que como último recurso me puedes enviar lo que te dije en mi anterior mensaje, comprimido en zip o rar.

Enrique
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error de sintaxis!!!

Publicado por Victor Manuel (101 intervenciones) el 03/04/2007 17:11:36
En mi tabla el campo numeroreporte se llama de esta forma:

Numero de reporte, con los espacios, una pregunta:

Asi lo pongo en el codigo o de que forma lo pongo?

Ahora, ya lo cambie y asi quedo el codigo:

Option Compare Database
Private cnn As ADODB.Connection
Private rst As ADODB.Recordset
Option Explicit

Private Sub NumeroReporte_AfterUpdate()
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Application.CurrentProject.Connection & ";"
rst.Open "Select * from TablePrincipal where Numero de reporte='" & NumeroReporte & "'", cnn, adOpenDynamic, adLockOptimistic
If Not rst.EOF Then
Empresa = rst!Empresa
Organizacion = rst!Organizacion
Embarcacion = rst!Embarcacion
Descripcion = rst!Descripcion
FechaI = rst!FechaI
HoraI = rst!HoraI
FechaF = rst!FechaF
HoraF = rst!HoraF
NoFactura = rst!NoFactura
Anticipo = rst!Anticipo
Pagado = rst!Pagado
Notas = rst!Notas
rst.Close
Set rst = Nothing
End If
End Sub

Le quite el On Error Resume Next, y me marco de nuevo un error:

Runtime Error '-2147217900 (80040e14)':

Sintaxis error (missing operator) in query expression 'Numero de reporte='A-1".

Un error de sintaxis, no pense que esta busqueda se hiciera tan complicada en access 2003, Saludos.

Nota.- No podria mandarte un zip o rar de esta maquina puesto que tengo cuenta limitada, pero haber que se puede hacer.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

POR FIN!!!!!! Voy a llorar

Publicado por Victor Manuel (101 intervenciones) el 03/04/2007 17:39:36
Bueno Gracias al cielo y a ti que me habeis iluminado el coco.

Me habias comentado que tenia que ver como lo tenias los campos llamados tanto en la tabla como en el formulario pues resulta que en el codigo hacia referencia a los mismo datos, osea si le decia NumeroReporte = rs!NumeroReporte ues me hacia referencia al campo pero del registro y pues no me desplegaba nada y pense en verificar si acaso los tenia llamados igual y resulta que no los tenia llamados igual ni en la tabla ni en el formulario y pues hice los cambios pertinentes ya funciona.

La cosa es que funciona cuando lo llamo desde el textbox ahora la cosa es hacerlo que funcione dela otra manera, que mediante un form con command buttons me llame al formulario busqueda y al dar doble click me llame al formulario registros para desplegar y hacer modificaciones.

La cosa esta en que abro el form con los command buttons y le doy click a uno de ellos me abre del formulario busqueda le doy doble click al registro que quiero ver y me abre el formulario registros pero como que el formulario con los command buttons me queda sobre el form registros, voy a jugar un poco con el codigo para ver si se puede que a la hora de dar click en el boton para llamar al form busqueda me mande llamar a los dos formulario pero que el formulario registro quede debaje del formulario busqueda para asi cuando yo le de doble click al registro me regrese al form registros y no me mnde al form de los command buttons, si tienes alguna idea es bien recibida.

Y enhorabuena, se siente una gran satisfaccion cuando uno logra lo que quiere.
Saludos y Mil gracias de antemano, Nos vemos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar