Bonsoir,

j'utilise ACCESS pour accéder à des données d'une base PostgreSQL v8.3.

J'explique le principe.

J'importe des données depuis ACCESS vers une table TBLGARANTIEEXCEL. Là tout se passe bien. Ensuite, j'importe les données (en supprimant les doublons) de cette table vers la table TBLGARANTIE en prenant soin de ne pas copier les données de la table TBLGARANTIEEXCEL qui se trouve déjà dans la table TBLGARANTIE.

J'ai écris la requête suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
INSERT INTO TBLGARANTIE ( NumeroGarantie, NumeroAgence, LibelleAgence, NumeroClient, NomClient, NumeroCompte, TypeEngagement, LibelleEngagement, NumeroEngagement, LibelleOperation, LibelleDesignation, MontantGarantie, MontantGarantieComptabilise, MontantEngagementDevise, MontantEngagementXof, DateCreation, DateEcheance, DateEcheanceInitiale, MatriculeUtilisateur, SituationGarantie, CodeNatureGarantie, LibelleNatureGarantie, Cih, RangCIH, NomNotaire, NomGarant, AdresseGarant, NumeroMarche, LibelleMarche )
SELECT DISTINCT TBLGARANTIEEXCEL.NUMGAR AS Expr1, TBLGARANTIEEXCEL.CODAGE AS Expr2, TBLGARANTIEEXCEL.LIBAGE AS Expr3, TBLGARANTIEEXCEL.CODCLI AS Expr4, TBLGARANTIEEXCEL.NOMCLI AS Expr5, TBLGARANTIEEXCEL.CPTGAR AS Expr6, TBLGARANTIEEXCEL.TYPENG AS Expr7, TBLGARANTIEEXCEL.LIBENG AS Expr8, TBLGARANTIEEXCEL.NUMENG AS Expr9, TBLGARANTIEEXCEL.LIBOPE AS Expr10, TBLGARANTIEEXCEL.LIBDES AS Expr11, TBLGARANTIEEXCEL.MONGAR AS Expr12, TBLGARANTIEEXCEL.MONCOM AS Expr13, TBLGARANTIEEXCEL.MONDEV AS Expr14, TBLGARANTIEEXCEL.MONXOF AS Expr15, TBLGARANTIEEXCEL.DATCRE AS Expr16, TBLGARANTIEEXCEL.DATECH AS Expr17, TBLGARANTIEEXCEL.DTECHI AS Expr18, TBLGARANTIEEXCEL.UTILIS AS Expr19, TBLGARANTIEEXCEL.LIBSIT AS Expr20, TBLGARANTIEEXCEL.CODNAT AS Expr21, TBLGARANTIEEXCEL.LIBNAT AS Expr22, TBLGARANTIEEXCEL.ETACIH AS Expr23, TBLGARANTIEEXCEL.RNGCIH AS Expr24, TBLGARANTIEEXCEL.NOMNOT AS Expr25, TBLGARANTIEEXCEL.NOMGAR AS Expr26, TBLGARANTIEEXCEL.ADRGAR AS Expr27, TBLGARANTIEEXCEL.CODMAR AS Expr28, TBLGARANTIEEXCEL.LIBMAR AS Expr29
FROM TBLGARANTIEEXCEL
WHERE (((TBLGARANTIEEXCEL.CODAGE) Not In (SELECT TBLGARANTIE.NumeroAgence FROM TBLGARANTIE)) AND ((TBLGARANTIEEXCEL.NUMGAR) Not In (SELECT TBLGARANTIE.NumeroGarantie FROM TBLGARANTIE)));
Seulement, j'obtiens l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
ODBC -- Echec d'insertion sur une table 'TBLGARANTIE' attachée.
ERROR: duplicate key value violates unique constraint "cleprimairetblgarantie";
Error while executing the query (#7)

Je sais bien que c'est un soucis avec la clé, mais je ne sais pas comment résoudre.

Pouvez vous m'aidez?


Récapitulatif - Ce que je dois faire:

Supprimer les doublons de la première table (TBLGARANTIEEXCEL). Ensuite importer toutes les données de cette table vers la deuxième table (TBLGARANTIE) en supprimant les données de la table TBLGARANTIEEXCEL qui existe déjà dans TBLGARANTIE.

Voici la structure des deux tables:

-- Table: "TBLGARANTIEEXCEL"

-- DROP TABLE "TBLGARANTIEEXCEL";

CREATE TABLE "TBLGARANTIEEXCEL"
(
"NumeroGarantieExcel" bigserial NOT NULL,
"CODAGE" character varying,
"LIBAGE" character varying,
"NUMGAR" character varying,
"CODCLI" character varying,
"NOMCLI" character varying,
"CPTGAR" character varying,
"TYPENG" character varying,
"LIBENG" character varying,
"NUMENG" character varying,
"MONDEV" numeric,
"MONXOF" numeric,
"MONGAR" numeric,
"MONCOM" numeric,
"DATCRE" date,
"DATECH" date,
"DTECHI" date,
"UTILIS" character varying,
"LIBSIT" character varying,
"NOMNOT" character varying,
"LIBOPE" character varying,
"CODNAT" character varying,
"LIBNAT" character varying,
"ETACIH" character varying,
"RNGCIH" character varying,
"LIBDES" character varying,
"NOMGAR" character varying,
"ADRGAR" character varying,
"CODMAR" character varying,
"LIBMAR" character varying,
CONSTRAINT cleprimairetblgarantieexcel PRIMARY KEY ("NumeroGarantieExcel")
)
WITH (OIDS=FALSE);
ALTER TABLE "TBLGARANTIEEXCEL" OWNER TO root;
COMMENT ON TABLE "TBLGARANTIEEXCEL" IS 'Cette table contient les informations contenues dans le fichier Excel avant leur intégration dans la base de données';
-- Table: "TBLGARANTIE"

-- DROP TABLE "TBLGARANTIE";

CREATE TABLE "TBLGARANTIE"
(
"NumeroGarantie" character varying NOT NULL,
"NumeroAgence" character varying NOT NULL,
"LibelleAgence" character varying,
"NumeroClient" character varying,
"NomClient" character varying,
"NumeroCompte" character varying,
"TypeEngagement" character varying,
"LibelleEngagement" character varying,
"NumeroEngagement" character varying,
"LibelleOperation" character varying,
"LibelleDesignation" character varying,
"MontantGarantie" numeric,
"MontantGarantieComptabilise" numeric,
"MontantEngagementDevise" numeric,
"MontantEngagementXof" numeric,
"DateCreation" date,
"DateEcheance" date,
"DateEcheanceInitiale" date,
"MatriculeUtilisateur" character varying,
"SituationGarantie" character(1),
"CodeNatureGarantie" character varying,
"LibelleNatureGarantie" character varying,
"Cih" character(1),
"RangCIH" character varying,
"NomNotaire" character varying,
"NomGarant" character varying,
"AdresseGarant" character varying,
"NumeroMarche" character varying,
"LibelleMarche" character varying,
"Archiver" character(1),
"UtilisateurArchivage" character varying,
"AdressePCArchivage" character varying,
"DateHeureArchivage" timestamp without time zone,
"NomPCArchivage" character varying,
"Sortir" character(1),
"MotifSortir" text,
"ServiceDemandeurSortir" integer,
"NomsDemandeurSortir" character varying,
"MatriculeDemandeur" character varying,
"DatePrevisionnelleRetour" date,
"UtilisateurSortir" character varying,
"AdressePCSortir" character varying,
"DateHeureSortir" timestamp without time zone,
"NomPCSortir" character varying,
"Supprimer" character(1),
"MotifSupprimer" text,
"UtilisateurSupprimer" character varying,
"AdressePCSupprimer" character varying,
"DateHeureSupprimer" timestamp without time zone,
"NomPCSupprimer" character varying,
CONSTRAINT cleprimairetblgarantie PRIMARY KEY ("NumeroAgence", "NumeroGarantie")
)
WITH (OIDS=FALSE);
ALTER TABLE "TBLGARANTIE" OWNER TO root;
COMMENT ON TABLE "TBLGARANTIE" IS 'Cette table recoit les donnees traitees de la table TBLGARANTIEEXCEL';