Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-12-2007
johnlobo johnlobo is offline
Registrado
 
Registrado: oct 2006
Posts: 4
Poder: 0
johnlobo Va por buen camino
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:
Empezado por waly2k1 Ver Mensaje
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;
donde:
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!!!
Responder Con Cita
  #2  
Antiguo 02-01-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 24
enecumene Va por buen camino
Código Delphi [-]
Function nextArmario() : integer;
begin
  moduloDeDatosMdt.aux1Qry.Close;
  moduloDeDatosMdt.aux2Qry.SQL.Clear;
  moduloDedatosMdt.aux1Qry.SQL.Add('SELECT MAX(numArmario)+1 FROM armarios');
  moduloDedatosMdt.aux1Qry.Open;
  aux:=moduloDedatosMdt.aux1Qry.Fields[0].AsString;
  moduloDeDatosMdt.aux1Qry.Close;
end;

Intenta con eso a ver que resulta.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #3  
Antiguo 02-01-2008
waly2k1 waly2k1 is offline
Miembro
 
Registrado: dic 2006
Ubicación: El país de las maravillas(Argentina)
Posts: 251
Poder: 20
waly2k1 Va por buen camino
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;
Los campos son los nombres de las tablas, entonces paso como parámetro el nombre de la tabla y listo.

Algo así:
Código:
Tabla.FieldByName( 'ID_PROVEEDOR' ).Value:=TData.GetKey('PROVEEDOR');
Edito, me olvidé de decirte que una vez que insertes el registro actualices esa tablita

Código:
procedure TData.SetKey( sField:string );
begin
    tblClaves.Edit;
    tblClaves.FieldByName( sField ).Value := tblClaves.FieldByName( sField ).Value + 1;
    tblClaves.Post;
end;
Algo así:
Código:
TData.SetKey( 'PROVEEDOR');
Bueno espero te sirva de algo, exitos. Y no te compliques mucho.

Última edición por waly2k1 fecha: 02-01-2008 a las 23:30:59.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 18:04:40.


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