Problema con Recordset ADO
Publicado por Busy (3 intervenciones) el 03/10/2007 17:40:35
Hola, mi problema es el siguiente...
Intento programar la apertura de un formulario (form2) a través de un botón "Aceptar" de otro formulario anterior (form1). Me explico...
Form1 dispone de un campo de texto en el que introduzco el número de formulario que quiero abrir. Una vez introducido se pulsa aceptar y, en teoría, tiene que abrir un Form2 que se corresponda con lo introducido en el campo de texto, pero que no haya sido abierto anteriormente.
El código...
Private Sub cmdAceptar_Click()
On Error GoTo Errores
Dim rstSolicitudes, rstInfCom As Recordset
Set rstSolicitudes = AccederTabla("solicitud_prov")
Set rstInfCom = AccederTabla("informe_comercial")
If txtCampo(1) = "" Then
MsgBox "No ha introducido Nº de informe"
Exit Sub
Else
Informe = txtCampo(1).Text
With rstInfCom
.Index = "PrimaryKey"
.Seek "=", CInt(Informe)
If .NoMatch Then
MsgBox "No existe Informe Comercial con ese código", vbExclamation
Exit Sub
End If
End With
With rstSolicitudes
If .RecordCount > 0 Then .MoveFirst
While Not .EOF
If !cod_informe_com = CInt(Informe) Then
MsgBox "El Código de Informe que ha introducido ya tiene asignada una Solicitud a Proveedor", vbExclamation
Exit Sub
Else
.MoveNext
End If
Wend
End With
frmSolicitudesProveedores.Show
txtCampo(1) = ""
Unload Me
End If
Exit Sub
EXPLICACION
Abro 2 recordset,
- rstInfCom (se corresponde con la tabla informe_comercial) que será el que me diga si existe un informe comercial con el identificador introducido en el campo de texto. En el caso de no existir lo indica y sale del procedimiento sin abrir el Form2.
- rstSolicitudes (se corresponde con la tabla solicitud_prov). En esta tabla existe un campo denominado cod_informe_com que controla para qué informe de la tabla informe_comercial se ha abierto uno correspondiente a la tabla solicitud_prov. No es clave primaria, pero si que se encuentra indexado y sin duplicados. Por lo tanto sólo puede haber un informe de solicitud_prov que se corresponda con cualquier informe comercial. Digamos que una relación 1 a 1.
El problema viene cuando intento programar que, si el usuario introduce en el campo de texto de Form1 un numero de informe comercial para el que ya ha sido abierto uno de solicitud_prov, muestre un mensaje de advertencia y salga del procedimiento.
Ahora mismo lo tengo así...
With rstSolicitudes
If .RecordCount > 0 Then .MoveFirst
While Not .EOF
If !cod_informe_com = CInt(Informe) Then
MsgBox "El Código de Informe que ha introducido ya tiene asignada una Solicitud a Proveedor", vbExclamation
Exit Sub
Else
.MoveNext
End If
Wend
...y no hace nada, es decir, me sigue abriendo el formulario form2 creando otra solicitud para un mismo informe comercial.
También probé utilizando el método .seek para realizar búsqueda dentro del recordset, pero los resultados eran los mismos, es decir
With rstSolicitudes
.Index = !cod_informe_com (previamente asignada "PrimaryKey" en la BD)
.Seek "=", CInt(Informe)
If Not rstSolicitudes.NoMatch then
MsgBox ""El Código de Informe que ha introducido ya tiene asignada una Solicitud a Proveedor", vbExclamation
Exit Sub
End If
End With
No se qué más probar y necesito solucionar este percance, porque es importante que el usuario no pueda abrir 2 solicitudes a proveedor para un mismo informe comercial.
Alguna sugerencia???
Un saludo y gracias.
Intento programar la apertura de un formulario (form2) a través de un botón "Aceptar" de otro formulario anterior (form1). Me explico...
Form1 dispone de un campo de texto en el que introduzco el número de formulario que quiero abrir. Una vez introducido se pulsa aceptar y, en teoría, tiene que abrir un Form2 que se corresponda con lo introducido en el campo de texto, pero que no haya sido abierto anteriormente.
El código...
Private Sub cmdAceptar_Click()
On Error GoTo Errores
Dim rstSolicitudes, rstInfCom As Recordset
Set rstSolicitudes = AccederTabla("solicitud_prov")
Set rstInfCom = AccederTabla("informe_comercial")
If txtCampo(1) = "" Then
MsgBox "No ha introducido Nº de informe"
Exit Sub
Else
Informe = txtCampo(1).Text
With rstInfCom
.Index = "PrimaryKey"
.Seek "=", CInt(Informe)
If .NoMatch Then
MsgBox "No existe Informe Comercial con ese código", vbExclamation
Exit Sub
End If
End With
With rstSolicitudes
If .RecordCount > 0 Then .MoveFirst
While Not .EOF
If !cod_informe_com = CInt(Informe) Then
MsgBox "El Código de Informe que ha introducido ya tiene asignada una Solicitud a Proveedor", vbExclamation
Exit Sub
Else
.MoveNext
End If
Wend
End With
frmSolicitudesProveedores.Show
txtCampo(1) = ""
Unload Me
End If
Exit Sub
EXPLICACION
Abro 2 recordset,
- rstInfCom (se corresponde con la tabla informe_comercial) que será el que me diga si existe un informe comercial con el identificador introducido en el campo de texto. En el caso de no existir lo indica y sale del procedimiento sin abrir el Form2.
- rstSolicitudes (se corresponde con la tabla solicitud_prov). En esta tabla existe un campo denominado cod_informe_com que controla para qué informe de la tabla informe_comercial se ha abierto uno correspondiente a la tabla solicitud_prov. No es clave primaria, pero si que se encuentra indexado y sin duplicados. Por lo tanto sólo puede haber un informe de solicitud_prov que se corresponda con cualquier informe comercial. Digamos que una relación 1 a 1.
El problema viene cuando intento programar que, si el usuario introduce en el campo de texto de Form1 un numero de informe comercial para el que ya ha sido abierto uno de solicitud_prov, muestre un mensaje de advertencia y salga del procedimiento.
Ahora mismo lo tengo así...
With rstSolicitudes
If .RecordCount > 0 Then .MoveFirst
While Not .EOF
If !cod_informe_com = CInt(Informe) Then
MsgBox "El Código de Informe que ha introducido ya tiene asignada una Solicitud a Proveedor", vbExclamation
Exit Sub
Else
.MoveNext
End If
Wend
...y no hace nada, es decir, me sigue abriendo el formulario form2 creando otra solicitud para un mismo informe comercial.
También probé utilizando el método .seek para realizar búsqueda dentro del recordset, pero los resultados eran los mismos, es decir
With rstSolicitudes
.Index = !cod_informe_com (previamente asignada "PrimaryKey" en la BD)
.Seek "=", CInt(Informe)
If Not rstSolicitudes.NoMatch then
MsgBox ""El Código de Informe que ha introducido ya tiene asignada una Solicitud a Proveedor", vbExclamation
Exit Sub
End If
End With
No se qué más probar y necesito solucionar este percance, porque es importante que el usuario no pueda abrir 2 solicitudes a proveedor para un mismo informe comercial.
Alguna sugerencia???
Un saludo y gracias.
Valora esta pregunta


0