Subject | Re: [IBO] Absolute unique value/generator/SP problem |
---|---|
Author | Paul Vinkenoog |
Post date | 2004-06-22T13:34:46Z |
Hi Kevin,
generator are:
- Explicitly resetting the generator so that it covers the same
range of numbers again;
- Exhausting it, i.e. using it up, so that it will wrap around
(no warning or error message given here) and start over again.
- Since sp_get_nextid doesn't return multiple rows, don't make it a
selectable stored procedure. Drop the SUSPEND. If you want to call
it with IBO, use a TIB_DSQL. But...
- Why call sp_get_nextid at all? In IBO, you can use GeneratorLinks
to connect a field to a generator: as soon as a new record is created,
IBO retrieves the value from the linked generator and puts it in the
field. This saves a lot of steps in your code, and reduces the chance
of errors. To do this, set the GeneratorLinks property of qryOH to:
OrderNo=Gen_OrderNo
- If GeneratorLinks is too automatic for you, you can also get the
value like this (in GetPermOrderNo):
qryOH.FieldByName('OrderNo').AsString :=
qryOH.Gen_ID('GEN_ORDERNO', 1);
Still no need for qryGetID or sp_get_nextid.
Your code will become much cleaner like this. If you still get
duplicate values, the cause will be easier to track down. But you
shouldn't.
Greetings,
Paul Vinkenoog
> I have an order entry system that requires an absolutely uniqueThat's right. The only ways you can get duplicate values from a
> order number to be issued when sales people enter an order.
>
> In remembering all the posts over the years, using a generator is
> the way to go as it's my understanding it "operates" outside of
> the transaction thus assuring a unique value.
generator are:
- Explicitly resetting the generator so that it covers the same
range of numbers again;
- Exhausting it, i.e. using it up, so that it will wrap around
(no warning or error message given here) and start over again.
> I am getting reports of duplicate order numbers being issued (a veryI don't see anything in your code that causes this, but:
> bad thing).
- Since sp_get_nextid doesn't return multiple rows, don't make it a
selectable stored procedure. Drop the SUSPEND. If you want to call
it with IBO, use a TIB_DSQL. But...
- Why call sp_get_nextid at all? In IBO, you can use GeneratorLinks
to connect a field to a generator: as soon as a new record is created,
IBO retrieves the value from the linked generator and puts it in the
field. This saves a lot of steps in your code, and reduces the chance
of errors. To do this, set the GeneratorLinks property of qryOH to:
OrderNo=Gen_OrderNo
- If GeneratorLinks is too automatic for you, you can also get the
value like this (in GetPermOrderNo):
qryOH.FieldByName('OrderNo').AsString :=
qryOH.Gen_ID('GEN_ORDERNO', 1);
Still no need for qryGetID or sp_get_nextid.
Your code will become much cleaner like this. If you still get
duplicate values, the cause will be easier to track down. But you
shouldn't.
Greetings,
Paul Vinkenoog