Visual Basic - Problema con Recordset ADO

Life is soft - evento anual de software empresarial
 
Vista:

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.
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:Problema con Recordset ADO

Publicado por smokalot (203 intervenciones) el 04/10/2007 07:42:00
Hola,

Mira lo que yo haría sería hacerlo con una consulta sql, lo mismo que tu per en lugar de poner el seek para hacer la busqueda. Utilizaria un where en la consulta. Dado que tu recuperas toda la informacion y luego haces la busqueda en los resultados, lo malo de hacerlo así es que tengas muchisimos datos en dichas tablas, entonces si que notarás como te tarda muchisimo.

Prueba con un where.

Suerte,

SMK
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:Problema con Recordset ADO

Publicado por fede (189 intervenciones) el 11/10/2007 01:32:43
ahora veamos y si en vez de todo ese lio haces un boton para cada form o en todo caso utilizas un solo form2 y el evento form2_load pones

1º tomamos la variable del form1 nose variform=1 o lo q se halla cargado en el form1
y luego haces un case
o seas
do case variform
case=1
rs.open tabla1
case=2
rs.open tabla2
case=3
rs.open tabla3
.......
end case
va que se yo ahorras un monyton de codigo
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