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 09-08-2012
ElMug ElMug is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 163
Poder: 12
ElMug Va por buen camino
DBGrid1.Free como re-obtener DBGrid1 ?

Hola amigos,

ando investigando como vaciar de data un DBGrid de manera expedita.

DBGrid1.Free lo hace, pero luego como volverlo a obtenener vacio de data? Como se restaura?

Free, en este caso, que hace?

DBGrid1.Clear parece que en Lazarus no hace nada. Que hace Clear en Delphi?

O, alternativamente, como vaciar de data a DBGrid1?

Estoy en Windows 7 usando Lazarus de 32 bits.

Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 09-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Bueno, un dbgrid no hace otra cosa que reflejar los datos de un dataset. Vaciarlo significa una de dos: desconectarlo del dataset (asignando su datasource a nil), o bien vaciando el dataset, esto es, la tabal asociada. Como ves, son dos cosas muy distintas. ¿Qué es lo que tu quieres?

// Saludos
Responder Con Cita
  #3  
Antiguo 09-08-2012
ElMug ElMug is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 163
Poder: 12
ElMug Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Bueno, un dbgrid no hace otra cosa que reflejar los datos de un dataset. Vaciarlo significa una de dos: desconectarlo del dataset (asignando su datasource a nil), o bien vaciando el dataset, esto es, la tabal asociada. Como ves, son dos cosas muy distintas. ¿Qué es lo que tu quieres?

// Saludos
Tienes razon. Lo que quiero es vaciar el dataset de records, lo cual verificaria viendo el DBGrid vacio, tambien.

Desconectarlo, no me funciona, porque al conectarlo de nuevo, se muestra de nuevo la data.

Gracias.
Responder Con Cita
  #4  
Antiguo 09-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No recuerdo si hay un método específico para eso. Creo que sólo con el componente TTable, que tiene el método EmptyTable. Si no, tendrías que hacer una consulta SQL directo sobre la tabla que alimente tu dataset, algo así como:

Código SQL [-]
delete from tabla

que borra todos los registros.

// Saludos
Responder Con Cita
  #5  
Antiguo 09-08-2012
ElMug ElMug is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 163
Poder: 12
ElMug Va por buen camino
En la base de datos, no quiero cambios fijos. Solo quiero que el dataset este vacio antes de mandar un Query.

Me encontre esto apenas:

Código:
var   
ds : TSomeDataSet 
begin   
ds.First;   
while NOT ds.Eof do   
begin     
if TRUE then 
ds.Delete; 	     
ds.Next;   
end; 
end;
En Lazarus el dataset equivale al SQLQuery1, a ver si esto se ve factible como principio.

A mi me parece que si y (lo voy a tratar al rato) relacionando esto:
sqlquery1.DataSource.DataSet.delete;
con el codigo arriba citado.

Gracias.

Última edición por ElMug fecha: 09-08-2012 a las 04:07:51.
Responder Con Cita
  #6  
Antiguo 09-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ElMug.

No conozco el componente dataset de Lazarus, pero si es similar al TSQLQuery podrías lanzar una sentencia SQL como te menciona roman.

Con un TSQLQuery sería:
Código Delphi [-]
...
  SQLQuery1.Close;
  SQLQuery1.SQL.Text:= 'DELETE FROM NOMBRE_DE_TU_TABLA';
  SQLQuery1.ExecSQL(True);
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 09-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por ElMug Ver Mensaje
En la base de datos, no quiero cambios fijos. Solo quiero que el dataset este vacio antes de mandar un Query.

Me encontre esto apenas:

Código:
var   
ds : TSomeDataSet 
begin   
ds.First;   
while NOT ds.Eof do   
begin     
if TRUE then 
ds.Delete; 	     
ds.Next;   
end; 
end;
En Lazarus el dataset equivale al SQLQuery1, a ver si esto se ve factible como principio.

A mi me parece que si y (lo voy a tratar al rato) relacionando esto:
sqlquery1.DataSource.DataSet.delete;
con el codigo arriba citado.

Gracias.
El código que pones, suponiendo que funciona (*), lo que hace es borrar todos los registros del query, pero, según comentas, no es lo que quieres hacer, y, si así fuera, entonces sería mejor una sentencia como la que te puse en mi último mensaje.

(*) Esto lo digo porque no toda consulta SQL es modificable, es decir, una consulta SQL deuelve un conjunto de registros pero no necesariamente podemos editar o borrar estos registros a partir del componente.

Aunque creo que te falta explicar con mayor claridad lo que quieres hacer, creo que lo que deseas hacer, corresponde, en realidad, a cerrar el SQLQuery:

Código SQL [-]
SQLQuery1.Close; // Cierras la consulta y con ello el DBGrid asociado se pone en blanco.
SQLQuery1.SQL.Text = 'aquí el texto de la nueva consulta';
SQLQuery1.Open; // Lanzas la nueva consulta

// Saludos
Responder Con Cita
  #8  
Antiguo 09-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por ecfisa Ver Mensaje
No conozco el componente dataset de Lazarus
Supongo que, al igual que en delphi, dataset es la clase base de todos los components de acceso a datos. SQLQuery sería un de sus derivados.

// Saludos
Responder Con Cita
  #9  
Antiguo 13-08-2012
ElMug ElMug is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 163
Poder: 12
ElMug Va por buen camino
Hola amigos,

Una manera de vaciar el dataset es mandar un query de select que retorne NADA.

El problema es si se va a hacer por codigo, tal vez hay que hallar un query que lo haga. Si se hace manual, ya corriendo el programa, se llena una frase con algo que garantice que no califca el query. Por ejemplo, para Empleado "Salario = 0.001".

O tal vez un query a una tabla que no existe, con un nombre muy remoto, como "Select * from sdfasdu2cc42 where ..." Esto, si trabaja, si se puede codificar, creo.
Responder Con Cita
  #10  
Antiguo 13-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por ElMug Ver Mensaje
Una manera de vaciar el dataset es mandar un query de select que retorne NADA.
Hola.

A ver... por vaciar el dataset yo interpreto borrar sus datos, pero si lo que deseabas era realizar una consulta vacía ("que retorne NADA"), basta con hacer:
Código SQL [-]
SELECT * FROM NOMBRE_DE_TU_TABLA WHERE 1 = 2

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 13-08-2012 a las 19:05:47. Razón: ortografía
Responder Con Cita
  #11  
Antiguo 13-08-2012
ElMug ElMug is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 163
Poder: 12
ElMug Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

A ver... por vaciar el dataset yo interpreto borrar sus datos, pero si lo que deseabas era realizar una consulta vacía ("que retorne NADA"), basta con hacer:
Código SQL [-]SELECT * FROM NOMBRE_DE_TU_TABLA WHERE 1 = 2


Saludos.
Si, hay muchas maneras, pero si se quiere codificar, el problema es que no siempre sabras que tabla o que base de datos se va a abrir.

Esto se me ha ofrecido para rodearle a un bug que creo que se relaciona con algun(os) componentes base (creo que el DBGrid) de Lazarus, y no lo pude solucionar.

Tampoco vaciar el dataset me resolvio el problema. Algo dificil de explicar, y ya lo ando resolviendo usando otros componentes.

Gracias!
Responder Con Cita
  #12  
Antiguo 13-08-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ElMug Ver Mensaje
Si, hay muchas maneras, pero si se quiere codificar, el problema es que no siempre sabras que tabla o que base de datos se va a abrir.
¡¡¡Cómo que no vas a saber qué tabla o base de datos vas a abrir!!!

Cita:
Empezado por ElMug Ver Mensaje
Esto se me ha ofrecido para rodearle a un bug que creo que se relaciona con algun(os) componentes base (creo que el DBGrid) de Lazarus, y no lo pude solucionar.
¿Y a qué bug haces referencia?

Cita:
Empezado por ElMug Ver Mensaje
Tampoco vaciar el dataset me resolvio el problema. Algo dificil de explicar, y ya lo ando resolviendo usando otros componentes.
¿Difícil de explicar?, ¿otros componentes?
Responder Con Cita
  #13  
Antiguo 13-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por ElMug Ver Mensaje
Si, hay muchas maneras, pero si se quiere codificar, el problema es que no siempre sabras que tabla o que base de datos se va a abrir.
En algunos motores (SQLite, MySQL, por ejemplo) puede hacerse esto:

Código SQL [-]
select 1 limit 0;

que regresa un resultado vacío sin tener que referirse a una base o tabla específica.

// Saludos
Responder Con Cita
  #14  
Antiguo 13-08-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
Código SQL [-]select 1 limit 0;
Qué curioso, sin especificar ninguna tabla.
En firebird se puede hacer que devuelva cero registros indicando alguna tabla del sistema:

Código SQL [-]
select first 0 * from RDB$DATABASE

No es lo mismo
Responder Con Cita
  #15  
Antiguo 13-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Estas seguro que firebird no admite esta consulta?

Código SQL [-]
select 1

// Saludos
Responder Con Cita
  #16  
Antiguo 13-08-2012
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
¿Estas seguro que firebird no admite esta consulta?

Código SQL [-]
select 1

// Saludos
De poder se puede, pero no tiene sentido

Saludos

Última edición por egostar fecha: 12-08-2013 a las 17:06:09.
Responder Con Cita
  #17  
Antiguo 13-08-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Sí, lo admite, pero para otra cosa, fíjate en el ejemplo:

EDITO: se me adelantó egostar
Imágenes Adjuntas
Tipo de Archivo: jpg ejm1.jpg (35,7 KB, 7 visitas)
Responder Con Cita
  #18  
Antiguo 13-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Qué curioso! ¿Cuántos registros devuelve? ¿O es infinito?

// Saludos
Responder Con Cita
  #19  
Antiguo 13-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Sí, lo admite, pero para otra cosa, fíjate en el ejemplo:

EDITO: se me adelantó egostar
¿Cuál otra cosa?

Y si lo admite, ¿a poco no admite esto?

Código SQL [-]
select first 0 1

// Saludos
Responder Con Cita
  #20  
Antiguo 13-08-2012
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
¡Qué curioso! ¿Cuántos registros devuelve? ¿O es infinito?

// Saludos
Rectifico,

Código SQL [-]
Select 1 from tablaX

Devuelve la cantidad de registros que tenga la tabla

Código SQL [-]
Select 1

No se puede, genera un error

Cita:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Unexpected end of command.
Saludos
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
Dbgrid1, como saber asignarle la ubicacion del cursor? asdbernardo Conexión con bases de datos 4 09-10-2011 21:29:24
dbgrid1 shoulder Varios 12 18-11-2009 17:36:02
Como actualizar Free Pascal felipe88 Lazarus, FreePascal, Kylix, etc. 8 10-11-2008 16:58:14
DBGrid1 en Memo1 gsilvei Varios 1 09-12-2006 15:06:12
¿¿¿DBGrid1.FixedCols := n;??? Sergio J. Varios 2 02-12-2005 10:28:31


La franja horaria es GMT +2. Ahora son las 14:22:27.


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