Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-01-2006
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Question 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....
Responder Con Cita
  #2  
Antiguo 26-01-2006
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
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 ?
Responder Con Cita
  #3  
Antiguo 26-01-2006
Fita Fita is offline
Miembro
 
Registrado: jul 2003
Ubicación: Pilar - Argentina
Posts: 216
Poder: 21
Fita Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 26-01-2006
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
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....
Responder Con Cita
  #5  
Antiguo 27-01-2006
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
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!
Responder Con Cita
  #6  
Antiguo 29-01-2006
Fita Fita is offline
Miembro
 
Registrado: jul 2003
Ubicación: Pilar - Argentina
Posts: 216
Poder: 21
Fita Va por buen camino
Thumbs up

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
Responder Con Cita
  #7  
Antiguo 30-01-2006
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Smile Buen punto de partida

Hola FITA, realmente para mi es un muy buen punto de partida, realmente muchísimas gracias.
Responder Con Cita
  #8  
Antiguo 01-02-2006
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Todo Perfecto

Buenos días, la verdad es que me ha costado bastante ya que es mi primera aplicacion de este tipo, lógicamente me tocó aprender primero el manejador IBExpert luego todos sus procesos principales y bastante SQL, hasta que por fin conseguí hacer la recomendación de FITA y funcionó perfectamente. FITA Muchas Gracias
Responder Con Cita
Respuesta



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
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


La franja horaria es GMT +2. Ahora son las 06:50:10.


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