Por favor ayuda con consulta SQL y VB 6.0

04/10/2007 - 21:20 por Rebeca Abella | Informe spam
Hola a todos de nuevo,

Os cuento a ver si alguien me puede echar un cable (si es que es posible), y
perdonar si no me explico bien:

Tengo las siguientes tablas:

TERMINOS MAESTRO_CASAS_TERMINO

Id_Termino Id_maestro_casa_Termino
Nombre Id_Casa
Id_Termino


CASA MAESTRO_CASAS_PROPIETARIO

Id_Casa Id_maestro_casa_Termino
Nombre Id_Casa
Id_Propietario


PROPIEATARIOS

Id_Propietario
Nombre


Para el Termino="Madrid" tengo las casas= "Chalet1", "Chalet2" y "Chalet3"
A su vez para el "Chalet2" tengo el Propietario="Juan Manuel"

Mi pregunta es:

Necesito actualizar todas las casas del Termino="Madrid" el
Propietario="Juan Manuel"

Alguien me puede ayudar?
Utilizo VB 6.0, ADODB, contra SQL

Como os digo perdonar por si no me he explicado correctamente.

Os agradezco cualquier ayuda.

Un saludo

Rebeca

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
06/10/2007 - 01:36 | Informe spam
Hola Rebeca,

De verdad no tuve tiempo para reponder hasta ahora.

En SQL Server no contamos con una forma sencilla de insertar y/o actualizar
a la misma vez (pero si la tendremos en la version 2008 y el nombre de la
sentencia es MERGE). Asi que te recomiendo lo sgte:

1 - Borrar de la tabla [MAESTRO_CASAS_PROPIETARIO], todas las casas del
termino a cuya casa fue asignada a un propietario.

delete MAESTRO_CASAS_PROPIETARIO
where Id_Casa in (
select
Id_Casa
from
CASA as c
inner join
MAESTRO_CASAS_TERMINO mct
on c.Id_Casa = mct.Id_Casa
inner join
TERMINOS as t
on t.Id_Termino = mct.Id_Termino
where
t.Nombre = 'Madrid'
)

2 - Luego insertar en la misma tabla, todas las casas de ese termino, pero
con el [id] del nuevo propietario. Recuerda usar una transaccion para que
todo este cambio sea atomico, o todo o nada.

declare @Id_Propietario int

set @Id_Propietario = (select Id_Propietario from PROPIEATARIOS where Nombre
= 'Juan Manuel')

insert into MAESTRO_CASAS_PROPIETARIO(Id_Casa, Id_Propietario)
select
Id_Casa,
@Id_Propietario
from
CASA as c
inner join
MAESTRO_CASAS_TERMINO mct
on c.Id_Casa = mct.Id_Casa
inner join
TERMINOS as t
on t.Id_Termino = mct.Id_Termino
where
t.Nombre = 'Madrid'


AMB

"Rebeca Abella" wrote:

Mostrar la cita
#7 Rebeca Abella
06/10/2007 - 17:18 | Informe spam
Muchas gracias Alejandro!!! Como siempre muy amable por tu parte.


Una cosa mas, sabes si este código me vale tal cual para implementarlo en
Visual Basic 6.0 usando ADODB.?

Un saludo muy grande Alejandro

Mostrar la cita
"Alejandro Mesa" escribió en el
mensaje news:
Mostrar la cita
#8 Rebeca Abella
06/10/2007 - 20:33 | Informe spam
Hola de nuevo Alejandro,

Estoy implementando tu solucion y me salta el siguiente error en la consulta
de borrado:

"Ambiguous column name "Id_Casa"

Alguna idea de porque me salta ese error?

Muchas gracias de nuevo

Un saludo

Rebeca

"Alejandro Mesa" escribió en el
mensaje news:
Mostrar la cita
#9 Rebeca Abella
06/10/2007 - 21:45 | Informe spam
Resuelto,

El problema estaba en que faltaba añadir MAESTRO_CASAS_PROPIETARIO antes del
primer Id.Finca

Saludos


"Rebeca Abella" escribió en el mensaje
news:
Mostrar la cita
#10 Alejandro Mesa
07/10/2007 - 01:38 | Informe spam
Hola Rebeca,

Yo te recomendaria poner ese codigo en un procedimiento almacenado y envocar
el sp desde vb. Algo asi como:

create procedure dbo.usp_actualizar_casas_termino_propietario
@Id_Termino int,
@Id_Propietario int
as
set nocount on

begin transaction

delete MAESTRO_CASAS_PROPIETARIO
where Id_Casa in (
select
Id_Casa
from
CASA as c
inner join
MAESTRO_CASAS_TERMINO mct
on c.Id_Casa = mct.Id_Casa
inner join
TERMINOS as t
on t.Id_Termino = mct.Id_Termino
where
t.Id_Termino = @Id_Termino
)

if @@error > 0 then goto ErrorHandler

insert into MAESTRO_CASAS_PROPIETARIO(Id_Casa, Id_Propietario)
select
Id_Casa,
@Id_Propietario
from
CASA as c
inner join
MAESTRO_CASAS_TERMINO mct
on c.Id_Casa = mct.Id_Casa
inner join
TERMINOS as t
on t.Id_Termino = mct.Id_Termino
where
t.Id_Termino = @Id_Termino

if @@error > 0 then goto ErrorHandler

commit transaction

return 0

:ErrorHandler
if @@trancount > 0 rollback transaction
raiserror('Error actualizand0 casas.', 16, 1)
return -1
go

declare @Id_Termino int,
declare @Id_Propietario int

set @Id_Propietario = (
select Id_Propietario
from PROPIEATARIOS
where Nombre = 'Juan Manuel'
)

set @Id_Termino = (
select Id_Termino
from TERMINOS
where Nombre = 'Madrid'
)

exec dbo.usp_actualizar_casas_termino_propietario @Id_Termino, @Id_Propietario
go

How To Invoke a Stored Procedure with ADO Query Using VBA/C++/Java
http://support.microsoft.com/kb/q185125/

How To Call a Parameterized SQL Server Stored Procedure from ADO
http://support.microsoft.com/kb/195047

ADO Stored Procedures
http://authors.aspalliance.com/stev...sprocs.asp


AMB

"Rebeca Abella" wrote:

Mostrar la cita
Ads by Google
Search Busqueda sugerida