Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   dificultades con DBX (https://www.clubdelphi.com/foros/showthread.php?t=10608)

wonder boy 24-05-2004 17:04:05

dificultades con DBX
 
Hola, tengo un problema con el sqldataset, pasa que necesito ver datos de otra tabla con una sentencia SQL, uso DB7 y IB6

el sqldataset tiene el siguiente SQL

SELECT
TABLA1.*,
(SELECT
SUM(TABLA2)
FROM TABLA2) AS CAMPO_EXTRA
FROM TABLA1

el sqldataset esta dentro de un modulo de datos, lo llamo desde un formulario con un provider y un clientdataset, resulta que cuando voy a hacer un alta (insert), me dice que los campos que quiero guardar no existen, y ahi me di cuenta de que no hace el insert sobre la tabla1 sino sobre la tabla2, esto lo corrobore viendo el sqlmonitor, que permite ver todas las transacciones hechas por la conexion DBX. Quisiera saber de que manera lo soluciono, desde ya muchas gracias!!!

guillotmarc 24-05-2004 17:39:53

Hola.

Cuando hay subconsultas por en medio, DBX tiende a liarse sobre el nombre de la tabla donde aplicar los cambios. (Yo creo que se coge el primer nombre de tabla que encuentra).

Simplemente, indica la table base, en el evento OnGetTableName del sqlDataset :

TableName := 'TABLA1';

Saludos.

wonder boy 24-05-2004 18:16:20

gracias por tu ayuda, pero..., siempre hay uno, no encontre el evento OnGetTableName en el SQLDATASET, sino en el provider, hago la aclaracion por las dudas que alguien mas lea esto...,

muchas gracias!!!

wonder boy 27-05-2004 01:20:03

Hola, bueno, ahora anda todo barabaro, pero, "siempre hay uno", me esta faltando que me actualice el campo que se calcula en la sentencia SQL del dataset, resulta que si inserto un registro, lo hace bien, pero tengo que salir del formulario y volver a entrar para que actualice, quiero saber si existe la posibilidad de actualizar el registro pero sin salir o hacer close y open. Ya he probado con refresh, refreshrecord y updaterecord en el clientdataset y no ha pasado nada.


pd: si inserto un registro y luego inmediatamente inserto otro, me actualiza el primero y asi sucesivamente

desde ya muchas gracias!!!

guillotmarc 27-05-2004 11:18:13

Hola.

Puedes hacer un Refresh sobre el ClientDataset, (incluso puedes probar el RefreshRecord, que debería ejecutarse más rápido). Lo tienes que llamar después del ApplyUpdates (cuando los datos ya han sido pasados a la base de datos).

Saludos.

wonder boy 27-05-2004 15:32:27

Hola

En realidad, yo estoy haciendo un refresh despues de el aplyupdates(0), o sea que no me anda tu sugerencia, aunque es valida para otras cosas, no lo es para actualizar estos campos calculados en el SQLDATASET y el CLIENTDATASET.

si pueden ayudarme me sera de mucha ayuda, gracias miles

guillotmarc 27-05-2004 18:04:13

Cita:

Empezado por wonder boy
En realidad, yo estoy haciendo un refresh despues de el aplyupdates(0), o sea que no me anda tu sugerencia, aunque es valida para otras cosas, no lo es para actualizar estos campos calculados en el SQLDATASET y el CLIENTDATASET.

:confused: :confused: Entonces tiene que ser que la Base de Datos, en la tabla TABLA2, no tiene aún los registros relacionados con el registro actual de TABLA1.

Si añades los registros de TABLA2, mediante otro Clientdataset, deberás esperar a hacer el Refresh, a que hayas hecho el ApplyUpdates también en el segundo ClientDataset.

No me he explicado demasiado bien, pero espero que se entienda :).

Saludos.

wonder boy 27-05-2004 22:03:13

Hola,

no, es probable que yo no me haya explicado bien, tengo un solo sqldataset en el modulo de datos, es el que tiene el SQL de dos tablas (ver mensajes anteriores), y despues un provider y un clientdataset en un formulario aparte, los cuales se activan cuando se crea el formulario. Yo hago, como decia antes, un refresh despues del applyupdates(0), ademas, agrego que, tengo esto como norma, pues asi me aseguro de poder "ver" las claves primarias que fueron generadas por un trigger en la DB (IB6 por las dudas). Como agravante, debo indicar que si hago las cosas tal cual las estoy haciendo, y ademas agrego un boton que con un click haga un refresh, este anda!!, cosa que me pone aun mas los pelos de punta, asi que realmente no entiendo que le pasa a esto, pero espero lo podamos resolver, desde ya muchisimas gracias por lo dado y por lo que venga!!!

guillotmarc 28-05-2004 11:01:38

Hola.

Creo que debe ser lo que te comentaba antes, que estás lanzando la consulta cuando los otros datos aún no han sido pasados a la base de datos.

Saludos.


La franja horaria es GMT +2. Ahora son las 13:41:30.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi