Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Bases de données
Bases de données Vos questions concernant les bases de données (BDE, Access, SqlServer...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 10/11/2012, 19h57   #1
medreg
 
Inscription : juin 2006
Messages : 82
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 82
Points : -32
Points : -32
Par défaut Comment imprimer le contenu d'un tableau dans un document, comme indiqué ci dans l'image

Bonjour à tous
version de langage 'delphi7' base des données absolute database
Puis-je Imprime la table de contenu de deux parties
Une partie des dépenses et une partie des Recette

l'impression suivant des conditions
voila mes conditions
si le valeur de chapitre ='900' et le valeur de Type = 'Depense'
Imprimer les enregistrements qui contiennent ces valeurs sujet dans la première partie sur la table dessiné en papier

si le valeur de chapitre ='900' et le valeur de Type = 'Recette'
Imprimer les enregistrements qui contiennent ces valeurs sujet dans la Deuxiemepartie sur la table dessiné en papier

Selon la photo ci-jointe
Et comment puis-je faire cela?
medreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2012, 08h01   #2
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 273
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 273
Points : 7 535
Points : 7 535
Rien de très compliqué si ce n'est que les totaux se trouvent au début

une des solutions , une query en forme d'union
Code SQL :
1
2
3
4
5
6
 
SELECT 2,Type,chp,art,montant FROM latable WHERE chap='900' 
ORDER BY chap,typ
UNION
SELECT 1,type,'0','0',SUM(montant) FROM latable WHERE chap='900'
GROUP BY 1,2,3

à partir de là , selon le générateur d'état (rave , quickreport ?) la suite est facile

autre solutions possibles selon le type de générateur d'état
Quickreport
avec une query sur la table
Code SQL :
SELECT type,chp,art,montant FROM latable WHERE chap='900' ORDER BY Type
et une query qui sera utilisée dans un évenement de bande
Code SQL :
1
2
 
SELECT SUM(MONTANT) FROM LATABLE WHERE chap='900' AND type=:type
un Quickreport 'simple' avec une bande détail et une bande GroupeHeader
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2012, 12h26   #3
medreg
 
Inscription : juin 2006
Messages : 82
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 82
Points : -32
Points : -32
Citation:
Envoyé par SergioMaster Voir le message
Rien de très compliqué si ce n'est que les totaux se trouvent au début

une des solutions , une query en forme d'union
Code SQL :
1
2
3
4
5
6
 
SELECT 2,Type,chp,art,montant FROM latable WHERE chap='900' 
ORDER BY chap,typ
UNION
SELECT 1,type,'0','0',SUM(montant) FROM latable WHERE chap='900'
GROUP BY 1,2,3

à partir de là , selon le générateur d'état (rave , quickreport ?) la suite est facile
Merci mon frère pour l'aide
Mais qu'est-ce que tu veux dire une query en forme d'Union?
et est ce que les cinq ligne sont à porter sur le même query
Je ne comprenais pas le sens de cette
medreg est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 11/11/2012, 13h55   #4
tourlourou
Modérateur
 
Avatar de tourlourou
 
Homme Yves Lemaire
Biologiste ; Progr(amateur)
Inscription : mars 2005
Messages : 1 721
Détails du profil
Informations personnelles :
Nom : Homme Yves Lemaire
Âge : 50
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Biologiste ; Progr(amateur)

Informations forums :
Inscription : mars 2005
Messages : 1 721
Points : 3 326
Points : 3 326
Le résultat de la requête est la réunion de 2 sous-requêtes liées par le mot clé UNION et agencées de manière à respecter l'ordre imposé de présentation (GROUP BY : n'y a-t-il d'ailleurs pas un 3 en trop ?).

Il n'y a bien qu'une seule requête, "complexe".

Par contre, je ne sais pas comment utiliser son résultat dans un générateur d'états.
__________________
Delphi 5 Pro et Code Typhon 2.80 sous Win 7 64 bits - Code Typhon 2.70 / Ubuntu 12.04 64 bits
tourlourou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2012, 17h30   #5
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 273
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 273
Points : 7 535
Points : 7 535
Citation:
Envoyé par tourlourou Voir le message
GROUP BY : n'y a-t-il d'ailleurs pas un 3 en trop ?
.
En fait non , il manquerait même un 4

Code :
1
2
3
4
SELECT 2,Type,chp,art,montant FROM latable WHERE chap='900' 
UNION
SELECT 1,type,'0','0',SUM(montant) FROM latable WHERE chap='900'
GROUP BY 1,2,3,4
1 , la constante , 2 le type , 3 la chapitre, 4 l'article (il suffit de compter le nombre de champ

Ce SQL devrais suffire
Code :
1
2
3
4
SELECT Type,chp,art,montant FROM latable WHERE chap='900' 
UNION
SELECT type,'0','0',SUM(montant) FROM latable WHERE chap='900'
GROUP BY 1,2,3
en fait d'ailleurs en y réfléchissant , je ne suis pas convaincu du bien fondé de la constante (il aurait fallu que je fasse un fichier d'essai mais on est Dimanche ) mis au départ pour des questions de tri

Citation:
Par contre, je ne sais pas comment utiliser son résultat dans un générateur d'états.
tout dépend du générateur , (que ce soit rave ou quickreport : il s'agit d'un état détail 'simple', facilement généré par un Wizard) , ce qui peut changer c'est ensuite pour la mise en forme
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2012, 20h08   #6
medreg
 
Inscription : juin 2006
Messages : 82
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 82
Points : -32
Points : -32
bonsoir
voila l'exemple pour ajouter le code qui vous avez transferer
je mais un exemple dans le quickrep pour le résultat qui je besoin
veuillez mr. porter le code qui vous avez donnée sur l'exemple ci-joint
et merçi bcp
medreg est déconnecté   Envoyer un message privé Réponse avec citation 03
Vieux 12/11/2012, 07h49   #7
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 273
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 273
Points : 7 535
Points : 7 535
Par défaut Coup de Gueule

Il ne faut pas exagérer , je ne suis pas là pour faire l'état à votre place
Vous n'avez même pas posé un TQuery

Avez vous seulement testé la query proposée ? je doute car vous l'auriez essayé (ce que j'ai fait avec votre table) vous auriez pu me signaler qu'elle était fausse ! le fait que ce soit sur une table de type Paradox donne une erreur de différence de type ( avec Absolute Database , je ne sais même pas si l'on peut faire des querys !!)


Vous avez un quickreport sans aucune liaison a un datasource, ni a des données (je ne vois que des TQRLabel alors que je devrais voir des QRDBText et plein de Tshapes totalement inutiles dans un premier temps (ce n'est que de l'habillage).

pour toutes ces raisons je vous mets un zéro pointé
un de plus
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 40
Vieux 12/11/2012, 08h28   #8
medreg
 
Inscription : juin 2006
Messages : 82
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 82
Points : -32
Points : -32
Citation:
Envoyé par SergioMaster Voir le message
Il ne faut pas exagérer , je ne suis pas là pour faire l'état à votre place
Vous n'avez même pas posé un TQuery

Avez vous seulement testé la query proposée ? je doute car vous l'auriez essayé (ce que j'ai fait avec votre table) vous auriez pu me signaler qu'elle était fausse ! le fait que ce soit sur une table de type Paradox donne une erreur de différence de type ( avec Absolute Database , je ne sais même pas si l'on peut faire des querys !!)


Vous avez un quickreport sans aucune liaison a un datasource, ni a des données (je ne vois que des TQRLabel alors que je devrais voir des QRDBText et plein de Tshapes totalement inutiles dans un premier temps (ce n'est que de l'habillage).

pour toutes ces raisons je vous mets un zéro pointé
un de plus
merçi bcp
desolé base de donnée de teste c'est paradox
mais j'ai utilisé l'absolute database dans mes projets
ces tentatives
Mais ce n'est pas ce que je voulais
Qu'est-ce que l'ambition d'être le résultat comme indiqué dans le Quickrep1
medreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 08h33   #9
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 273
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 273
Points : 7 535
Points : 7 535
ce sql
Code :
1
2
3
4
5
select 0 as N,type,min(chp),min(art),sum(montant) from testedb
group by type
UNION 
Select 1,type,chp,art,montant from testedb
ORDER by Type,n
fonctionne

Citation:
Qu'est-ce que l'ambition d'être le résultat comme indiqué dans le Quickrep1
avec cette query il est possible d'obtenir le résultat souhaité (si j'ai bien compris la question mal traduite
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 13h09   #10
medreg
 
Inscription : juin 2006
Messages : 82
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 82
Points : -32
Points : -32
Citation:
Envoyé par SergioMaster Voir le message
ce sql
merçi bcp de votre aide
j'ai utilisé le code qui vous avez donné et sa marche bien mais y a un probleme pour les deux colonne de total
comment remplaces les deux valeur (chp ET art) par le mot TOTAL DEPENSE et le meme pour TOTAL RECETTE suivant image ci joint
Images attachées
Type de fichier : gif exemple_01.GIF (10,6 Ko, 18 affichages)
Fichiers attachés
Type de fichier : rar Teste.rar (722,4 Ko, 12 affichages)
medreg est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 12/11/2012, 14h29   #11
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 273
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 273
Points : 7 535
Points : 7 535
l'évènement beforeprint de la bande détail ou de la valeur est là pour ça
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 21h23   #12
medreg
 
Inscription : juin 2006
Messages : 82
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 82
Points : -32
Points : -32
Citation:
Envoyé par SergioMaster Voir le message
l'évènement beforeprint de la bande détail ou de la valeur est là pour ça
Je ne comprends pas ce que vous entendez
Que voulez-vous dire?
medreg est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 13/11/2012, 07h29   #13
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 273
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 273
Points : 7 535
Points : 7 535
Une bande détail un évènement OnBeforeprint . Le SQL donne une valeur (N) permettant de savoir si c'est un 'enregistrement de total' valeur 0 ou 'détail' valeur 1
il est facile de faire un traitement particulier
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.DetailBandBeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
if Query1.FieldByName('N').asInteger=0 then
 begin
    QRLabel1.Enabled; // rend un champ visible
    Color:=clSilver;     // change la couleur de la bande
 end
else begin
    QRLabel1.Disabled; // rend le champ invisible
    Color:=clWhite;  
end;
end;
etc...

sur un QRLabel, ou QRDBText on peut également utiliser l'évènement onPrint
et jouer sur la Valeur a imprimer, exemples :
Code :
1
2
3
4
5
procedure TForm1.QRLabel1Print(sender: TObject; var Value: String);
begin
if Value='DEPENSE' then value:=''; // cache la valeur
if Query1.FieldByName('N').asInteger=0 then value:='Intitulé';  
end;
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2012, 08h09   #14
medreg
 
Inscription : juin 2006
Messages : 82
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 82
Points : -32
Points : -32
Citation:
Envoyé par SergioMaster Voir le message
Une bande détail un évènement OnBeforeprint . Le SQL donne une valeur (N) permettant de savoir si c'est un 'enregistrement de total' valeur 0 ou 'détail' valeur 1
il est facile de faire un traitement particulier
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.DetailBandBeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
if Query1.FieldByName('N').asInteger=0 then
 begin
    QRLabel1.Enabled; // rend un champ visible
    Color:=clSilver;     // change la couleur de la bande
 end
else begin
    QRLabel1.Disabled; // rend le champ invisible
    Color:=clWhite;  
end;
end;
etc...

sur un QRLabel, ou QRDBText on peut également utiliser l'évènement onPrint
et jouer sur la Valeur a imprimer, exemples :
Code :
1
2
3
4
5
procedure TForm1.QRLabel1Print(sender: TObject; var Value: String);
begin
if Value='DEPENSE' then value:=''; // cache la valeur
if Query1.FieldByName('N').asInteger=0 then value:='Intitulé';  
end;
merçi mr. " SergioMaster " de votre aides

mai j'ai un problème
regarder sur la résultat qui s'affiche dans le quickrep svp
pour quoi s'affice dans le premier total et le deuxieme total le meme titre
qu'est ce qui manque dans le code
je veux l'affichage de premier total "'total depense"
et le deuxieme total "total recette"
et merçi pour tout
Fichiers attachés
Type de fichier : rar Teste.rar (788,8 Ko, 17 affichages)
medreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2012, 14h23   #15
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 273
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 273
Points : 7 535
Points : 7 535
il n'y a rien de plus c...t que de downloader un rar pour voir un source !

Code :
1
2
3
4
5
6
7
8
 
procedure TForm2.QRLabel34Print(sender: TObject; var Value: String);
begin
if Value='DEPENSE' then value:=''; // cache la valeur
if Form1.Q1.FieldByName('N').asInteger=0 then value:='TOTAL DEPENSE';
if Value='RECETTE' then value:=''; // cache la valeur
if Form1.Q1.FieldByName('N').asInteger=0 then value:='TOTAL RECETTE';
end;
que voit-on ? que on teste 2 fois la même condition
if Form1.Q1.FieldByName('N').asInteger=0 pour donner 2 valeurs différentes , donc seule la dernière ( value:='TOTAL RECETTE' sera prise en compte

Franchement vous n'avez pas fait beaucoup d'efforts de compréhension ! en recopiant mon code qui n'était là qu'a titre d'exemple et non a titre de solution
Citation:
Envoyé par sergiomaster
sur un QRLabel, ou QRDBText on peut également utiliser l'évènement onPrint
et jouer sur la Valeur a imprimer, exemples
QRLabel34 aurait du être un QRDBText lié au champ type , ainsi il suffirait de mettre le code suivant (solution)
Code :
1
2
3
4
5
6
 
procedure TForm2.QRLabel34Print(sender: TObject; var Value: String);
begin
if Form1.Q1.FieldByName('N').asInteger=0 then value:='TOTAL '+Value
else Value:='';
end;
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/11/2012, 21h38   #16
medreg
 
Inscription : juin 2006
Messages : 82
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 82
Points : -32
Points : -32
Citation:
Envoyé par SergioMaster Voir le message
QRLabel34 aurait du être un QRDBText lié au champ type , ainsi il suffirait de mettre le code suivant (solution)
Code :
1
2
3
4
5
6
 
procedure TForm2.QRLabel34Print(sender: TObject; var Value: String);
begin
if Form1.Q1.FieldByName('N').asInteger=0 then value:='TOTAL '+Value
else Value:='';
end;
J'ai mis le code que vous m'avez donné et supprimé "QRDBText1" et mettre en place des "QRLabel34"
Mais il ya un autre problème
Voir l'image
Images attachées
Type de fichier : gif image_teste.GIF (5,7 Ko, 11 affichages)
medreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 07h17   #17
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 273
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 273
Points : 7 535
Points : 7 535
je ne vois pas le problème , il y a 900 a la place de 'DEPENSE' OU 'RECETTE' (d'ailleurs il aurait fallu y rajouter un S) c'est tout simplement que ce n'est pas le champ TYPE qui a été lié mais Chap (si le SQL est toujours le même)
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2012, 14h15   #18
medreg
 
Inscription : juin 2006
Messages : 82
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 82
Points : -32
Points : -32
Citation:
Envoyé par SergioMaster Voir le message
je ne vois pas le problème , il y a 900 a la place de 'DEPENSE' OU 'RECETTE' (d'ailleurs il aurait fallu y rajouter un S) c'est tout simplement que ce n'est pas le champ TYPE qui a été lié mais Chap (si le SQL est toujours le même)
ou j'ajoute le S
Bien sûr, le SQL toujour le même
medreg est déconnecté   Envoyer un message privé Réponse avec citation 03
Vieux 01/12/2012, 16h02   #19
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 273
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 273
Points : 7 535
Points : 7 535
no comment !
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/12/2012, 18h56   #20
medreg
 
Inscription : juin 2006
Messages : 82
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 82
Points : -32
Points : -32
Citation:
Envoyé par SergioMaster Voir le message
no comment !
Merci et désolé pour le dérangement
medreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h16.


 
 
 
 
Partenaires

Hébergement Web