Access - Problema al agregar registro en formulario con tablas vinculadas

 
Vista:
sin imagen de perfil

Problema al agregar registro en formulario con tablas vinculadas

Publicado por Carlos (6 intervenciones) el 17/07/2014 10:17:53
Hola,

Tengo el siguiente problema que no consigo resolver.

Tengo un formulario con campos de dos tablas relacionadas del tipo JOIN LEFT. Llamemos a los campos que establecen la relación <reltbla1> y <reltabla2>. Las tablas son tablas vinculadas a una base de datos MySQL en un servidor en internet. Utilizo una conexión ODBC y todo funciona bastante bien.

El fallo que tengo es que al añadir un nuevo registro en el formulario, si relleno campos de las dos tablas, al abandonar el registro se produce un error, porque el campo <reltabla2> está vacío. Esta campo está definido en la tabla mysql como un campo "Primary key" y "Not Null". Esto con tablas en Access funciona perfectamente, por lo que debe ser algún bug del conector ODBC.

Si al introducir un nuevo registro en el formulario, relleno sólo algún campo de la tabla 1, cambio a otro registro del formulario, vuelvo al registro nuevo introducido antes, y relleno un campo de la tabla 2, no hay ningún problema. En el momento de introducir algún valor en un campo de la tabla 2, se crea el nuevo registro en la tabla 2 y se le asigna al campo <reltabla2> el valor del campo <reltabla1> con el que está relacionado.

He pensado como posible solución, que al introducir algún valor en cualquier campo de la tabla 2, en el evento "AfterUpdate()", verificar si es un nuevo registro con la propiedad .NewRecord, y, si es así, asignar a capón al campo <reltabla2> el valor de <reltabla1>. El problema es que en ese momento, <reltabla1> todavía tiene valor Null.

¿Alguna solución? 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

Problema al agregar registro en formulario con tablas vinculadas

Publicado por JOSE (830 intervenciones) el 17/07/2014 18:39:52
AÑADIR DATOS O MODIFICARLOS partiendo e una consulta es un procedimienento que siempre da errores

las tablas tienen que crarse o modificarles tabla por tabla no por consulta de ambas

por ello parece razonable que cambies la estructura para llegar al fin que persigues
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
sin imagen de perfil

Problema al agregar registro en formulario con tablas vinculadas

Publicado por Carlos (6 intervenciones) el 17/07/2014 20:13:47
¿Te refieres a que en lugar de dejar añadir registros mediante los controles de Access lo haga con un control propio y a través de RecordSets?
Se me olvidó indicar antes que el campo <reltabla1> es autonumérico, y por eso tengo el problema de que esté vacío. Da la impresión de que el formulario quisiera añadir el registro de la tabla 2 antes que el de la tabla 1, y por eso, al estar el campo <reltabla1> vacío, no le proporciona su valor al campo <reltabla2> y se genera el error, ya que <reltabla2> no puede quedarse vacío.
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

Problema al agregar registro en formulario con tablas vinculadas

Publicado por jose (830 intervenciones) el 18/07/2014 13:05:52
los datos se pueden añadir por esos tres procedimientos

1,. vinculando o relacionando el formulario con una tabla o consulta - y por extension los objetos que pones en éste formulario me. reocrsuurce = "select * from nombre-tabla where cliente =15"



2.- utilizando codigo de vb para introducir datos (recordset) con ADO o con DAO
REM CON ADO------------------------------------------
Dim rs As Recordset
Dim CON As Connection

Set rs = CreateObject("ADODB.RecordSet")
Set CON = Application.CurrentProject.Connection
C10 = ""


C10 = C10 & " INSERT INTO MOVIMIENTOS ("
C10 = C10 & " FECHA,"
C10 = C10 & " NUMEASIENTO,"
C10 = C10 & " CUENTA,"
C10 = C10 & " DOCUMENTO,"
C10 = C10 & " CONCEPTO,"
C10 = C10 & " DEBE,"
C10 = C10 & " HABER,"
C10 = C10 & " TITULAR,"
C10 = C10 & " TIPOASIENTO,"
C10 = C10 & " ANNO )"

C10 = C10 & "SELECT"
C10 = C10 & " #" & Format(LFECHA, "mm/dd/yyyy") & "# AS Expr1,"
C10 = C10 & " " & Str$(NUMASI) & " AS Expr2,"
C10 = C10 & " '" & LCUENTA & "'AS Expr3,"
C10 = C10 & " '" & Nz(LDOCUMENTO, " ") & "' AS Expr4,"
C10 = C10 & " '" & Nz(LCONCEPTO, " ") & "' AS Expr5,"
C10 = C10 & " " & Str$(Nz(LDEBE, 0)) & " AS Expr6,"
C10 = C10 & " " & Str$(Nz(LHABER, 0)) & " AS Expr7,"
C10 = C10 & " " & Str$(Forms![FPRINCIPAL]![TIT]) & " AS Expr8,"
C10 = C10 & " '" & LTIPOASIENTO & "' AS Expr9,"
C10 = C10 & " '" & Forms![FPRINCIPAL]![an] & "' AS Expr10;"
C10 = C10 & ""

consulta = c10

rs.Open consulta, CON, adOpenDynamic, adLockOptimistic

If rs.EOF = False Then
rs.MoveLast
rs.MoveFirst
End If



3.- utilizando consultas - en este caso de datos anexados



Lo que si tienes que tener claro que sin un dato le defines como obligatorio o indice principal si no se le facilitas te dará error


Recordarte que cuando utilizas un recorset , utilizas una instrucción SQL - INSER INTO, SELECT , ETC
Las consultas hacen lo mismo , nada más que a veces simplifica un poco el proceso, pero no siempre , y no siempre hacen lo que necesitamos o bien nuestra aplicación sería inviable de la cantidad de consultas que necesitamos usar.
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
sin imagen de perfil

Problema al agregar registro en formulario con tablas vinculadas

Publicado por Carlos (6 intervenciones) el 28/07/2014 14:25:31
Muchas gracias jose por la sugerencia. Creo, efectivamente, que la solución buena es la que indicas, trabajando con recordsets.

De momento, como solución provisional, mientras implemento el código para la otra, he descubierto que al entrar en los controles de la tabla relacionada en la consulta (utilizando el evento GotFocus), si hago un Me.Refresh, se genera el valor del campo autonumérico en la tabla relacionada y se evita el error.

Private Sub campodelatabla2_GotFocus()
If Me.NewRecord Then
Me.Refresh
End If


Si utilizo el evento BeforeUpdate se produce el error igualmente.

En fin, algún día averiguaré por qué.
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