Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/12/2006, 22h41   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 41
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 41
Points : 11
Points : 11
Par défaut transfert de variables

Nouveau Problème.

Si je rentre la donnée :'1800000080F21828' directement dans le champs 'Nom' varchar(16) de la base avec laquelle je travaille, il n'y a pas de problème.

Si je veux récupérer l'index 'IDXCAPT' à l'aide de la procédure stockée suivante et par l'intermédiaire de IBStoreProc de Delphi fournissant le Nom '1800000080F21828' au paramByName('NOMCAPT') FireBird déclanche une erreur de conversion de données:

CREATE PROCEDURE CHERCHE_IDX (
NOMCAPT VARCHAR(16))
RETURNS (
IDXCAPT BIGINT)
AS
begin
/* Procedure Text */
SELECT IDENT_CAPTEURS.INDEXCAPT
FROM IDENT_CAPTEURS
WHERE IDENT_CAPTEURS.IDENTIFIANT = :NOMCAPT
INTO :IDXCAPT;

suspend;
end^

Je progresse lamentablement sur ce coup là. Si quelqu'un voit la faille ...

Merci d'avance.
msuire est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2006, 07h44   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
je ne connais rien à FireBird, mais je pense que tu devrais placer ton INTO à la fin du SELECT et donc juste avant le FROM.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 12h09   #3
Membre régulier
 
Inscription : février 2005
Messages : 100
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 100
Points : 88
Points : 88
Ah bas non le INTO est bien placé.
Par contre le problème doit provenir de IDENT_CAPTEURS.INDEXCAPT car il doit s'agit d'un bigint sinon ton erreur s'explique.

Si c'est forcément un entier, alors préfère utiliser la requête suivante
Code :
1
2
3
4
SELECT Cast(IDENT_CAPTEURS.INDEXCAPT AS bigint)
FROM IDENT_CAPTEURS
WHERE IDENT_CAPTEURS.IDENTIFIANT = :NOMCAPT
INTO :IDXCAPT;
si ça marche toujours pas essaie
Code :
1
2
3
4
SELECT IDENT_CAPTEURS.INDEXCAPT 
FROM IDENT_CAPTEURS
WHERE Cast(IDENT_CAPTEURS.IDENTIFIANT AS varchar(16)) = :NOMCAPT
INTO :IDXCAPT;
sillycoder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 20h22   #4
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 41
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 41
Points : 11
Points : 11
Merci à SillyCoder,

C'était bien la bonne réponse à peu de choses près.
La fonction delphi transmettait une chaine de 16 caractères plus les guillemets de part et d'autre soit 18 caractères vers la procédure stockée pour un champ de 16 caractères. le fait de supprimer les guillemets de la chaine a résolu le problème de la variable entrante.
Cette procédure devait retourner un bigint à la fonction Delphi qui était définie comme un Integer (trop petit).
Si J'avais fait attention au libellé de l'erreur renvoyée qui changeait à chaque fois que j'essayai de résoudre la transmission du premier paramètre, j'aurai pu supposer que ce modification était la conséquence du transfert de la deuxième valeur et non pas d'une mauvaise interprétation de ma première valeur corrigée.

Merci les gars de votre aide.
msuire est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h14.


 
 
 
 
Partenaires

Hébergement Web