Fredy,
>>::oOdbcDataset1:cSelect :=SELECT E.*, PHONE_NO FROM EMPLOYEE E,
Esto construye un dataset COMPLETAMENTE NUEVO. No tiene nada que ver con lo
que pudiera haber antes. De hecho NO TIENE NINGUN SENTIDO hacerlo, es
preferible que utilices un nuevo DataSet y destruyas el que tienes
Olvidate de la Dbf temporal no has de tocarla nunca, imaginate que no
existe, de verdad. Se borrar sola.
De la unión de tablas se encarga el motor SQL Xailer no hace absolutamente
nada más que consultar al motor el cual da una relación de filas ordenada en
base tu sentencia SELECT. Creo que te estas liando sin motivo.
No entiendo cuando dices que cambias las columnas, es imposible cambiarlas,
como las cambias?

Un saludo,
"Fredy" <
fredy@airtel.net> escribió en el mensaje
news:[email=
MPG.1c96ca76cbc5ad149896b9@news.ozs.com...]
MPG.1c96ca76cbc5ad149896b9@news.ozs.com...[/email]
Ignacio,
Ya he conseguido la union de tablas, lo que pasa es que lo hace de una
forma un tanto confusa. Hay algo que no estoy haciendo como se tiene que
hacer y es lo que da problemas. Me explico.
En la propiedad cSelect del Dataset tengo:
SELECT * FROM EMPLOYEE.
Por lo visto, esta es la sentencia que toma de base para crear la base
de datos temporal y si luego "reconstruyo" la sentencia en nuevos
campos, no los actualiza.
Fíjate, por ejemplo en el cSelect del DataSet pongo:
SELECT FIRST_NAME, LAST_NAME, PHONE_NO FROM EMPLOYEE, DEPARTMENT
y luego a lo largo del programa le digo:
::oOdbcDataSet1:lOpen := .f.
::oOdbcDataset1:cSelect :=SELECT E.*, PHONE_NO FROM EMPLOYEE E,
DEPARTMENT D WHERE ..
::oOdbcDataset1:lOpen := .t.
La dbf temporal resultantee s la que adjunto al mensaje.
Xailer se ha puesto a meter los campos de la nueva consulta en la dbf
temporal ya creada en el orden en el que le vienen, y claro, no los pone
bien.
Del mismo modo, si tengo un select ya definido y le cambio las columnas
(por ejemplo: cambio el * por FIRST_NAME, LAST_NAME) me da un GPF.
Tengo que poner lOpen a .f., cerrar xailer, volver a entrar, cambiar el
select y poner lOpen a .t.
Algo parecido pasa con el browse. Cuando defines el cSelect en el
inspector de objetos, automáticamente crea las columnas del browse y si
luego cambiamos la condición del select se lía de nuevo.
Lo que no sé es cómo hacer para borrar la dbf temporal y forzar que se
cree de nuevo (está claro que el lOpen no lo hace).
¿Cómo tengo que hacer para que se elimine la dbf temporar y se cree de
nuevo?
Las columnas del browse lo veo más complejo y supongo que habrá que
definirlas de nuevo por programación.
Sí, ya sé que es un poco raro eso de cambiar las columnas de selección
en tiempo de ejecución, pero es que de momento la anchura del cSelect en
el inspector de objetos no da para muchas alegrías.
Un saludico,
Fredy