Page 1 sur 1

Requetes SQL Ville, Departement, CP

MessagePosté: 03 Jan 2012, 10:35
de lasmarco
Bonjour,

Voilà je suis nouveau sur le forum, et avant tout de chose je vous souhaite pleins de bonnes choses pour cette nouvelle année.

Je viens vers vous car n'ayant pas trop de connaissance sur SQL et sur BOA, je souhaiterais avoir la requête SQL qui me permettrais d'ajouter le département en fonction de la ville et/ou du code postal.

Car je me suis aperçu que la plupart des départements n'étaient pas enregistrés.

Merci d'avance,

Re: Requetes SQL Ville, Departement, CP

MessagePosté: 04 Jan 2012, 12:31
de DDdeberdeux
Bonjour,

La solution la plus simple si vous n'avez pas trop de lieux favoris est encore d'utiliser la fonction "Modifier ce lieu favori" qui a l'avantage de mettre à jour tous les champs du lieu.
Sinon, vous pouvez utiliser la requête suivante pour mettre à jour tous les départements français:
Code: Tout sélectionner
update evenements_ind e
set e.ev_ind_dept=
(select first(1) r.rdp_libelle
from ref_departements r
where r.rdp_code_deux=substring(e.ev_ind_insee from 1 for 2))
where char_length(e.ev_ind_dept)=0
and e.ev_ind_pays='FRANCE'
and e.ev_ind_kle_dossier=4

dans cet exemple limité au dossier 4.
A recommencer en changeant _ind_ en _fam_ pour l'appliquer aux événements familiaux.
Pour les autres pays, c'est plus délicat car il faut connaitre la structure des codes INSEE ou équivalent, ou se baser uniquement sur le nom de la ville.

André

Re: Requetes SQL Ville, Departement, CP

MessagePosté: 04 Jan 2012, 13:46
de lasmarco
Merci André pour votre réponse !

En fait j'ai réussi à me dépatouiller avec ces deux requêtes:
1/ Elle concerne la mise à jour des champs Départements pour les naissances et décès - en remplaçant chaque CP par le département associé
Code: Tout sélectionner
UPDATE EVENEMENTS_IND
SET EV_IND_DEPT = 'Cher'
WHERE EV_IND_CP LIKE '18%'


2/ Elle concerne la mise à jour des champs Départements pour les mariages - en remplaçant chaque CP par le département associé
Code: Tout sélectionner
UPDATE EVENEMENTS_FAM
SET EV_FAM_DEPT = 'Cher'
WHERE EV_FAM_CP LIKE '18%'


Marc

Re: Requetes SQL Ville, Departement, CP

MessagePosté: 04 Jan 2012, 15:13
de DDdeberdeux
Vos requêtes fonctionnent évidemment, mais elles ont plusieurs inconvénients:
-elles doivent être répétées autant de fois qu'il y a de départements dans votre généalogie,
-elles ne garantissent pas que vous utilisez pour le nom du département la même orthographe que dans la table de référence,
-se baser sur le CP, c'est oublier que certaines communes sont rattachées à un bureau de poste du département limitrophe,
-elles "écrasent" une information existante, pouvant la remplacer par une erronée dans le cas ci-dessus,
-si votre base comprend plusieurs dossiers, tous sont modifiés même si un seul est concerné.

André

Re: Requetes SQL Ville, Departement, CP

MessagePosté: 06 Jan 2012, 07:40
de lasmarco
Bonjour André,

Effectivement, je suis d'accord avec vous, même si dans mon cas je n'ai qu'un seul dossier.

Par contre, j'ai essayé votre requête et malheureusement, elle bloque sur le "select". J'ai bien sur pris la précaution de remplacer le dossier 4 par mon numéro de dossier.

Marc

Re: Requetes SQL Ville, Departement, CP

MessagePosté: 06 Jan 2012, 09:43
de DDdeberdeux
Bonjour,

Effectivement il y a un problème, mais pas dans le select. La fonction char_length(x) retourne bien 0 si x est une chaîne vide, mais pas si x est null.
Dans la requête, remplacez char_length(e.ev_ind_dept)=0 par
(trim(e.ev_ind_dept)='' or e.ev_ind_dept is null)
trim(e.ev_ind_dept)='' permet de retrouver les enregistrements où le département est une chaîne vide ou constituée uniquement d'espaces.

André

Re: Requetes SQL Ville, Departement, CP

MessagePosté: 06 Jan 2012, 15:23
de lasmarco
André,

Me voilà confronté encore avec le même message d'erreur!

Voilà la requête complète modifié par le code que tu m'as gentiment donné
Code: Tout sélectionner
update evenements_ind e
set e.ev_ind_dept=
(select first(1) r.rdp_libelle
from ref_departements r
where r.rdp_code_deux=substring(e.ev_ind_insee from 1 for 2))
where (trim(e.ev_ind_dept)='' or e.ev_ind_dept is null)
and e.ev_ind_pays='FRANCE'
and e.ev_ind_kle_dossier=1


Marc

Re: Requetes SQL Ville, Departement, CP

MessagePosté: 06 Jan 2012, 16:51
de DDdeberdeux
La requête me semble correcte et chez moi elle fonctionne sans problème. Il est vrai que je n'utilise pas le BOA mais IBExpert avec la version serveur de Firebird.
Quel est le texte du message d'erreur dont vous parlez?
Avec le BOA, il ne faut pas cliquer sur le bouton "Exécuter requête" mais sur "Exécuter procédure" pour toutes les requêtes de types INSERT UPDATE qui ne retournent pas d'enregistrement.
"Exécuter requête" n'est à utiliser qu'avec des requêtes SELECT qui attendent des enregistrement en retour. C'est sans doute l'origine du message dont vous parlez.

André

Re: Requetes SQL Ville, Departement, CP

MessagePosté: 06 Jan 2012, 18:58
de lasmarco
Grâce à votre aide, j'ai enfin réussi à exécuter cette requête sans problème.

Un grand merci à vous!

Marc