Visual Basic.NET - Ganerar etiquetas -(Está modificado)

 
Vista:
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Ganerar etiquetas -(Está modificado)

Publicado por Miguel (281 intervenciones) el 02/04/2023 19:33:52
Pedí anteriormente ayuda pero como no he conseguido que funciones lo que quiero pongo ahora el código simplidcado haber si ahora me dan la solucción. Tiene que cargar en las etiquetas los dos registros del cliente pero solo carga el primero.

Cmd.CommandText = "IF EXISTS (Select * From sysobjects Where type='U' and name='Etiquetas')
DELETE FROM Etiquetas
INSERT INTO Etiquetas(IdCliente,Nombre,Cp,Municipio,Provincia,Calle) " +
"SELECT T.IdCliente,T.Nombre,R.Cp,M.Municipio,P.Provincia,C.Calle FROM Clientes T " +
"JOIN Municipios M ON T.IdCp = M.IdCp " +
"JOIN Municipios R ON T.IdCp = R.IdCp " +
"JOIN Provincias P ON LEFT(T.IdCp,2) = P.IdProv " +
"JOIN Calles C ON T.IdCalle = C.IdCalle "

he probado a poner un where con la codicion después del From con el IdCliente sea menor de 1000 pero lo ignora.

Por favor agradecería cualquier consejo.

Un saludo
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
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Ganerar etiquetas -(Está modificado)

Publicado por Phil Rob (1554 intervenciones) el 04/04/2023 07:59:19
Hola Miguel,

No comprendro porque veo solamente ahora tu mensaje del 2/4/2023 ! Ayer, tenía mucho tiempo.

El comnado siguiente, con la clausula WHERE deberia funcionar (sintaxis :WHERE T.IdCliente < 1000) ::
1
2
3
4
5
6
7
8
9
Cmd.CommandText = "IF EXISTS (Select * From sysobjects Where type='U' and name='Etiquetas')
DELETE FROM Etiquetas
INSERT INTO Etiquetas(IdCliente,Nombre,Cp,Municipio,Provincia,Calle) " +
"SELECT T.IdCliente,T.Nombre,R.Cp,M.Municipio,P.Provincia,C.Calle FROM Clientes T " +
"JOIN Municipios M ON T.IdCp = M.IdCp " +
"JOIN Municipios R ON T.IdCp = R.IdCp " +
"JOIN Provincias P ON LEFT(T.IdCp,2) = P.IdProv " +
"JOIN Calles C ON T.IdCalle = C.IdCalle " +
“WHERE T.IdCliente < 1000”

Si no funciona, reemplaza JOIN por INNER JOIN.

Si no funciona siempre, te propongo de testar la consulta SELECT sola independiente de tu programa, por ejemplo con el programa administrador de la DB SQL. De esta manera, puedes verificar cuanto líneas da el SELECT.
Sin la clausula WHERE, SELECT debe dar todos registros. Si no es el caso, el problema viene de la organizaciones de estas tablas en la DB.

....
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
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Ganerar etiquetas -(Está modificado)

Publicado por Phil Rob (1554 intervenciones) el 04/04/2023 08:34:52
Continuación ...

Ya he te lo pedido, envia ma las esquemas de las tablas provincias, municipios, cales y clientes (la parte sobre sus direcciones), con ejemplos de datos.
Entonces, puedo hacer la misma DB sobre mi sistema y lo probar.

Puedes enviar con mail directo, conoces mi dirección.
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
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Ganerar etiquetas -(Está modificado)

Publicado por Miguel (281 intervenciones) el 04/04/2023 23:11:15
Hola Phil ya esta funcionado te paso el código reformado y con la nota final para filtrar datos.

Cmd.CommandText = "IF EXISTS (Select * From sysobjects Where type='U' and name='Etiquetas')
DELETE FROM Etiquetas
INSERT INTO Etiquetas(Nombre,Cp,Municipio,Provincia,Calle) " +
"SELECT C.Nombre,M.Cp,M.Municipio,P.Provincia,Ca.Calle FROM Clientes C " +
"INNER JOIN Municipios M ON C.IdCp = M.IdCp " +
"INNER JOIN Provincias P ON SUBSTRING(Cp,1,2) = P.Codigo " +
"INNER JOIN Calles Ca ON C.IdCalle = Ca.IdCalle "
'Comentario : Si se quiere filtrar por un campo
'INNER JOIN Calles Ca ON C.IdCalle = Ca.IdCalle WHere C.Nombre ='Luis'

Me falta de revisar algunos formularios pero si quieres te puedo enviar lo que tengo ya funcionando y el resto una vez revisado incluida la base de datos. Pero me tendras que enviar otra vez tu correo porque al tener problemas con el mio me he creado otro nuevo y no he podido recuperar ninguno.

Un saludo y gracias

Un saludo y gracias
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
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Ganerar etiquetas -(Está modificado)

Publicado por Phil Rob (1554 intervenciones) el 05/04/2023 08:47:52
Ouf ¡ (Ouf : es un suspiro de satisfacción en francés, no sé cómo lo dices en español… ).

Pienso que has cambiar las tablas porque no veo las fraseas :
1
2
"JOIN Municipios M ON T.IdCp = M.IdCp " +
"JOIN Municipios R ON T.IdCp = R.IdCp " +
Este doble JOIN sobre la misma tabla esta una escritura rara y a menudo, muestra una mala organización relaciónale entre las tablas.

Veo también que INNER es necesario y que reemplazas Left (VB 6) para SubString (VB.Net).

Mucha feliz que tiene la solución.

No es necesario que das me el resto de los códigos excepto si puedo te ayudar. He mucho trabajado con el análisis relaciónale de las DB y también con SQL. Pero, lo sabes, sobre la organización de tus códigos, no tengo experiencia de la programación N Capas.

Te envío mi dirección con un mensaje privado en este sitio.

Que tenga un buen día …
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