Comment accéder a la valeur renvoyer par le composant qui éxecute une procédure stockée ? (en l'occurence, un identifiant).
Comment accéder a la valeur renvoyer par le composant qui éxecute une procédure stockée ? (en l'occurence, un identifiant).
salut
Avec IBStoredProc1.FieldByName('VariableDeRetour').
@+
Voici le code pour la base et le générateur.
Quelle est le nom de ma variable dans ce cas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 SET SQL DIALECT 3; /* CREATE DATABASE 'C:\TOTO.GDB' PAGE_SIZE 1024 DEFAULT CHARACTER SET */ /* Table: ORDINATEUR, Owner: SYSDBA */ CREATE TABLE "ORDINATEUR" ( "ORDI_ID" INTEGER NOT NULL, "ORDI_NOM" VARCHAR(15), PRIMARY KEY ("ORDI_ID") ); CREATE GENERATOR "GEN_ORDI_ID"; COMMIT WORK; SET AUTODDL OFF; SET TERM ^ ; /* Stored procedures */ CREATE PROCEDURE "TABLE_GEN_ID" RETURNS ( "AVALUE" INTEGER ) AS BEGIN EXIT; END ^ ALTER PROCEDURE "TABLE_GEN_ID" RETURNS ( "AVALUE" INTEGER ) AS BEGIN AVALUE = GEN_ID(GEN_ORDI_ID,1); END ^ SET TERM ; ^ COMMIT WORK; SET AUTODDL ON; /* Grant Roles for this database */ /* Grant permissions for this database */
@+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 /* Stored procedures */ CREATE PROCEDURE "TABLE_GEN_ID" RETURNS ( "AVALUE" INTEGER <--- là : AVALUE ) AS BEGIN EXIT; END ^
Bon, ça me rassure, j'étais pas à côté de la plaque.
Sous D7, quand je tape proc.fieldbyname('AVALUE').AsInteger, j'ai droit à un message d'erreur avec écrit proc : champ 'AVALUE' non trouvé.
Tésté aussi avec 'avalue', des fois que...
Ooops j'ai fais une erreur d'inattention. Il faut utiliser ParamByName.
@+ Claudius
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MaValeur := Proc.ParamByName('AVALUE').AsInteger;
Merci pour vos réponses rapides.
Attention : le tuto de Kloo sur les compteurs auto-incrémentés ne convient pas à D7 ! (C'est FieldByName qui est utilisé !).
tu as le lien de ce tuto ?
[edit]
Ok, j'ai trouvé. Effectivement il y a peut-être un petit soucis...
[/edit]
@+
A tout hasard, il est possible de remettre à zéro le générateur ?
Pour l'instant, j'ai tenté via une procédure stockée
Mais, ça ne fonctionne pas.CREATE PROCEDURE "INIT_GEN_ID"
AS
BEGIN
SET GENERATOR GEN_ORDI_ID TO 1;
END
SET TERM ;
Faut-il que j'efface la table, et que je la recrée avec le générateur intégré pour repartir de 1 ?
Salut
Utilise un execute statement:
La valeur du générateur doit être remis à 0, ainsi la 1° valeur générée sera égale à 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SET TERM ^ ; CREATE PROCEDURE INIT_GEN_ID AS BEGIN EXECUTE STATEMENT 'set generator GEN_ORDI_ID to 0'; END^ SET TERM ; ^
@+ Claudius
Désolé d'avoir mis autant de temps pour répondre...
En y réfléchissant, j'ai besoin de regénérer ce générateur quand ma base est vide. Et ma base est généralement vidée via un clic droit sur ma_base.gdb suivi de "effacer".
Donc, dans ma procédure CREATE, j'ai juste à m'occuper de la créatino d'un générateur !!!
Mais ta réponse n'est pas perdue pour autant, je la garde à portée de main !!
Merci pour tout.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager