[Résolu] Erreur requête MySQL : Parameter index out of range

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
Neelix
Membre lOOyal
Membre lOOyal
Messages : 31
Inscription : 13 sept. 2015 08:03

[Résolu] Erreur requête MySQL : Parameter index out of range

Message par Neelix »

Bonjour,

Avec Base connecté à une BdD MySQL, j'obtiens l'erreur 'Parameter index out of range (2>number of parameters, which is 1)'

Je précise que j'ai crée une requête contenant une requête paramétrée crée sous Base.

Quelqu'un aurait-il une idée SVP ?
Dernière modification par Oukcha le 03 mars 2020 10:52, modifié 1 fois.
OpenOffice 4.1.7 sous Xubuntu 18.04
Jeff
GourOOu
GourOOu
Messages : 9608
Inscription : 18 sept. 2006 11:40
Localisation : France

Re: Parameter index out of range

Message par Jeff »

Bonjour,

As-tu déjà consulté les messages traitant d'erreurs similaires ? :
https://forum.openoffice.org/fr/forum/s ... t+of+range

A +
Neelix
Membre lOOyal
Membre lOOyal
Messages : 31
Inscription : 13 sept. 2015 08:03

Re: Connexion MySQL, erreur Parameter index out of range

Message par Neelix »

Oui, mais je ne trouve malheureusement pas de réponse à mon problème.
OpenOffice 4.1.7 sous Xubuntu 18.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: Connexion MySQL, erreur Parameter index out of range

Message par Dude »

Mme Irma a été frappée par le Coronavirus.

Joins donc :
  1. le texte de la requête retournant l'erreur
  2. un export synthétique des tables concernées (structures et données)
  3. des copies écran du résultat obtenu / escompté
Neelix
Membre lOOyal
Membre lOOyal
Messages : 31
Inscription : 13 sept. 2015 08:03

Re: Connexion MySQL, erreur Parameter index out of range

Message par Neelix »

Voici le texte de ma requête:

Code : Tout sélectionner

SELECT `SI`.`part_num` AS `num`, 
		`PA`.`name` AS `name`,
		`CA`.`name` AS `category`,
		`CO`.`name` AS `color`,
		`SI`.`quantity` AS `Quantiy`,
		`ST`.`quantity` - `SI`.`quantity` AS `missing`
FROM `lego`.`stock` AS `ST`,
	`lego`.`parts` AS `PA`,
	`lego`.`categories` AS `CA`,
	`lego`.`colors` AS `CO`,
	`set_inventory` AS `SI`
	WHERE `ST`.`part_id` = `PA`.`id`
		AND `PA`.`category_id` = `CA`.`id`
		AND `ST`.`color_id` = `CO`.`id`
		AND `SI`.`color_id` = `CO`.`id`
		AND `SI`.`part_num` = `PA`.`part_num`
		AND `SI`.`part_num`
			IN (
				SELECT `SI`.`part_num`
				FROM `SI`
					WHERE `ST`.`quantity` < `SI`.`quantity`
				)
et le texte de la requête paramétrée (qui fonctionne) (qui est nommée set_inventory):

Code : Tout sélectionner

SELECT `parts`.`part_num` AS `Part`,
		`parts`.`name` AS `Name`,
		`colors`.`name` AS `Color`,
		`inventory_parts`.`quantity` AS `Quantity`,
		`setlist`.`set_num` AS `Set`
FROM `lego`.`inventories` AS `inventories`,
	`lego`.`sets` AS `sets`,
	`lego`.`inventory_parts` AS `inventory_parts`,
	`lego`.`parts` AS `parts`,
	`lego`.`colors` AS `colors`,
	`lego`.`my_sets` AS `my_sets`,
	`lego`.`setlist` AS `setlist`
	WHERE `inventories`.`set_num` = `sets`.`set_num`
		AND `inventory_parts`.`inventory_id` = `inventories`.`id`
		AND `inventory_parts`.`part_num` = `parts`.`part_num`
		AND `inventory_parts`.`color_id` = `colors`.`id`
		AND `my_sets`.`set_id` = `sets`.`id`
		AND `setlist`.`set_id` = `sets`.`id`
		AND `setlist`.`set_num` = :SetNum

J'ai joint la capture d'écran, mais l'export est trop lourd pour être joint au post (9.6 Mo)


Le résultat doit être les colonnes part_num, name, Category, Color, la soustraction de quantité de l'inventaire du set - quantité en stock

En fait, il s'agît de calculer le nombre de pièces manquantes pour terminer un set de lego à partir de l'inventaire de ce set et des pièces que j'ai en stock.
OpenOffice 4.1.7 sous Xubuntu 18.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: Connexion MySQL, erreur Parameter index out of range

Message par Dude »

Neelix a écrit :mais l'export est trop lourd pour être joint au post (9.6 Mo)
Bien sûr, on ne te demande pas la totalité de la base.
Personne ici, n'a envie d'intégrer 10 Mo de données.
Tu fourniras donc un extrait significatif et exhaustif, permettant de reproduire le problème.
La limite de 500 ko d'informations me semble déjà amplement suffisant.
Neelix
Membre lOOyal
Membre lOOyal
Messages : 31
Inscription : 13 sept. 2015 08:03

Re: Connexion MySQL, erreur Parameter index out of range

Message par Neelix »

Voilà ma base exportée.
Pièces jointes
lego.odb
(2.4 Kio) Téléchargé 127 fois
Dernière modification par Neelix le 04 mars 2020 09:15, modifié 1 fois.
OpenOffice 4.1.7 sous Xubuntu 18.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: Connexion MySQL, erreur Parameter index out of range

Message par Dude »

Ce que tu fais ne sert à rien.
Ton ODB ne fait qu'un lien vers la source localisée sur ton disque.

Bis repetitae :
Dude a écrit :un export synthétique des tables concernées (structures et données)
Tu peux le faire en mode Console avec mysqldump par exemple.
Reporte toi sur la documentation de MySQL pour plus d'info.
Neelix
Membre lOOyal
Membre lOOyal
Messages : 31
Inscription : 13 sept. 2015 08:03

Re: Connexion MySQL, erreur Parameter index out of range

Message par Neelix »

Toutes mes excuses. Je viens de m'en rendre compte et j'ai modifié mon post.
OpenOffice 4.1.7 sous Xubuntu 18.04
Neelix
Membre lOOyal
Membre lOOyal
Messages : 31
Inscription : 13 sept. 2015 08:03

Re: Connexion MySQL, erreur Parameter index out of range

Message par Neelix »

Suite à un soucis avec ma bidouille avec hsqldb 2, je suis obligé de joindre 2 autres fichiers, sans lesquelles la base serait vide. Je joins donc un zip qui contient la base de donnée.
Pièces jointes
lego.zip
(4.12 Kio) Téléchargé 141 fois
OpenOffice 4.1.7 sous Xubuntu 18.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: Connexion MySQL, erreur Parameter index out of range

Message par Dude »

A quoi servent tes ODB ?
Si tu ne lis pas et ne fais pas ce qu'on te demande, on ne va pas avancer. :roll:

Voici un exemple de script permettant de créer ta table categorie et insérer des enregistrements :

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS categorie (
id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


INSERT INTO categorie VALUES(1,'Baseplates');
INSERT INTO categorie VALUES(3,'Bricks Sloped');
INSERT INTO categorie VALUES(4,'Duplo, Quatro and Primo');
INSERT INTO categorie VALUES(5,'Bricks Special');
INSERT INTO categorie VALUES(6,'Bricks Wedged');
INSERT INTO categorie VALUES(7,'Containers');
INSERT INTO categorie VALUES(8,'Technic Bricks');
Tu vois bien que ça n'a rien à voir avec ce que tu fournis.

Et tes clés primaires à base de VARCHAR, c'est pour dégrader les perfs ?
Neelix
Membre lOOyal
Membre lOOyal
Messages : 31
Inscription : 13 sept. 2015 08:03

Re: Connexion MySQL, erreur Parameter index out of range

Message par Neelix »

Saches que je suis débutant. Du coup, je commet quelques erreurs. Pour le coup je fais quoi ? J'envoie l'export au format SQL ou je les importe dans un odb ?

Quand aux clés primaires en varchar, ce n'est pas moi qui ai crée cette base, je n'ai fait qu'importer les tables et j'essaye d'en faire une base correcte.
OpenOffice 4.1.7 sous Xubuntu 18.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: Connexion MySQL, erreur Parameter index out of range

Message par Dude »

Neelix a écrit :Saches que je suis débutant.
Si tu es débutant, ne pars pas avec MySQL tout simplement.
Tu fournis un ODB au format natif HSQL avec tes tables intégrées.
Neelix
Membre lOOyal
Membre lOOyal
Messages : 31
Inscription : 13 sept. 2015 08:03

Re: Connexion MySQL, erreur Parameter index out of range

Message par Neelix »

J'ai beau chercher, je ne parviens pas à intégrer les tables SQL à mon odb. Ce n'est pourtant pas faute d'avoir travailler sous Base, mais c'est le genre de manip que je n'ai jamais eu besoin de faire.
OpenOffice 4.1.7 sous Xubuntu 18.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: Connexion MySQL, erreur Parameter index out of range

Message par Dude »

Ne cherche pas à intégrer mais crée directement tes tables pour faire ton jeu d'essai.
Neelix
Membre lOOyal
Membre lOOyal
Messages : 31
Inscription : 13 sept. 2015 08:03

Re: Connexion MySQL, erreur Parameter index out of range

Message par Neelix »

Mais c'est ce que j'ai fait dans mon précédent .odb. Sauf que je n'arrive pas recréer les relations telles qu'elles sont dans mysql. openoffice semble ne pas accepter certains types de relations. Sans compter qu'il manque des clés primaires dans certaines tables, ce qui fait qu'openoffice refuse de créer une relation à partir de ces mêmes tables. Je joins donc à nouveau un fichier odb.
Pièces jointes
test.odb
(9.31 Kio) Téléchargé 130 fois
OpenOffice 4.1.7 sous Xubuntu 18.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: Connexion MySQL, erreur Parameter index out of range

Message par Dude »

Il n'y a aucune requête dans ton ODB. :fou:
Neelix
Membre lOOyal
Membre lOOyal
Messages : 31
Inscription : 13 sept. 2015 08:03

Re: Connexion MySQL, erreur Parameter index out of range

Message par Neelix »

Effectivement, j'avais oublié les requêtes. Voilà la fichier modifié.
Pièces jointes
test.odb
(9.93 Kio) Téléchargé 122 fois
OpenOffice 4.1.7 sous Xubuntu 18.04
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Connexion MySQL, erreur Parameter index out of range

Message par jeanmimi »

Comme le notait Dude, tous les id sont de Type TEXT, dans la Table colors, un des Id est négatif
Ce qu'il faudrait, c'est que les Tables aient des ID_xxxx de Type INTEGER en AUTO-VALEUR.
Ensuite, vérifier que les Relations entre les Tables soient fonctionnelles et enfin construire des Requêtes.
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Neelix
Membre lOOyal
Membre lOOyal
Messages : 31
Inscription : 13 sept. 2015 08:03

Re: Connexion MySQL, erreur Parameter index out of range

Message par Neelix »

Avec de l'aide, je travaille en ce moment à optimiser ma base de donnée, car elle est loin d'être parfaite. Mais, en soi, la base est opérationnelle. J'ai déjà pas mal d'essai, en attendant qu'on examine ma base et me conseille, et mes requêtes fonctionnent toutes. Pour cette requête ci, je pense que ça provient de la requête paramétrée qu'elle appelle. Mais je ne vois pas bien comment régler le problème.
OpenOffice 4.1.7 sous Xubuntu 18.04
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Connexion MySQL, erreur Parameter index out of range

Message par jeanmimi »

Neelix a écrit :Pour cette requête ci, je pense que ça provient de la requête paramétrée qu'elle appelle. Mais je ne vois pas bien comment régler le problème.
Pour que les requêtes fonctionnent, il faut que les Tables puissent entrer en relation.
J'ai testé les deux qui étaient déjà affichées et ça n'a pas fonctionné.
Pièces jointes
Relations impossibles.jpg
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Neelix
Membre lOOyal
Membre lOOyal
Messages : 31
Inscription : 13 sept. 2015 08:03

Re: Connexion MySQL, erreur Parameter index out of range

Message par Neelix »

Je me doutais un peu que ça ne risquais pas de marcher, mais je n'arrive pas à recréer les relations telles qu'elles sont dans mySQL. openOffice semble plus limité.
OpenOffice 4.1.7 sous Xubuntu 18.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: Connexion MySQL, erreur Parameter index out of range

Message par Dude »

Neelix a écrit : openOffice semble plus limité.
Bon, on va arrêter de raconter n'importe quoi.
HSQL peut très bien utiliser des clés primaires en VARCHAR.
C'est juste contre-productif puisqu'on ne peut utiliser d'incrément automatique (autovaleur) dessus.

Ton problème est le même depuis le départ : tu ne lis pas (ou tu ne comprends pas) ce qu'on te demande.
Le langage SQL varie d'un SGBD à un autre et la syntaxe ne peut pas correspondre à 100%.
Alors si tu continues de mixer du MySQL avec du HSQL, tu vas dans le mur.

En plus, il y a des erreurs grossières dans l'ODB fourni :
  1. En HSQL, il est inutile de faire référence au nom de la base "lego".
  2. Dans ta requête "required_parts" , la table `set_inventory` n'existe pas.
  3. Sa colonne "id" est vide, comment veux-tu faire une jointure ?
  4. Dans ta requête "set_inventory", la table `setlist` n'existe pas.
  5. Aucune correspondance entre les tables "inventory_parts" et "parts" sur la colonne "part_num"
Capture.PNG
Je ne vois même pas comment ça pourrait marcher sous MySQL.
Donc arrête de faire des copier/coller bêtement, cela n'ira jamais.

Bref, reviens avec quelque chose d'exploitable et qui nous permette d'avancer sur l'erreur citée.
Pour ma part, j'arrête ici de gaspiller mon temps.
Bon courage.
Verrouillé