![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Cita:
Saludos.
__________________
![]() Mi BLOG - ¡Joder, leanse la guia de estilo! Las Palabras son enanas, los ejemplos gigantes. |
|
#2
|
|||
|
|||
|
Respuesta...
Si lo que quieres es saber cual es el codigo nuevo que se insertó
lo que puedes hacer es una consulta con @@IDENTITY, te paso un ejemplo Código:
qryLocate.SQL.Clear;
qryLocate.SQL.Text := 'SELECT @@IDENTITY AS NewID';
qryLocate.Active := true;
iNewID := qryLocate.FieldByName( 'NewID' ).Value;
iNewID es una variable LongInt declarada anteriormente NewID es un campo ficticio que me arroja el @@IDENTITY, bah usando un alias. Esto lo ejecutas apenas hagas el insert en la tabla y no te preocupes por todos los eventos de ADO, es más si puedes evitarlos mejor aún. Bueno espero te sirva esto y Exitos!!! |
|
#3
|
|||
|
|||
|
Pues, es que el problema de los autoincrementales de access es que si se cancela la inserción corre núimero, así que aunque te agradezco tu propuesta, me temo que puedo usarla.
Estoy de acuerdo contigo sobre los eventos ADO, me temo que tienen algo que ver en este tema. Saludos, John. Cita:
|
|
#4
|
||||
|
||||
Intenta con eso a ver que resulta. Saludos.
__________________
![]() Mi BLOG - ¡Joder, leanse la guia de estilo! Las Palabras son enanas, los ejemplos gigantes. |
|
#5
|
|||
|
|||
|
Autoincremental...
El problema en Access con los autoincrementales es que hasta que no
hagas el post en la tabla no puedes saber el valor asignado, y otra cosa: A no ser que tu aplicación sea monousuaria no te sirve el MAX() +1, por lo que no sabes cual es el valor real y la unica manera es seleccionando el valor @@IDENTITY. El problema no es de ADO, simplemente te digo que no te hagas problemas con los eventos porque son muchos y me pasó hace un tiempo que la sucesión de eventos no siempre respetaba un orden especifico, [code]supongo se corrigió ese bug, pero por las dudas descarté todo. Por lo gral. cuando uso campos de tipo autoincremental lo hago cuando si o si inserto el registro y no cuando el usuario pueda cancelar la inserción. Sino lo que uso es una tabla con un registro donde estan los últimos valores asignados y a un valor de esos le sumo uno, o sea simulo un Autoinc y llevo yo el control y no Access. Te pego una función que la invoco cuando quiero insertar el registro Código:
function TData.GetKey( sField:string ) :LongInt;
begin
tblClaves.Requery;
Result := tblClaves.FieldByName( sField ).Value + 1;
end;
Algo así: Código:
Tabla.FieldByName( 'ID_PROVEEDOR' ).Value:=TData.GetKey('PROVEEDOR');
Código:
procedure TData.SetKey( sField:string );
begin
tblClaves.Edit;
tblClaves.FieldByName( sField ).Value := tblClaves.FieldByName( sField ).Value + 1;
tblClaves.Post;
end;
Código:
TData.SetKey( 'PROVEEDOR'); Última edición por waly2k1 fecha: 02-01-2008 a las 23:30:59. |
|
#6
|
|||
|
|||
|
Bueno pues ahí va algo de código, aunque puede que no esté muy limpio...
Código:
Function nextArmario() : integer;
var
aux : integer;
begin
moduloDeDatosMdt.aux1Qry.Close;
moduloDeDatosMdt.aux2Qry.SQL.Clear;
moduloDedatosMdt.aux1Qry.SQL.Add('SELECT MAX(numArmario) FROM armarios');
moduloDedatosMdt.aux1Qry.Open;
aux:=moduloDedatosMdt.aux1Qry.Fields[0].AsInteger;
moduloDeDatosMdt.aux1Qry.Close;
nextArmario:=aux+1;
end;
procedure TmoduloDeDatosMdt.armariosTblBeforePost(DataSet: TDataSet);
var ultimoArmario : integer;
begin
ultimoArmario:=nextArmario();
if (armariosTbl.FieldByName('numArmario').Asinteger<>ultimoArmario) then
begin
armariosTbl.FieldValues['numArmario']:=ultimoArmario;
showMessage('El número de armario ha cambiado durante la edición del mismo');
end;
end;
Saludos, John. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Query dentro de otro query (Access) | FGarcia | SQL | 2 | 28-12-2007 05:46:05 |
| Problema con Insert dentro de Evento BeforePost | Jvilomar | Conexión con bases de datos | 2 | 21-11-2007 16:31:12 |
| Como hacer referencia a un query dentro de otro query? | JuanBCT | SQL | 2 | 05-09-2006 18:35:25 |
| query dentro de query | jonmendi | SQL | 3 | 29-07-2005 15:13:33 |
| Crear query dentro de unit y funcion? | alehillebrand | OOP | 3 | 19-07-2005 00:56:59 |
|