![]() |
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. |
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 |
Cita:
Desconectarlo, no me funciona, porque al conectarlo de nuevo, se muestra de nuevo la data. Gracias. |
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:
que borra todos los registros. // Saludos |
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 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. |
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:
Saludos. |
Cita:
(*) 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:
// Saludos |
Cita:
// Saludos |
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. |
Cita:
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:
Saludos. |
Cita:
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! |
Cita:
Cita:
Cita:
|
Cita:
que regresa un resultado vacío sin tener que referirse a una base o tabla específica. // Saludos |
|
|
Cita:
Saludos |
1 Archivos Adjunto(s)
Sí, lo admite, pero para otra cosa, fíjate en el ejemplo:
EDITO: se me adelantó egostar :) |
¡Qué curioso! ¿Cuántos registros devuelve? ¿O es infinito?
// Saludos |
Cita:
Y si lo admite, ¿a poco no admite esto?
// Saludos |
Cita:
Devuelve la cantidad de registros que tenga la tabla
No se puede, genera un error Cita:
|
¡Ah! Ok.
// Saludos |
No, necesita que se le añada la tabla, el "from loquesea" y devuelve los registros que tenga la tabla o los que devuelva el filtro que le pongas, o sea, añade ese valor numérico como un campo más a todos los registros.
|
Cita:
Entonces si sólo muestra 1 registro de la tablaX, lo cual me parece un tanto lógico, ¿ los otros motores que muestran roman ?, me parece interesante ver lo que produce la sentencia Select 1 digamos en MySQL Saludos |
Cita:
Así sin más, no. Si se puede como en el código de la imágen de Casimiro (y supongo que en el de egostar) haciendo referencia a una tabla. O para evitar referenciar una tabla se podría hacer algo como:
Pero una consulta que no devuelva ni siquiera una constante, nada de nada ... la verdad no lo se. :confused: Saludos. :) |
Cita:
Código:
mysql> select 1; |
O más claro:
Código:
mysql> select 1 as uno; |
Cita:
Saludos. :) |
Ah ok.
Y si la sentencia es Select 10 produce diez registros ¿? Saludos |
Cita:
Saludos |
Exacto. Es bastante directo, tú le dices "selecciona 84" y él te regresa exactamente eso, 84 :D También puedes hacer
o bien
// Saludos |
Hola.
Me quedé pensando... aún si ejecutara: En el DBgrid aparecería la selección ¿ o no ? Sinceramente yo había entendido que quería eliminar los datos de la tabla (mensaje #3): Cita:
|
Regresando al tema en cuestión.
No será mejor que se use una tabla en memoria (CDS) y usarla para agregar los registros y "borrarla" cuando ya no se requiera ¿? eso nos permitiría usarla para cualquier tabla y cualquier base de datos, el problema es que hay mucho más trabajo en tiempo de ejecución, pero así se evitaría afectar físicamente los datos de las tablas utilizadas. Saludos |
Cita:
Igualmente, SQL queries son independientes de estar atados a una tabla. La tabla se especifica en el SQL query. Mi aplicacion arranca sin nombre de base de datos, y sin tablas, y el usuario especifica ya al usarla. El problema que me encontre es con SQLite3, al correr codigo que abre Blobs o Memos durante OnColEnter. Y es que para jalar los datos usa el nombre de la columna (manda un Query). Eso trabaja bien, pero al mandar un query a OTRA tabla, se regresa un error diciendo que la columna "X" no existe. La columna X pertenece a la tabla anterior. Monitoreo el SQL que manda la aplicacion, y NO TIENE NADA que ver con la columna X. La verdad es que esto ya lo doy por "bug" (despues de muchismos analisis y pruebas) de DBGrid de Lazarus, pues la aplicacion trabaja perfectamente mientras no mande un query a otra tabla. Y por lo pronto no le veo el merito a discutir esto mas alla. Tal vez despues. Gracias por el interes. P.S., tambien, con el codigo identico, mientras no se accesen Blobs(imagenes) ni Memos (dentro de OnColEnter), SI SE PUEDE mandar queries a OTRA tabla, perfectamente. |
A proposito, a mi esto, en Lazarus, usando SQLite3, vacia el grid:
select * from basurax31429cdr Pero tal vez no en todos los motores sea asi. |
Cita:
|
Cita:
Y ESO si seria un bug. Lo que tu describes seria algo muy bobo de hacer, si asi fuese. |
.....ademas, el Query ni siquiera menciona las columnas de la Tabla siguiente.
|
Cita:
Saludos |
Cita:
Creo yo que hay un escurrimiento de memoria, o le falta alguna validacion cuando en OnColEnter del DBGrid se accede a Imagenes o a Memos en la rutina de algun componente; creo you que en DBGrid de Lazarus. Aparte, las tablas son de 3 o 4 tiras, y ninguna tiene campos vacios, y las imagenes son tipicas de camara de 3 megapix y los memos son un parrafo o dos tipicos de texto. Todo se muestra correcto. No hay basura en la data,ni nada asi. En caso de encontrar algo mas tangible, con gusto se los reporto, aun si fuese defecto de mi desarrollo. |
¿Y digo yo porqué en lugar de asumir ciertas cosas (como pensar que se trata de un bug) y ser demasiado esquivo al señalar puntualmente cuales son tus problemas, y ni que decir... que en ningún momento has mostrado siquiera como es que efectivamente estás desarrollando no te tomas en serio y contribuyes al explicarte? Porque muchas palabritas, pero con muy poco sentido, totalmente dispersas, muchas asunciones y de temas tan aislados que al final no se entiende a lo que va la cosa.
ElMug, si deseas recibir ayuda debes explicarte y ceder en brindar la información lo más ordenada y completa posible. Y sin ver al menos pedacito de tu código la tienes IMPOSIBLE. ¡Déjate ayudar! Porque así como lo pones... ¿que más quieres que hagamos? :o |
| La franja horaria es GMT +2. Ahora son las 06:51:38. |
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