2009-04-17 3 views
2

Tous,Erreur de requête d'accès - Types de données Null & Variant - Comment corriger cette erreur?

Cette erreur me rend folle. J'ai passé 2 heures à essayer de comprendre et/ou de contourner cela sans aucune chance. Voici l'erreur:

"Vous avez essayé d'affecter la valeur NULL à une variable qui n'est pas un type de données Variant."

Voici mon SQL:

SELECT tbl_budir_002.Location_Index, tbl_parent_001.NEWPARENTID 
INTO tbl_budir_003 
FROM (tbl_budir_002 
    LEFT JOIN qry_parent_003 
     ON tbl_budir_002.Location_Index = qry_parent_003.Location_Index) 
    LEFT JOIN tbl_parent_001 
     ON qry_parent_003.PARENTNAME = tbl_parent_001.PARENTNAME; 

Je pense que la complication arrive à ce point - tbl_parent_001 a été créé par un groupe par une autre table plus grande (pour singulariser les dossiers de NomParent). Je devais entrer manuellement dans la table et assigner le champ NEWPARENTID comme type autonumber afin que je puisse donner les clés primaires des enregistrements PARENTNAME. Maintenant, lorsque j'exécute la requête, j'obtiens l'erreur ci-dessus. Je suppose que c'est le numéro automatique qui me cause des problèmes, mais je ne connais pas d'autre moyen de créer une clé primaire en utilisant une requête. Donc, j'ai besoin d'aide sur deux choses: (1) atténuer l'erreur étant donné ma configuration de requête actuelle et (2) trouver une meilleure façon de créer une clé primaire plutôt que de l'entrer manuellement via la vue de conception de la table.

Merci, Noah

+1

Le type de données Variant est en VBA et non dans les tables de données. Donc, vous devez exécuter du code quelque part et pas seulement SQL. Pouvez-vous clarifier? –

Répondre

0

Il semble que votre problème peut être le LEFT JOIN. Puisque vous insérez dans une table qui n'existe pas encore l'accès peut essayer de définir la colonne NEWPARENTID comme une clé primaire. essayez d'exécuter la requête en tant que JOIN pour voir si vous obtenez la même erreur. Vous pouvez également essayer d'abord de créer la table manuellement puis de l'insérer afin qu'Access n'ait pas à deviner ce que vous voulez.

0

OK, vous devrez tenir compte des valeurs nulles dans votre base de données. Ce n'est pas difficile, mais ça peut parfois être ennuyeux. Vous ne pouvez pas implicitement convertir un null en texte comme vous pouvez le faire avec un nombre. Utilisez nz - Null To Zero. Si le remplacement est du texte, utilisez « », si le numéro comme ci-dessous, utilisez 0. par exemple nz(myText,"") or nz(myNumber,0)

SELECT nz(tbl_budir_002.Location_Index,0), 
     nz(tbl_parent_001.NEWPARENTID ,0)... 

Vous pouvez également utiliser IsNull() mais pas aussi pratique que vous devez utiliser une instruction conditionnelle le mettre à autre chose. J'utilise isnull sur les critères et nz sur tout le reste.

iif(isnull(tbl_budir_002.Location_Index),0,tbl_budir_002.Location_Index) 

Amusez-vous.

4

Voici ce qui se passe: http://support.microsoft.com/kb/197587. Outre Access 2000, les informations de la base de connaissances s'appliquent au moins à Access 2002 à partir de mon expérience. Au-delà des méthodes de contournement 1 et 2, si votre solution peut le supporter, j'ai réussi à envelopper mon champ autonumber dans NZ().

+0

Le même problème se pose dans Access 97 lorsque la colonne est définie comme 'non null' dans la base de données et que vous supprimez la valeur' string' dans le formulaire. Access 97 requiert que les colonnes liées à un champ chaîne soient déclarées 'varchar ([longueur]) null' –

Questions connexes