Unir dos Tablas con distintos DATATYPE

Te querí hacer una pregunta tu sabrás por si acaso como puedo unir dos tablas con distintos DATATYPE es decir

En una tabla el codigo es Cod_articulo double() y en la otra tabla es cod_articulo varchar de 1(5)

Sentencia

a = EVALUATE(this.Columns(1).Controlsource) &&Aqui solo evaluo el valor de la grilla

slq = ""
slq = slq +"select p.Codigo, p.NumLinea, p.CodigoPropio, p.cantidad, p.dto, p.subtotal, a.ubicacion "
slq = slq +"from database1.pedidolinea p, 2014fg.articulo a "
slq = slq +"where p.codigo=?a   && aqui es donde debo de unir las dos tablas "
*slq = slq +"Order by codigo DESC "
Ok = SQLExec(conexion,slq,'consultita2')
IF ok<0
DO perror
Endif
SELECT consultita2

2 Respuestas

Respuesta
1

Mm.. según leo... podrías probar con STR() para convertir a tipo CHAR el p.código de la clausula WHERE donde intentas obtener los datos. Podría funcionar. Nunca antes intente obtener una consulta basada en double y varchar je je!

Proba y avisame. Si no te da.. probaremos otra cosa.

Respuesta

Espero poder ayudarte.

.

Hay muchas funciones de conversión que te pueden ayudar, pero en este caso yo usaría transform(). Lo bueno de esta función es que podes darle una mascara y no te deja espacios si no usas mascara.

.

transform(cod_articulo)

.

Si queres rellenar de ceros a la izquierda por ejemplo pondrias transform(cod_artículo,'@L ######').

O si queres convertir por ejemplo 20229020939 (numerico) a un cuit (cadena) sería transform(20229020939,'@R ##-########-#').

.

Otra cosa es que no hace falta referenciar con el evaluate al controlSource del grid, sino que podes llamar al dato de abajo. Por ejemplo si el controlSource del grid es "codigo" de la tabla "articulos", podrías llamar directo a articulos. Codigo.

.

Quedaría así:

.

a=transf(miTabla.cod_articulo)

.

Por ultimo, me gustaría darte algunas recomendaciones para tu código:

.

Podrias usar text... endtext para tu texto, en lugar de usarlo como lo haces: te quedaría asi:

.

text to sql textmerge pretext 7 noshow

select p.Codigo, p.NumLinea, p.CodigoPropio, p.cantidad, p.dto, p.subtotal, a.ubicacion 
from database1.pedidolinea p, 2014fg.articulo a
where p.codigo=?a
Order by codigo DESC

Endtext

.

.

Recordá además que si usas más de una tabla en una consulta deber relacionarla con left join o el que corresponda. Además, asegurate que no haya datos ambiguos, es decir que pueda haber en ambas tablas el mismo nombre y no se sepa a cual te referís, yo usaría así: order by p.codigo ya que si en a existe "codigo" puede darte un error.

.

Por otro lado siempre utiliza variables que se diferencien de las tablas o usa m. adelante de la variable. Recuerda que si justo hay un campo en la tabla actual que se llama como tu variable, va a tomar el valor del campo y eso puede que te lleve a confundirte.

.

Por ejemplo si en el área actual está la tabla clientes que tiene un campo codigo por más que te refieras a la variable codigo siempre tomará el valor de la tabla. Por eso podes usar m.codigo para referencia.

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas