Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ERROR incomprensible de SQL en Delphi 2006 (https://www.clubdelphi.com/foros/showthread.php?t=60292)

Softweb 26-09-2008 18:49:08

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

donki 01-10-2008 22:43:21

Que motor de BD usas?
Donde te da el error en compilación o en ejecución?

egostar 01-10-2008 23:36:11

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.

Softweb 03-10-2008 15:27:16

Cita:

Empezado por egostar (Mensaje 317584)
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


La franja horaria es GMT +2. Ahora son las 16:59:09.

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