Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ¿Qué tan "normal" es éste error? D6 + MsSQLS 2008 R2 + WinXP (https://www.clubdelphi.com/foros/showthread.php?t=77041)

TiammatMX 15-12-2011 20:48:06

¿Qué tan "normal" es éste error? D6 + MsSQLS 2008 R2 + WinXP
 
Buenas, jóvenes...

Resulta que tengo una sentencia SQL que versa así:

Código SQL [-]
Select HT1_FECHA, HT1_HORA, E2_CTRL_PAC, CASE WHEN HT1_SUBSECUENTE = 0 THEN 'No' ELSE 'Sí' END As
PrimeraVez,CASE WHEN HT1_ACUDE_SOLO = 0 THEN 'No' ELSE 'Sí' END As AcudeSolo, C12_PARIENTE_ID, E2A_NOMB_FAM, 
HT1_ORPRE_PAC,HT1_ORPRE_FAM, HT1_ORPRE_OTRO, HT1_ORPRE_FOLLETO, HT1_REFINST_PAC, HT1_REFINST_FAM, 
HT1_REFINST_OTRO,HT1_REFINST_FOLLETO, HT1_EDUSALUD_PAC,HT1_EDUSALUD_FAM, HT1_EDUSALUD_OTRO, 
HT1_EDUSALUD_FOLLETO, HT1_ENFERMERA_EC_ID, HTI_TURNO_EC, HT1_ENFERMERA_EL_ID, HT1_TURNO_EL, HT1_OPERADOR,
C54_GRUPO_ID, C54_GRUPO_ETAPA_ID, HT1_HojaObservacion from HT1_APC where (HT1_ALTA = 0) ORDER BY HT1_FECHA;

Si la ejecuto en el MS SQL Server Management Studio, la ejecuta perfectamente, pero al pasarla a mi TADOQuery dentro de Delphi 6 (por medio del comando OPEN), me manda un error que marca el contenido de la imagen anexa.

Debo decirles que POR EL MOMENTO no devuelve ningún renglón, la tabla a la que se refiere está vacía. ¿Alguna manera de evitar éste problema?

luisgutierrezb 15-12-2011 22:08:21

Bueno no pones como tienes la instruccion una vez que la "pegas" en delphi, por las comillas por ejemplo, ahora, tienes parametros declarados?

TiammatMX 15-12-2011 22:50:58

Cita:

Empezado por luisgutierrezb (Mensaje 421301)
Bueno no pones como tienes la instruccion una vez que la "pegas" en delphi, por las comillas por ejemplo, ahora, tienes parametros declarados?

Si te refieres a cómo la incluyo en el TADOQuery, así la pongo...

Código Delphi [-]
with adoqryCntrl do
    begin
      wsSQL := 'Select HT1_FECHA, HT1_HORA, E2_CTRL_PAC, CASE WHEN HT1_SUBSECUENTE = 0 THEN ''No'' ELSE ''Sí'' END As PrimeraVez,'+
               'CASE WHEN HT1_ACUDE_SOLO = 0 THEN ''No'' ELSE ''Sí'' END As AcudeSolo, C12_PARIENTE_ID, E2A_NOMB_FAM, HT1_ORPRE_PAC,'+
               'HT1_ORPRE_FAM, HT1_ORPRE_OTRO, HT1_ORPRE_FOLLETO, HT1_REFINST_PAC, HT1_REFINST_FAM, HT1_REFINST_OTRO,'+
               'HT1_REFINST_FOLLETO, HT1_EDUSALUD_PAC,HT1_EDUSALUD_FAM, HT1_EDUSALUD_OTRO, HT1_EDUSALUD_FOLLETO, '+
               'HT1_ENFERMERA_EC_ID, HTI_TURNO_EC, HT1_ENFERMERA_EL_ID, HT1_TURNO_EL, HT1_OPERADOR, C54_GRUPO_ID, '+
               'C54_GRUPO_ETAPA_ID, HT1_HojaObservacion from HT1_APC where (HT1_ALTA = 0) ORDER BY HT1_FECHA;';
      Close;
      SQL.Clear;
      SQL.Add(wsSQL);
      Open;
    end;

Y no, no utilizo parámetros.

Al González 16-12-2011 01:28:34

Hola Felipe, compila tu aplicación con la opción "Use Debug DCUs". Entonces, al aparecer el mensaje de error, Delphi te señalará el punto donde se elevó la excepción.

Ahí puedes abrir la pila de llamadas (Ctrl+Alt+S), en inglés call stack, con lo cual podrás observar el camino que siguió el programa hasta llegar a ese punto.

Es posible que mediante algún evento o control de pantalla se esté llamando a la función StrToDate, la cual, cuando la cadena a convertir es vacía, te mostrará el mensaje de error que señalas.

En SysUtils.pas (de Delphi 7):
Código Delphi [-]
function StrToDate(const S: string): TDateTime;
begin
  if not TryStrToDate(S, Result) then
    ConvertErrorFmt(@SInvalidDate, [S]);
end;

En SysConst.pas (de Delphi 7):
Código Delphi [-]
SInvalidDate = '''%s'' is not a valid date';

Quizá se está tomando el valor de campo con una expresión tipo FieldByName (Fecha).AsString, que en el caso de ser nulo el campo (como cuando un conjunto de datos no tiene filas) te regresará una cadena vacía ('').

Un abrazo normal.

Al González. :)


La franja horaria es GMT +2. Ahora son las 15:16:11.

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