OVH Cloud OVH Cloud

Update selon critère

2 réponses
Avatar
gambi
Bonjour
J'ai une table : Table 1
Code * Ref * Valeur *
1 * a * riri *
1 * b * fifi *
1 * c * loulou *
2 * a * toto *
2 * b * fifi *
3 * b * riri *
3 * c * toto *

J'ai une autre table : Table 2
Ref * Valeur1 * Valeur2 * Valeur3 * Valeur4 * Valeur5 *
a * riri * fifi * loulou *
b * toto * fifi *
c * riri * toto *

Je veux mettre ce qui est dans Valeur de table 1 dans Valeur1 - Valeur 2 -
Valeur 3... de Table 2 à chaque changement de la colonne Ref de Table1.
Exemple :
1° ligne où Code = 1 dans Valeur1 pour Ref = a soit riri
2° ligne où Code = 1 dans Valeur1 pour Ref = b soit fifi
3° ligne où Code = 1 dans Valeur1 pour Ref = b soit loulou
1° ligne où Code = 2 dans Valeur2 pour Ref = a soit toto
2° ligne où Code = 2 dans Valeur2 pour Ref = b soit fifi
Je n'arrive à mettre à jour qu'une ligne à chaque fois ce qu'il m'oblige à
boucler sur les valeurs Code et Ref pour construire le critère dans mon code
Access.

Hors sujet
Pour corser le tout, Table 1 est en fait une requête sur des tables d'un
serveur SQL et Table 2 (celle à mettre à jour) est une table Access.
Comment puis-je faire ?

Merci de votre aide

2 réponses

Avatar
Fred Pichaut
C'est quelque chose comme ca que vous cherchez?
create table table1 (Code int, Ref char(1), Valeur char(10))
insert table1 values (1,'a','riri')
insert table1 values (1,'b','fifi')
insert table1 values (1,'c','loulou')
insert table1 values (2,'a','toto')
insert table1 values (2,'b','fifi')
insert table1 values (3,'b','riri')
insert table1 values (3,'c','toto')
create table table2 (Ref char(1),Valeur1 char(10) null,Valeur2 char(10)
null,Valeur3 char(10) null ,Valeur4 char(10) null)
insert table2(Ref,Valeur1,Valeur2,Valeur3) values
('a','riri','fifi','loulou')
insert table2(Ref,Valeur1,Valeur2) values ('b','toto','fifi')
insert table2(Ref,Valeur1,Valeur2) values ('c','riri','toto')
go
/* update en une passe*/
update table2 set
valeur1= (select valeur from table1 where code=1 and table1.ref=table2.ref),
valeur2= (select valeur from table1 where code=2 and table1.ref=table2.ref),
valeur3= (select valeur from table1 where code=3 and table1.ref=table2.ref),
valeur4= (select valeur from table1 where code=4 and table1.ref=table2.ref)
go
/* ou in trigger?*/
create trigger trig1 on table1 for update as
IF (COLUMNS_UPDATED() & 2) = 2
begin
declare @code int
select @code=code from inserted
if @code=1
begin
update table2 set valeur1=inserted.valeur from inserted where
table2.ref=inserted.ref
end
if @code=2
begin
update table2 set valeur2=inserted.valeur from inserted where
table2.ref=inserted.ref
end
if @code=3
begin
update table2 set valeur3=inserted.valeur from inserted where
table2.ref=inserted.ref
end
if @code=4
begin
update table2 set valeur3=inserted.valeur from inserted where
table2.ref=inserted.ref
end
end

ou je n'ai pas tout compris :)

Fred

--
Cdlt,

FP
"gambi" wrote in message
news:417bd6d4$0$32590$
Bonjour
J'ai une table : Table 1
Code * Ref * Valeur *
1 * a * riri *
1 * b * fifi *
1 * c * loulou *
2 * a * toto *
2 * b * fifi *
3 * b * riri *
3 * c * toto *

J'ai une autre table : Table 2
Ref * Valeur1 * Valeur2 * Valeur3 * Valeur4 * Valeur5 *
a * riri * fifi * loulou *
b * toto * fifi *
c * riri * toto *

Je veux mettre ce qui est dans Valeur de table 1 dans Valeur1 - Valeur 2 -
Valeur 3... de Table 2 à chaque changement de la colonne Ref de Table1.
Exemple :
1° ligne où Code = 1 dans Valeur1 pour Ref = a soit riri
2° ligne où Code = 1 dans Valeur1 pour Ref = b soit fifi
3° ligne où Code = 1 dans Valeur1 pour Ref = b soit loulou
1° ligne où Code = 2 dans Valeur2 pour Ref = a soit toto
2° ligne où Code = 2 dans Valeur2 pour Ref = b soit fifi
Je n'arrive à mettre à jour qu'une ligne à chaque fois ce qu'il m'oblige à
boucler sur les valeurs Code et Ref pour construire le critère dans mon


code
Access.

Hors sujet
Pour corser le tout, Table 1 est en fait une requête sur des tables d'un
serveur SQL et Table 2 (celle à mettre à jour) est une table Access.
Comment puis-je faire ?

Merci de votre aide





Avatar
gambi
Bonjour
Je fais déjà ça.
Je voulais tout envoyer d'un coup dans la nouvelle table car autrement j'ai
plusieurs problèmes.
1 - je construit ma chaîne par code et cette manipulation est très longue
(la base fait plus de 3 GO).
J'ai aussi rencontré d'autre problèmes avec ce type d'ordre, quand la valeur
contient une cote ben la ligne est bien sûr refusé.
J'ai un problème de temps d'accés et si je dois tester toutes les valeurs
pour doubler les cotes je suis pas rendu.
Je cherchais qualque chose du style Update table2.Colonne1 select
Table1.Colonne1.
cad envoyer toute la colonne1 de table1 dans colonne1 de table2
Merci pour votre réponse rapid eet efficace.

Gambi

"Fred Pichaut" a écrit dans le message de
news:
C'est quelque chose comme ca que vous cherchez?
create table table1 (Code int, Ref char(1), Valeur char(10))
insert table1 values (1,'a','riri')
insert table1 values (1,'b','fifi')
insert table1 values (1,'c','loulou')
insert table1 values (2,'a','toto')
insert table1 values (2,'b','fifi')
insert table1 values (3,'b','riri')
insert table1 values (3,'c','toto')
create table table2 (Ref char(1),Valeur1 char(10) null,Valeur2 char(10)
null,Valeur3 char(10) null ,Valeur4 char(10) null)
insert table2(Ref,Valeur1,Valeur2,Valeur3) values
('a','riri','fifi','loulou')
insert table2(Ref,Valeur1,Valeur2) values ('b','toto','fifi')
insert table2(Ref,Valeur1,Valeur2) values ('c','riri','toto')
go
/* update en une passe*/
update table2 set
valeur1= (select valeur from table1 where code=1 and


table1.ref=table2.ref),
valeur2= (select valeur from table1 where code=2 and


table1.ref=table2.ref),
valeur3= (select valeur from table1 where code=3 and


table1.ref=table2.ref),
valeur4= (select valeur from table1 where code=4 and


table1.ref=table2.ref)
go
/* ou in trigger?*/
create trigger trig1 on table1 for update as
IF (COLUMNS_UPDATED() & 2) = 2
begin
declare @code int
select @code=code from inserted
if @code=1
begin
update table2 set valeur1=inserted.valeur from inserted where
table2.ref=inserted.ref
end
if @code=2
begin
update table2 set valeur2=inserted.valeur from inserted where
table2.ref=inserted.ref
end
if @code=3
begin
update table2 set valeur3=inserted.valeur from inserted where
table2.ref=inserted.ref
end
if @code=4
begin
update table2 set valeur3=inserted.valeur from inserted where
table2.ref=inserted.ref
end
end

ou je n'ai pas tout compris :)

Fred

--
Cdlt,

FP
"gambi" wrote in message
news:417bd6d4$0$32590$
> Bonjour
> J'ai une table : Table 1
> Code * Ref * Valeur *
> 1 * a * riri *
> 1 * b * fifi *
> 1 * c * loulou *
> 2 * a * toto *
> 2 * b * fifi *
> 3 * b * riri *
> 3 * c * toto *
>
> J'ai une autre table : Table 2
> Ref * Valeur1 * Valeur2 * Valeur3 * Valeur4 * Valeur5 *
> a * riri * fifi * loulou *
> b * toto * fifi *
> c * riri * toto *
>
> Je veux mettre ce qui est dans Valeur de table 1 dans Valeur1 - Valeur


2 -
> Valeur 3... de Table 2 à chaque changement de la colonne Ref de Table1.
> Exemple :
> 1° ligne où Code = 1 dans Valeur1 pour Ref = a soit riri
> 2° ligne où Code = 1 dans Valeur1 pour Ref = b soit fifi
> 3° ligne où Code = 1 dans Valeur1 pour Ref = b soit loulou
> 1° ligne où Code = 2 dans Valeur2 pour Ref = a soit toto
> 2° ligne où Code = 2 dans Valeur2 pour Ref = b soit fifi
> Je n'arrive à mettre à jour qu'une ligne à chaque fois ce qu'il m'oblige


à
> boucler sur les valeurs Code et Ref pour construire le critère dans mon
code
> Access.
>
> Hors sujet
> Pour corser le tout, Table 1 est en fait une requête sur des tables d'un
> serveur SQL et Table 2 (celle à mettre à jour) est une table Access.
> Comment puis-je faire ?
>
> Merci de votre aide
>
>
>