Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-09-2008
Avatar de Softweb
Softweb Softweb is offline
Miembro
 
Registrado: ago 2008
Posts: 46
Poder: 0
Softweb Va por buen camino
ERROR incomprensible de SQL en Delphi 2006

Hola a todos:
Soy programador desde hace 18 años y con el Delphi desde la versión 1.

Y al pasar al Delphi 2006 me sale un error en una función que tengo desde hace años funcionando perfectamente.

La función la utilizo para obtener un indice incrementa cada vez que añado un registro por ejemplo:

Código:
TableGestionIDOrig.AsInteger := DM.GenerarId('IDOrig','GESTION', 'Anyo = '+IntToStr(SwGetAnyo)+' AND HostalId = '+IntToStr(V_TIENDA));
Y la funcion es esta:

Código:
function TDM.GenerarId(KeyField, TableName, Condicion: string): Integer;
var
  NewValue: Integer;
begin
  NewValue := -1;
  Query1.Close;
  Query1.SQL.Clear;
  if Condicion <> '' then
    Query1.SQL.Add('SELECT Max( '+KeyField+' ) AS MAXIMO FROM '+TableName+ ' WHERE '+Condicion)
  else
    Query1.SQL.Add('SELECT Max('+KeyField+') AS MAXIMO FROM '+TableName);
  Query1.Open;
  // Si no hay registros en la tabla la consulta devuelve null
  if VarIsNull( Query1.FieldValues[ 'MAXIMO' ] ) then
    NewValue := 1 // valor para el primer registro de la tabla
  else
    NewValue := Integer( Query1.FieldValues[ 'MAXIMO' ] ) + 1;
  Query1.Close;
  Result := NewValue;
end;
Bueno pues lo sorprendente es que despues de tantos años funcionando la funcion ahora me dice el Delphi que :

Cita:
ERROR Invalid use of Keyword.
Token:=
Line Number:.1
el caso es que la sentencia que genera que es esta:
Código SQL [-]SELECT Max( IDOrig ) AS MAXIMO FROM Gestion WHERE Anyo=2008 AND HostalID=1

Funciona perfectamente si la meto en programas de SQL que se que estan echos con Delphi.

Y la gracia me tiene mirando y remirando la centencia desde hace mas de un mes.

Por favor si alguien tiene alguna idea de por donde mirar se lo agradeceria.

Muchas gracias
Responder Con Cita
  #2  
Antiguo 01-10-2008
donki donki is offline
Miembro
 
Registrado: oct 2006
Posts: 24
Poder: 0
donki Va por buen camino
Que motor de BD usas?
Donde te da el error en compilación o en ejecución?
__________________
Grandes frases de nuestro tiempo:
"La pasta no és para tirarla, es para el Tunning"

"TodoOK=False...."

Enjoy it!!!
Responder Con Cita
  #3  
Antiguo 01-10-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Hola

Me he tomado el atrevimiento de modificar tu función de la forma como yo la escribiría.

Código Delphi [-]
function TDM.GenerarId(Campo, NombreTabla, Condicion: string): Integer;
begin
  with Query1 do begin
     Close;
     SQL.Clear;
     if Condicion <> '' then
        SQL.Add('SELECT Max('+Campo+') AS MAXIMO FROM '+NombreTabla+
                ' WHERE '+Condicion)
     else SQL.Add('SELECT Max('+Campo+') AS MAXIMO FROM '+NombreTabla);
     Open;
     if RecordCount = 0 then
        Result := 1
     else Result := Fields[0].Value + 1;
     Close;
  end;
end;

Yo te recomiendo que hagas un trace dentro de esa función, tal vez hay algo no está bien en las variables que estas pasando.

Salud OS

Edito: He cambiado dos nombres que podrian tener efectos secundarios. TableName y KeyField.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 01-10-2008 a las 23:42:00.
Responder Con Cita
  #4  
Antiguo 03-10-2008
Avatar de Softweb
Softweb Softweb is offline
Miembro
 
Registrado: ago 2008
Posts: 46
Poder: 0
Softweb Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Hola

Me he tomado el atrevimiento de modificar tu función de la forma como yo la escribiría.

Código Delphi [-]function TDM.GenerarId(Campo, NombreTabla, Condicion: string): Integer; begin with Query1 do begin Close; SQL.Clear; if Condicion <> '' then SQL.Add('SELECT Max('+Campo+') AS MAXIMO FROM '+NombreTabla+ ' WHERE '+Condicion) else SQL.Add('SELECT Max('+Campo+') AS MAXIMO FROM '+NombreTabla); Open; if RecordCount = 0 then Result := 1 else Result := Fields[0].Value + 1; Close; end; end;


Yo te recomiendo que hagas un trace dentro de esa función, tal vez hay algo no está bien en las variables que estas pasando.

Salud OS

Edito: He cambiado dos nombres que podrian tener efectos secundarios. TableName y KeyField.
Gracias egopolice pero anoche ya encontré el error.
Era un error del copilador de Delphi ya que limpie todos los DCU, DSK, caches, el directorio __history y compile de nuevo y "sorpresa" ya no tenia error la aplicación, con las casta de Delphi. ;-)

Gracias y un saludo
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
Error al instalar Zeoslib en Delphi 2006 tazwil1 Conexión con bases de datos 1 15-08-2008 00:42:47
Error en ASP en Delphi 2006 aiech .NET 3 26-06-2008 22:59:18
Error: Delphi 2006 + Debugger + Threads xEsk Varios 0 16-02-2007 16:03:19
Error Incomprensible altp Varios 5 23-11-2006 18:23:49
error incomprensible HugoH Conexión con bases de datos 2 04-05-2004 12:41:19


La franja horaria es GMT +2. Ahora son las 23:34:11.


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