FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Relación entre IBDataSet-Dbgrid que pasa realmente ?
Primero, no estoy seguro si la pregunta está ubicada en el foro correspondiente, (moderador: por favor ubicarla y disculpa el error).
El escenario es el siguiente: tengo los siguientes componentes de conexión a una base de datos en fireBird 1.5.3 desde delphi 7.0 y utilizo los componentes ibx, es decir, en un datamodule tengo: IBDataBase <> IBTransaction IBDataSet > DataSource En el evento DataChange del datasource le asigno a un TEdit lo siguiente: LabeledEdit3.Text:=inttostr(dm.ibds_proveedores.RecNo)+'/'+inttostr(dm.ibds_proveedores.RecordCount); En el formulario de consulta, cuando éste se activa tengo la instrucción: dm.ibds_proveedores.first; y lógicamente el labelededit3.text muestra: la posición (recno) y el numero de registro (recordcount); También tengo un dbgrid conectado con el datasource, cuando el formulario se activa me muestra los primeros cinco registros de la tabla, ya que el dbgrid solo tiene esa dimensión, para este momento el labelededit3 me muestra registro 1 de 5 es decir: 1/5, cuando me movilizo hacia el siguiente registro me muestra 1/6, y así sucesivamente hasta el ultimo (No. 12). Esto lo hace la primera vez cuando entre al sistema, pero luego en el trasncurso de la aplicación se muestra la información labelededit3 normalmente, es decir, cuando se carga el formulario por segunda vez si me muestra el total de todos los registro: (1/12), que es lo que se debería mostrar al activar el formulario la primera vez. En otras oportunidades (con los componentes DBExpreess y localmente) me muestra la información correcta: el número del registro actual +'/'+ el total de registros de la tabla. Nota: La base de datos se encuentra en un servidor linux y la aplicación en una estación de trabajo con winxp. Gracias por su atención.... |
#2
|
||||
|
||||
Otra cosa, cada vez que el formulario se activa tengo que ir al final y luego al principio de la tabla para que se pueda mostrar los registros en forma correcta. Por qué sucede esto, que se está haciendo mal ?
|
#3
|
|||
|
|||
Hola...
Estoy en el foro por otro tema y he visto tu post. Soy relativamente nuevo con Interbase pero hasta donde pude leer, Interbase nunca te enviará todos los registros de una tabla, el IBDataset pide solo los que se necesitan para mostrar en pantalla. en tu caso, al abrir el dataset muestras 5 registros y a medida que avanzas aparece 1/6, 1/7 y asi.. creo que por ahi viene la cosa. Tengo una aplicación que necesita mostrar la cantidad de registros de una tabla; para ello utilizo un stored procedure que hace un count(*) de la tabla en el servidor y solo me devuelve el total de registros... En tu caso, creo que al ir al final de la tabla ahi obtienes el total de registros pero estos van y vienen por la red... con el stored procedure es más rápido Espero te sirva de orientación Saludos |
#4
|
||||
|
||||
Hola Fita, me contenta que hayas entendido muy bien mi problema, pero con tu explicación me doy cuenta que no estaba muy lejos de entender lo que pasaba, solo faltaba que otra persona me lo ratificara. Ok, con tu recomendación de hacer el count sería lo mejor, el problema está que tendré que estudiar más acerca del tema ya que no conozco los stored procedure, a menos que con tu valiosa colaboración y ejemplos pueda enterlos
Gracias.... |
#5
|
||||
|
||||
Otra opcion es hacer FetchAll al dataset, aunque no recomendable, pues traera toda la informacion, ocupando un poco la red
__________________
Van Troi De León (Not) Guía, Code vB:=Delphi-SQL, ¿Cómo? Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto! |
#6
|
|||
|
|||
Bueno, crear un Stored Procedure es fácil... aqui va el código
CREATE PROCEDURE TOT_FAMILY RETURNS ( NTOTAL INTEGER) AS begin SELECT COUNT(*) FROM FAM000 where marcabaja = 'A' INTO nTotal; end Este procedimiento devuelve el total de familias activas (marcabaja = 'A') que lo guarda en la variable nTotal En tu form pegas un componente IBTransction y un Componente IBStoredProcedure. Enlazas este último a la transaccion. En la propiedad StoredProcedureName pones eso, el nombre del procedimiento, en este ejemplo Tot_Family Para ejecutar el Stored Procedure haces esto en algun ciclo de tu programa: IBStoredProc1.ExecProc; // ejecutas el procedure en el servidor nRows := IBStoredProc1.Params.Items[0].Value; La variable nRows recibe el total de registros que conto el Stored Procedure. Si el Stored Procedure tuviese mas variables las sentecias que traen los datos serian así: nRows := IBStoredProc1.Params.Items[0].Value; nRows2 := IBStoredProc1.Params.Items[1].Value; nRows3 := IBStoredProc1.Params.Items[2].Value; Para mantener la base de datos te recomiendo usar (si es que no utilizas) un administrador de bases de datos ya que la creacion de Procedures, Tablas, Vistas, es es visual. Hay muchos y muy buenos, a saber: IBWorkbench, IBAdmin, EMS Interbase & Firebird Manager (son pagos) y una buena cantidad de uso libre y Open Source. En mi caso uso el EMS que es muy completo y ademas soporta Firebird al que pienso migrar en el futuro. Espero que te sirva como punto de partida. Saludos |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
IBDataSet no asigna valores a las variables de campo | gendelphi | Conexión con bases de datos | 2 | 31-01-2006 02:23:11 |
Que Le Pasa Al Dbgrid | JULIPO | MySQL | 3 | 25-01-2006 16:45:15 |
Como Ligar Dbgrid A Ibdataset? | ibuser | Firebird e Interbase | 5 | 26-08-2004 18:07:05 |
Relacion de tablas con DBGrid | TONIAM | Conexión con bases de datos | 0 | 15-04-2004 11:46:49 |
diferencia entre un DBGrid y un DBCtrlGrid | ronson | OOP | 4 | 18-02-2004 21:03:39 |
|