Ver Mensaje Individual
  #7  
Antiguo 26-10-2004
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Reputación: 24
Jose Manuel Va por buen camino
Hola, he probado a sustituir la instrucción
'SELECT * FROM &tablename1 WHERE ' por
'SELECT count(*) FROM &tablename1 WHERE '
y me da un error, indicando que el campo C_NIF no se encuentra, aunque existe y es el primer campo de la tabla, y forma parte de la clave única de la tabla CONSTRAINT "TA_NIF_C_NIF_C_VERSION_PK" UNIQUE("C_NIF", "N_VERSION")

No sé, tal vez hay algún error en la sintesis - trabajo con Oracle 9i + Odac + D6-, de momento estoy intentando encontrar algún ejemplo que incluya esta instrucción, mientras tanto he modificado el codigo de la siguiente manera, aunque no lo veo muy claro:

Un saludo a todos
Jose Manuel García


Código:
procedure TfDNI.Btn_consulta_fechasClick(Sender: TObject);
var
n,ini,fin,y:Double;
i,x:integer;
begin
   // deberia comprobar el nº de filas devueltas en la consulta
   fdm.tbNif.close;
   fdm.tbNif.SQL.Clear;
   fdm.tbNif.SQL.Text := 'SELECT COUNT(*) FROM &tablename1 WHERE '+#13+
                         '(F_ULTIMO_CONTACTO >= :desde'+#13+
                         ' and F_ULTIMO_CONTACTO <= :hasta)'+#13+
                         'ORDER BY A_nombre';
   fdm.tbNif.MacroByName('TableName1').Value := cb_tablespace.Text;
   fdm.tbNif.ParamByName('desde').AsDateTime := desde.date;
   fdm.tbNif.ParamByName('hasta').AsDateTime := hasta.date;
   if desde.date=hasta.date then hasta.date  := desde.date+1;
   fdm.tbNif.Open;

   n:=fdm.tbNif.Recordcount; // nº de filas de la tabla
   ShowMessage ('Nº de filas devueltas = '+FormatFloat('####',n)); // esto se debe quitar

   // si el nº de filas devueltas es > 100, sugerir limitar el ambito de la consulta
   if n>10 then
      begin
      text:='Esta consulta tiene '+FormatFloat('####',n)+' filas'+#13+
            'le recomendamos, limite el ámbito de la consulta'+#13+#13+
            'Pulse Cancelar para salir';

      IF Application.MessageBox((pChar(text)) ,'CONSULTAS ',
         mb_OkCancel + mb_IconExclamation)=IdCancel then Exit;

      end;

    // si no se limita el ambito y el nº de filas devueltas es > 10 (el nº de puede aumentar)
    // se muestra el resultado de 10 en 10, dando opción a cancelar la consulta
     if n>10 then
        begin
        y:=(int(n/10))+1;
        i:=StrToint(FloatToStr(y));
        for x:=1 to i do
            begin
            ini:=x-1*10;  // se puede cambiar para mostrar bloques de más de  10 filas
            fin:=x*10;
            fdm.tbNif.close;
            fdm.tbNif.SQL.Clear;
            fdm.tbNif.SQL.Text := 'SELECT * FROM &tablename1 WHERE '+#13+
                                  '    (F_ULTIMO_CONTACTO >= :desde'+#13+
                                  ' and F_ULTIMO_CONTACTO <= :hasta)'+#13+
                                  ' and(rownum > :ini'  +#13+
                                  ' and rownum <= :fin)'+#13+
                                  'ORDER BY A_nombre';
            fdm.tbNif.MacroByName('TableName1').Value := cb_tablespace.Text;
            fdm.tbNif.ParamByName('desde').AsDateTime := desde.date;
            fdm.tbNif.ParamByName('hasta').AsDateTime := hasta.date;
            fdm.tbNif.ParamByName('ini').AsFloat := ini;
            fdm.tbNif.ParamByName('fin').AsFloat := fin;
            if desde.date=hasta.date then hasta.date  := desde.date+1;
            fdm.tbNif.Open;

            text:='Quieres ver los siguientes 10 registros'+#13+
                  'Pulse Cancelar para salir';

            IF Application.MessageBox((pChar(text)) ,'CONSULTA ',
               mb_OkCancel + mb_IconExclamation)=IdCancel then Exit;
            end;
        end
        else
        begin
        fdm.tbNif.close;
        fdm.tbNif.SQL.Clear;
        fdm.tbNif.SQL.Text := 'SELECT * FROM &tablename1 WHERE '+#13+
                              '    (F_ULTIMO_CONTACTO >= :desde'+#13+
                              ' and F_ULTIMO_CONTACTO <= :hasta)'+#13+
                              'ORDER BY A_nombre';
        fdm.tbNif.MacroByName('TableName1').Value := cb_tablespace.Text;
        fdm.tbNif.ParamByName('desde').AsDateTime := desde.date;
        fdm.tbNif.ParamByName('hasta').AsDateTime := hasta.date;
        if desde.date=hasta.date then hasta.date  := desde.date+1;
        fdm.tbNif.Open;
      end;
end;
Responder Con Cita