Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-12-2014
edgargh edgargh is offline
Miembro
 
Registrado: jun 2006
Ubicación: León, Guanajuato
Posts: 25
Poder: 0
edgargh Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
A ver, edgargh, un select a una base de datos devuelve una serie de registros, ¿cuántos?, no se puede saber. ¿Por qué el componente que estás usando, y otros también, pueden saberlo?, pues porque han añadido un contador. Pues la única manera de saber cuántos registros hay en una consulta es contarlos, para eso la única forma es hacer un fetch, o sea, ir al último.
Algunos añadidos en algunas bases de datos y componentes, han incorporado código para que cuando se están pasando los registros que ha devuelto la consulta, los vaya contando. Hay diversas maneras, tampoco voy a escribir un tratado de cómo se hace, pero no es lo normal.

Lo único que te puedo decir porque lo he hecho infinidad de veces y puedo demostrarlo con un ejemplo sencillo si gustas, es que si yo tengo un adoquery por ejemplo, puedo obtener el total de registros a través de la propiedad recordcount. No es algo que este inventando yo (No tengo tanta capacidad) esa es la función de esa propiedad. Desde mi punto de vista la propiedad last se utiliza para ir al ultimo registro no para obtener el total de registros, para eso es la propiedad recordcount de un tdataset y no tiene nada que ver con el manejador de base de datos.

Entiendo la parte de que cada quien puede hacerlo a su manera, pero no estoy de acuerdo que se diga que no funciona algo que me consta que si. Saludos
Responder Con Cita
  #2  
Antiguo 10-12-2014
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 18
orodriguezca Va por buen camino
edgargh tienes y no tienes razón. Te explico porque:

Cuando se crea un objeto de la clase TADOQuery por defecto la propiedad CursorLocation se establece a clUseClient. En esta modalidad ADO se comporta en forma "desconectada" y transfiere todas (absolutamente todas) las filas de la consulta al lado del cliente aunque no se haya hecho un FetchAll o un Last. Es por esto que funciona el RecordCount, porque ADO transfiere todas las filas al cliente y las va contando a medida que las va transfiriendo. Si la propiedad CursorLocation se establece a clUseServer las filas solo se transferirán al cliente bajo demanda, ya sea navegando en un Grid o haciendo uso de los métodos Next, Last o FetchAll.

Espero quede aclarado.
Responder Con Cita
  #3  
Antiguo 10-12-2014
edgargh edgargh is offline
Miembro
 
Registrado: jun 2006
Ubicación: León, Guanajuato
Posts: 25
Poder: 0
edgargh Va por buen camino
totalmente de acuerdo orodriguezca, pero ya estas hablando del funcionamiento interno de un componente para poder lograr hacer algo, eso no es lo que pregunto dany2014, el solo quiere saber como "Contar la cantidad de registros de un dbgrid", la respuesta es con la propiedad recordcount del tdataset, asi de sencillo. Que internamente el componente haga x ó y cosas para llegar al resultado que se obtiene de llamar a la propiedad recordcount debe ser transparente para el usuario, eso no le interesa. Imaginate que para cada pregunta que hagan los foristas adicional a decirles con que propiedades o métodos pueden lograrlo, tengas que explicar como funciona internamente cada una de esas propiedades o métodos, no creo que eso sea necesario.

Pero en fin, creo que ya se ha desvirtuado el origen de todo esto que fue la pregunta inicial de dany2014, espero no lo hayamos confundido con todo esto, de mi parte estoy a sus ordenes por si necesita que se le facilite un ejemplo de lo que quiere hacer si es que se le complica. Saludos
Responder Con Cita
  #4  
Antiguo 10-12-2014
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Es que tampoco estás respondiendo correctamente a dany2014 porque no sabes qué componentes está usando, ni qué base de datos, ni nada.

Última edición por Casimiro Noteví fecha: 10-12-2014 a las 19:42:26.
Responder Con Cita
  #5  
Antiguo 10-12-2014
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 18
orodriguezca Va por buen camino
Independiente de cual es la base de datos o del tipo de dataset lo correcto para determinar el número de registro es hacer:

Código Delphi [-]
  MyDataset.FetchAll;
  NumeroDeRegistros := MyDataset.RecordCount;


Cita:
Te consta lo que dices?, lo haz hecho con un adoquery por ejemplo?, no te ha funcionado el recordcount?
Si, me consta.

- Trabajando con ADO, ya sea en Delphi o Visual Basic 6, y configurando los cursores del lado del servidor, RecordCount devuelve cero y la consulta puede regresar 5 0 10 millones de registros. En estos casos si se deja que los cursores queden del lado del cliente la aplicación "estalla" por falta de memoria. Estos registros no se muestran ni se imprimen, simplemente se consolida información del Sistema de Producción en el Sistema Contable

- Trabajando con DBExpress: TSQLQuery.RecordCount devuelve un valor erróneo. En este caso es necesario llegar hasta el último registro para saber cuantos son.

- Con los componentes Interbase.
Responder Con Cita
  #6  
Antiguo 10-12-2014
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
La forma correcta y segura de obtener los registros es contarlos:
Código SQL [-]
select count(id) from tabla where campo = loquesea
Responder Con Cita
  #7  
Antiguo 10-12-2014
edgargh edgargh is offline
Miembro
 
Registrado: jun 2006
Ubicación: León, Guanajuato
Posts: 25
Poder: 0
edgargh Va por buen camino
Cita:
Empezado por orodriguezca Ver Mensaje
Independiente de cual es la base de datos o del tipo de dataset lo correcto para determinar el número de registro es hacer:

Código Delphi [-]
  MyDataset.FetchAll;
  NumeroDeRegistros := MyDataset.RecordCount;




Si, me consta.

- Trabajando con ADO, ya sea en Delphi o Visual Basic 6, y configurando los cursores del lado del servidor, RecordCount devuelve cero y la consulta puede regresar 5 0 10 millones de registros. En estos casos si se deja que los cursores queden del lado del cliente la aplicación "estalla" por falta de memoria. Estos registros no se muestran ni se imprimen, simplemente se consolida información del Sistema de Producción en el Sistema Contable

- Trabajando con DBExpress: TSQLQuery.RecordCount devuelve un valor erróneo. En este caso es necesario llegar hasta el último registro para saber cuantos son.

- Con los componentes Interbase.
pasame el ejemplo donde te consta que usando el adoquery no funciona el recordcount
Responder Con Cita
  #8  
Antiguo 10-12-2014
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 18
orodriguezca Va por buen camino
Aquí no funciona correctamente RecordCount

Código Delphi [-]
program Project10;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  adodb,
  db,
  ActiveX;

var
  Conn: TAdoConnection;
  AdoQuery1: TAdoQuery;
begin
  CoInitialize(nil);
  try
    Conn := TAdoConnection.Create(nil);
    try
      conn.ConnectionString :=
        'Provider=SQLNCLI10.1;' +
        'Integrated Security=SSPI;' +
        'Persist Security Info=False;' +
        'User ID="";' +
        'Initial Catalog=SELA;' +
        'Data Source=MyDireccionIP;' +
        'Initial File Name="";' +
        'Server SPN=""';
      conn.Open();

      AdoQuery1 := TAdoQuery.Create(nil);
      try
        AdoQuery1.Connection := Conn;
        AdoQuery1.CursorLocation := clUseServer;
        AdoQuery1.CursorType := ctOpenForwardOnly;

        AdoQuery1.SQL.Text := 'select * from PARAMETROS';
        AdoQuery1.Open;
        WriteLn('Numero de registros: ', AdoQuery1.RecordCount);
        //AdoQuery1.RecordCount restorna -1 en SQL Server.
        // en DB2 for i retorna 0
        AdoQuery1.Close;
      finally
        AdoQuery1.Free;
      end;

    finally
      Conn.Free;
    end;
    ReadLn;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Responder Con Cita
  #9  
Antiguo 11-12-2014
dany2014 dany2014 is offline
Registrado
NULL
 
Registrado: nov 2014
Posts: 2
Poder: 0
dany2014 Va por buen camino
HOla gente, muchas gracias por los datos aporatdos, me sirvio bastante y de hecho con recorcount, salio lo que deseaba, hice el recordcount, y lo almacene en tbedit, lo necesitaba por que la tabla de alumnos aprobados de un curso, y lo almacene la cant en otra tabla,..... una ultima consulta, si alguien tiene algun procedure para verificar que el dni que ingreso en un tbdedit sea del tipo correcto, osea '40.369741' sea correcto y cualquier otro que tenga un caracter que no sea numnerico se incorrecto x ej: 'PO1234RE' 'el num ingresado no es un dni'.... muchas gracias... este mundo delphi es bastante amplio me queda mucho por descrubir...

Última edición por Casimiro Noteví fecha: 11-12-2014 a las 23:54:22.
Responder Con Cita
  #10  
Antiguo 11-12-2014
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Preguntas distintas en hilos distintos.
También puedes buscar por los foros, que es un tema que se ha tratado infinidad de veces.
Como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración
Responder Con Cita
  #11  
Antiguo 10-12-2014
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Desconozco cómo trabajan los componentes ADO que estás usando.
E insisto en que un query de consulta a una tabla no devuelve el número de registros que cumplen la condición, salvo que vayas al último.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Contar Registros KAYO SQL 10 22-07-2010 19:47:43
Contar El Numero De Registros Mostrados En Un DBGRID alexey1982 Tablas planas 2 13-06-2008 00:52:35
Contar Cantidad de Items en un ComboBox grone35 Varios 2 07-09-2006 03:06:43
Contar Registros Roilo SQL 10 18-07-2006 21:20:24
Contar Cantidad de ReadOnly brandolin OOP 4 23-01-2006 18:34:12


La franja horaria es GMT +2. Ahora son las 20:48:01.


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