Suite

Créer une clé primaire et étrangère sur Spatialite

Créer une clé primaire et étrangère sur Spatialite


J'essaye de créer une base de données sur spatialite (pour diverses raisons, je ne peux pas utiliser PostGis). J'ai besoin de lier une table à une autre à l'aide d'une clé étrangère. Le problème avec la spatialite c'est qu'il n'est pas possible de définir une clé primaire par la suite, donc je crée une nouvelle table (tMAJ_TBE_REB_15₂) avec la clé primaire " C_SGE_15 " (c'est un champ sans valeur nulle, et des valeurs uniques) et puis j'essaye pour copier le contenu de l'autre (qui a la clé primaire PUIK par défaut).

Lorsque je lance cette commande, j'obtiens ce message d'erreur.

Une erreur est apparue lors de l'exécution du code Python : Traceback (plus recent call last): File "C:/Documents and Settings/XXXXXXX/.qgis2/python/pluginsQspatiaLiteQspatiaLiteApp.py", ligne 178, in runQuery header,data=self.db.executeQuery(query) File "C:/Documents and Settings/XXXXXXX/.qgis2/python/pluginsQspatiaLiteClassesDatabase.py", ligne 51, dans executeQuery cursor.execute(query ,params) IntegrityError : la colonne C_SGE_15 n'est pas unique Version de Python : 2.7.4 (default, Apr 6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)] Version de QGIS : 2.8.2-Wien Wien, 1b929ef Chemin vers Python : ['C:/Documents and Settings/XXXXXXX/.qgis2/python/pluginsprocessing', 'C:/PROGRA~1/QGISWI~1/apps/qgis/./python', u'C:/Documents and Settings/XXXXXXX/.qgis2/python', u'C:/Documents and Settings/XXXXXXX/.qgis2/python/plugins', 'C:/PROGRA~1/QGISWI~1/apps/ qgis/./python/plugins', 'C:PROGRA~1QGISWI~1inpython27.zip', 'C:PROGRA~1QGISWI~1apps Python27DLLs', 'C:PROGRA~1QGISWI~1appsP ython27lib', 'C:PROGRA~1QGISWI~1appsPython27libplat-win', 'C:PROGRA~1QGISWI~1 appsPython27liblib-tk', 'C:PROGRA~1QGISWI~1in', 'C:PROGRA~1QGISWI~1apps Python27', 'C:PROGRA~1QGISWI~1appsPython27libsite-packages', 'C:PROGRA~1QGISWI~1apps Python27libsite-packagesPIL', 'C:PROGRA~1QGISWI~1appsPython27libsite-packagesjinja2-2.7.2-py2 .7.egg', 'C:PROGRA~1QGISWI~1appsPython27libsite-packagesmarkupsafe-0.23-py2.7-win32.egg', 'C :PROGRA~1QGISWI~1appsPython27libsite-packagespython_dateutil-2.2-py2.7.egg', 'C:PROGRA~1QGISWI~ 1appsPython27libsite-packagespytz-2014.2-py2.7.egg', 'C:PROGRA~1QGISWI~1appsPython27lib site-packageswin32', 'C:PROGRA~1QGISWI~1appsPython27libsite-packageswin32lib', 'C: PROGRA~1QGISWI~1appsPython27libsite-packagesPythonwin', 'C:PROGRA~1QGISWI~1appsPython27lib site-packagesShapely-1.2.18-py2.7-win32.egg', 'C :PROGRA~1QGISWI~1appsPython27libsite-packagessix-1.6.1-py2.7.egg', 'C:PROGRA~1 QGISWI~1appsPython27libsite-packageswx-2.8-msw-unicode', u'C:/Documents and Settings/XXXXXXX/.qgis2//python', 'C: Documents and SettingsXXXXXXX.qgis2pythonpluginsDigitizingTools	ools', 'C:Documents and SettingsXXXXXXX.qgis2pythonpluginsmmqgis/ form', 'C:PROGRA~1QGISWI~1appsqgispythonpluginsfTools	ools', 'C:/XXX/MAJ_TBE_REB']

Pour résumer mon idée, j'aimerais avoir un lien vers une table géographique utilisant le champ C_SGE_15 vers une autre table tMAJ_TBE_REB_15₂ qui contient la description, etc. Le but après est de créer un formulaire facile à utiliser. Je le fais sur Qspatialite et Qgis 2.8.2.

CREER LA TABLE 'tMAJ_TBE_REB_15_2' ( 'C_SGE_09' TEXTE, 'MODIF_15' ENTIER, 'TypModif15' TEXTE, 'C_SGE_15' TEXTE NON NULL CLÉ PRIMAIRE, 'NOM_09' TEXTE, 'NOM_15'_15' TEXTE,' INTETBE, 'REB_09' ENTIER, 'REB_15' ENTIER, 'Espec_pres' TEXTE, 'Obs_2009', 'Obs_2015' TEXTE) INSÉRER DANS "tMAJ_TBE_REB_15_1" ( 'C_SGE_09', 'MODIF_15',', 'Typ15 , 'NOM_15', 'TBE_09', 'TBE_15', 'REB_09', 'REB_15', 'Espec_pres', 'Obs_2009', 'Obs_2015') 'NOM_09', 'NOM_15', 'TBE_09', 'TBE_15', 'REB_09', 'REB_15', 'Espec_pres', 'Obs_2009', 'Obs_2015', DE "Modifs_MAJ_TBE_REB_15"

Quelqu'un voit-il d'où vient l'erreur ?


Êtes-vous sûr qu'il n'y a pas de valeurs C_SGE_15 en double ? Vous pouvez vérifier avec :

SELECT Count(*) FROM "Modifs_MAJ_TBE_REB_15" AS t1 JOIN "Modifs_MAJ_TBE_REB_15" AS t2 ON t1.C_SGE_15 = t2.C_SGE_15 O t1.ROWID < t2.ROWID ;

Si vous obtenez un nombre > 0, vous avez plusieurs lignes avec le même C_SGE_15.


Voir la vidéo: Microsoft Access 2010 - Clés primaires et clés étrangères #A03