Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Como obtener el numero generado en un MDODataSet ? (https://www.clubdelphi.com/foros/showthread.php?t=40981)

Tauro78 04-03-2007 21:31:03

Como obtener el numero generado en un MDODataSet ?
 
Como obtener el numero generado en un MDODataSet ?
hola quisiera saber lo siguiente:
Estoy usando MDO y FB2; como puedo hacer para obtener el nro_cliente que
es generado por un generador luego de hacer el Commit ?
Supongo que necesitaria leer el valor en algun parametro de salida de QInsert
pero no encuentro la forma.
He probado con dmTablas.DSetClientesNRO_CLIENTE.Value pero no funciona.
Quiero obtener el nuevo valor para mostrarselo al usuario por medio de un
mensaje luego de haber realizado un alta de cliente.

Código Delphi [-]
 
try
dmTablas.TDSetClientes.StartTransaction;
dmTablas.DSetClientes.QInsert.Close;
dmTablas.DSetClientes.QInsert.ParamByName('NRO_CLIENTE').AsInt64 := dmTablas.DSetClientes.GeneratorLink.GetGenValue;
dmTablas.DSetClientes.QInsert.ParamByName('NOMBRE').AsString := UpperCase(Edit6.Text);
dmTablas.DSetClientes.QInsert.ParamByName('DIRECCION').AsString := Edit7.Text;
dmTablas.DSetClientes.QInsert.ParamByName('LOCALIDAD').AsString := Edit8.Text;
dmTablas.DSetClientes.QInsert.ParamByName('RUC').AsString := Edit9.Text;
dmTablas.DSetClientes.QInsert.Prepare;
dmTablas.DSetClientes.QInsert.ExecQuery;
dmTablas.TDSetClientes.Commit;
Mensaje := 'El Cliente se grabó con el número: ' + IntToStr(dmTablas.DSetClientesNRO_CLIENTE.Value);
            MessageDlg(Mensaje + #13#10, MtInformation, [MbOK], 0);
except
dmTablas.TDSetClientes.Rollback;
raise;
end;

Espero haber sido claro, gracias anticipadas.

Lepe 05-03-2007 10:53:36

Revisa la propiedad GeneratorField (o algo parecido) del MDODataset, ahí indicas qué campo usa el generador, el nombre del generador y cuando aumentar el generador (waNewRecord, waPost, waServer).

Otra opción es usar un Procedimiento almacenado que te devuelva el generador incrementado, justo antes de lanzar el sql de inserción, haces la llamada al SP para que devuelva el número.

Edito: Si el programa va en red, olvida el último consejo ;)

Saludos

Tauro78 06-03-2007 17:31:59

gracias por tu respuesta, la verdad que son 4 pc en red, entonces la solucion 2 del SP no me convence, en cuanto a la propiedad GeneratorField no hay nada que me devuelva el numero recien insertado.
Lo que hice para solucionarlo que no me parece lo mejor pero no encontre otra forma es:

Código Delphi [-]
 nro_impuesto := dmTablas.DSetClientes.GeneratorLink.GetGenValue;

o sea creo una variable y a esa variable le paso el valor generado, luego

Código Delphi [-]
dmTablas.DSetClientes.QInsert.ParamByName('NRO_CLIENTE').AsInt64 := nro_impuesto;

y en el mensaje muestro el valor de la variable nro_impuesto.


La franja horaria es GMT +2. Ahora son las 16:34:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi