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.
Partager