Club Delphi  
    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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-04-2012
edgar_prospero edgar_prospero is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 202
Poder: 13
edgar_prospero Va por buen camino
ultimo registro

que hay ojala y puedan ayudarme con lo siguiente:

tengo una base de datos en mysql en la cual tengo una tabla llamada datos de ahi lo que quiero lograr es traerme el ultimo registro de un campo
llamado folio y mostrarlo en un edit este es parte de mi codigo pero no me funciona ojala puedan decirme en que ando mal

Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
begin

 query.Close;
    query.SQL.Text:='SELECT * FROM datos ORDER BY DESC LIMIT 1';
    query.Params[0].Value:=folio.Text;
    query.Open;
    query.ParamByName('folio').AsString:=folio.Text;
end;
Responder Con Cita
  #2  
Antiguo 25-04-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No estoy muy seguro en MySql:
Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
begin
 query.Close;
    query.SQL.Text:='SELECT LAST(folio) as folio From Datos ';
    query.Open;
    Edit1.text:= query.FileByName('folio').AsString;
end;
No entiendo por que llamar a todos los datos (campos) de la tabla si solamente necesitas uno.?
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 25-04-2012
Avatar de kapcomx
kapcomx kapcomx is offline
Miembro
 
Registrado: jun 2007
Ubicación: Puebla México
Posts: 350
Poder: 17
kapcomx Va por buen camino
Mysql

Amigo Caral, tengo ala mano Mysql 5.0 y la consulta qe pones no funciona.....

Amigo Edgar siento que atu consulta le falta algo???


Código Delphi [-]'SELECT * FROM datos ORDER BY DESC LIMIT 1';




creo que despues del order by... te falta indicar un campo no crees

algo asi como order by folio desc....

Saludos...
__________________
un tipo al cual la sociedad no le tiene el mas mínimo respeto no puede ser presidente....
Responder Con Cita
  #4  
Antiguo 25-04-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Cita:
Empezado por kapcomx Ver Mensaje
Amigo Caral, tengo ala mano Mysql 5.0 y la consulta qe pones no funciona.....
Y yo con lo feliz que estaba de pegar una....
Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 25-04-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Consulta correcta:
Código SQL [-]
SELECT MAX(folio) as max_folio From Datos;

OJO: Esto no te va a servir si lo quieres ocupar para obtener un folio para una factura o algo similar ya que hay que tomar en cuenta la concurrencia, es decir, el valor obtenido puede no ser el mismo al momento en que vayas a guardarlo finalmente.

Si quieres te pongo un ejemplo de como hacerlo (en MySQL) y garantizarte que nunca se te vaya a duplicar un folio.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #6  
Antiguo 25-04-2012
edgar_prospero edgar_prospero is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 202
Poder: 13
edgar_prospero Va por buen camino
amigo AzidRain si me gustaria que pusieras el ejemplo que me mencionas te lo agradeceria
Responder Con Cita
  #7  
Antiguo 25-04-2012
edgar_prospero edgar_prospero is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 202
Poder: 13
edgar_prospero Va por buen camino
he logrado que me muestre el ultimo registro con el siguiente codigo

Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
begin
 query.Close;
     query.SQL.Text:='SELECT folio  FROM datos ORDER BY folio desc LIMIT 1';
     query.Open;
       folio.text := query.FieldByName('folio').asString ;

end;

pero lo que me falta lograr es aumentarle uno a ese ultimo registro por ejemplo si mi ultimo registro es el 26 que en el edit me muestre el 27 para empezar a guardar informacion ahi no se si me explique
Responder Con Cita
  #8  
Antiguo 25-04-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Te pongo un ejemplo de como lograr lo que necesitas.

Requisitos Previos:

La tabla donde vas a llevar el control de folios debe ser InnoDB ya que vamos a utilizar transacciones, aqui tienes un script para crearla:

Código SQL [-]
CREATE TABLE `folios_facturas` (
  `sucursal` varchar(3) NOT NULL DEFAULT '',
  `ultimo_folio_talon` int(11) DEFAULT NULL,
  `ultimo_folio_cfd` int(11) DEFAULT NULL,
  `serie_fiscal` varchar(5) DEFAULT NULL,
  PRIMARY KEY (`sucursal`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

En este ejemplo tenemos 4 campos, puedes usar los que necesites segun los folios que quieras controlar, bastaria con tener solo uno que contenga el ultimo folio de factura utilizado. Vamos a dejar sin uso el campo sucursal y serie fiscal. Asi que inicializamos la tabla creando un registro que contenga los folios con que iniciamos

Código SQL [-]
  INSERT FOLIOS_FACTURAS SET ULTIMO_FOLIO_talon=1, SUCURSAL="X";

Ahora si ya podemos empezar a actualizar la tabla segun los folios que vayamos ocupando, yo lo hago mediante la siguiente función que me da el folio que voy a utilizar.

Código Delphi [-]

function GetFolios(var aFolioCFD,aFolioTalon:Integer;var aSerieFiscal: string; aSucursal:string):Boolean;
begin
  Result := FALSE;
  capadatos.StartTrans;   // Iniciamos la transacción
  with Capadatos.QueryCreate('UPDATE FOLIOS_FACTURAS SET ULTIMO_FOLIO_TALON=ULTIMO_FOLIO_TALON+1, ULTIMO_FOLIO_CFD=ULTIMO_FOLIO_CFD+1 WHERE SUCURSAL=:SUCURSAL') do
  Try
   Try
    ParamByName('SUCURSAL').AsString := aSucursal;
    ExecSQL;                // Se ejecuta el query para aumentar el folio
    SQL.Clear;
    SQL.Add('SELECT * FROM FOLIOS_FACTURAS WHERE SUCURSAL=:SUCURSAL');
    ParamByName('SUCURSAL').AsString := aSucursal;
    Open;
    aFolioTalon  := FieldByName('ULTIMO_FOLIO_TALON').AsInteger;  //Leemos los folios ya actualizados
    aFolioCFD    := FieldByName('ULTIMO_FOLIO_CFD').AsInteger;
    aSerieFiscal := FieldByName('SERIE_FISCAL').AsString;
    Close;
    Capadatos.Commit;  //Cerramos la transacción
    Result := True;

  Except
     capadatos.RollBack; // Si algo falla, abortamos la transacción y el folio permanece sin cambios
  end;
  Finally
    Free;
  End;
end;

Yo utilizo Zeos para hacer el acceso a datos, pero lo puedes modificar sin problema para usar cualquier componente.

Ahora bien, para usar la función hacemos:

1.- Editamos los datos de la factura, documento o lo que sea (excepto el folio, ese lo dejamos al final)
2.- Llamamos a la funcion que nos dará el folio
3.- Guardamos la factura con el folio que obtuvimos.

También puedes abrir la transacción antes de llamar a la funcion y cerrarla justo despues de guardar la factura.

Efecto:

Mientras esta abierta la transacción, cualquier otro usuario no podrá obtener un numero de folio hasta que se cierre o aborte la transacción. De esta forma nunca habrá la posibilidad de que 2 usuarios obtengan el mismo folio.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #9  
Antiguo 26-04-2012
edgar_prospero edgar_prospero is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 202
Poder: 13
edgar_prospero Va por buen camino
excelente respuestas me ayudo bastante muchas gracias
Responder Con Cita
Respuesta



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
Obtener el ultimo registro toni.vi SQL 2 09-12-2009 13:02:58
dbnavigator en ultimo registro eduardo360 Conexión con bases de datos 6 19-02-2008 16:27:31
No guarda el ultimo registro Tecnic2 Conexión con bases de datos 3 01-09-2004 19:31:23
Ultimo registro ander Firebird e Interbase 3 18-03-2004 14:52:02
Obtener el último registro juanchi Conexión con bases de datos 2 06-02-2004 01:52:21


La franja horaria es GMT +2. Ahora son las 11:13:08.


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
Copyright 1996-2007 Club Delphi