Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   ordenar base de datos (https://www.clubdelphi.com/foros/showthread.php?t=61875)

andres*** 25-11-2008 19:24:00

ordenar base de datos
 
hola

tengo una base de datos hecha en delhi 4
modelo
paciente fecha hora
a 12/12/2008 11:00
d 21/12/2008 11:35
c 22/12/2008 12:20

nesecito que me la ordene por fecha y por hora , me podrian ayudar
el de arriba seria como me tendria que quedar..


muchas gracias

Caral 25-11-2008 19:33:12

Hola
Código SQL [-]
Select * from TUTabla order bye TuTabla.Fecha, TuTabla.Hora ADS
No se me parece que tambien quieres ordenar al paciente.
Código SQL [-]
Select * from TUTabla order bye TuTabla.paciente, TuTabla.Fecha, TuTabla.Hora ADS
Saludos

Delphius 25-11-2008 19:36:35

Hola andres***,
Como te he dicho por mensaje privado: esto se puede hacer con una consulta SQL que tenga la clásula ORDER BY:

Código SQL [-]
SELECT nombre_campo1, nombre_campo2, nombre_campoN
FROM nombre_tabla
ORDERY BY nombre_campo_fecha, nombre_campo_hora

Por ejemplo, en tu caso sería algo:

Código SQL [-]
SELECT paciente, fecha, hora
FROM tabla_atencion_pacientes
ORDER BY fecha, hora

Sería mucho más sencillo si tienes un campo que sea fecha/hora, de este modo no tendrías que estar guardando los datos en forma seperada. Con un simple ORDER BY, el motor se encargaría de ordenarlos ascendentemente tanto por fecha y hora.

Si tienes problemas con la consulta SQL y/o no entiendes hazlo saber en este hilo.

Saludos,

andres*** 25-11-2008 19:44:08

tabla
 
como seria la tablita en sql?
no entiendo mucho
gracias

Caral 25-11-2008 19:52:31

Hola
Hay que tener en cuenta varias cosas.
1-La tabla
Esta pertenece a la base de datos, es la que contiene los datos
2-La consulta.
Lo que se hace con sql, osea se pide informacion (consultas), se añaden items, etc, a las tablas.
Lo que se te dio fue la manera de CONSULTAR por medio de SQL a una tabla, NO organizar la Tabla.
Saludos

Delphius 25-11-2008 19:57:25

Cita:

Empezado por andres*** (Mensaje 327903)
como seria la tablita en sql?
no entiendo mucho
gracias

¿Tablita en sql? ¿A qué te refieres?:confused:
Dices que tienes una base de datos, por tanto intuyo que tienes una tabla.
Partamos de algo fundamental: ¿Podrías decirnos que tanto sabes sobre bases de datos?

¿Que motor usas? ¿Que componentes empleas para acceder a la base de datos?

Cuando más nos puedas decir al respecto más te podremos ayudar.

Saludos,

andres*** 25-11-2008 20:12:01

entiendo algo de bases de datos

lo que hice fue armar un formulario
poberle un componente table mas un data source
base de datos elegi dbase IV
y tengo la table mostrada en un db grid
y necesito que en el db grid me salga ordenada por fecha y dentro de ese orden tambien por hora..

disculpen si no me expreso bien..
gracias por ayudarme

Delphius 25-11-2008 20:24:39

OK. Ahora entiendo. Bueno... si puedes emplear algo más "moderno" sería mejor, dBase como que está un tanto obsoleto.

Como tienes un TTable en vez del TQuery, puedes hacer uso de la propiedad IndexName, IndexFieldNames. Con estas propiedades puedes alterar el índice para la base de datos y obtener los datos ordenados. Siempre y cuando tengas un índice para el campo fecha y hora podrás realizar lo que deseas.

El mayor problema que tienes es que guardas la fecha y la hora por separado. Va a ser necesario tenerlos en uno sólo (es decir campo fecha/hora) para conseguir ordenarlos por fecha y hora.

Si en vez de emplear el TTable usaras un TQuery es posible lanzar las consultas SQL como indicamos anteriormente.

Sugiero que leas la ayuda sobre las propiedades que te mencioné, sobre los componentes. Además no está demás una leida a material tanto teórico como práctico sobre Delphi y bases de datos. En el FTP y el wiki del club hay material.

Saludos,

Lepe 26-11-2008 09:25:02

andres, vamos a pillar al toro por los cuernos ;).

En la paleta BDE de delphi, haz clic sobre el componente TQuery y ponlo en tu ventana.

En la propiedad DatabaseName, elige donde tienes tu base de datos. Si has creado un "alias" en el Database Desktop, entonces usa la propiedad AliasName y elígelo de la lista (si esto te suena a chino, entonces usa la propiedad DatabaseName).

Ahora busca la propiedad SQL y haz clic en los 3 puntitos, escribe esto en esa ventana:
Código SQL [-]
SELECT paciente, fecha, hora
FROM tabla_atencion_pacientes
ORDER BY fecha, hora, paciente
Nota: tabla_atencion_pacientes tienes que sustituirlo por el nombre real de tu tabla, lo puedes deducir del TTable que tienes, en su propiedad Tablename vendrá algo así: "Pacientes.DB" (la extensión .DB no hace falta que la pongas), por tanto tu tabla se llama pacientes.

Pon en esa ventana un TDatasource desde la pestaña "Data Access" se llamará Datasource1, en su propiedad Dataset, elige Query1.
En la propiedad Datasource del dbgrid elige el Datasource1 (con esto estamos ligando la consulta al grid para ver los resultados).

En el FormCreate de esa ventana, escribe:
Código Delphi [-]
query1.Open

Listo !!

Cuando ejecutes tu programa, ya tendrás ordenado por fecha, después por hora y después por Nombre alfabético de los pacientes.

¿Lo ves ahora más fácil? No era para tanto ¿verdad? Bien, pues ahora te toca a tí buscar un buen manual de SQL (que los hay a patadas en internet) y mirar cómo puedes ordenar descendentemente los datos, agrupar información para sacar totales, etc.

Saludos

Saludos.

andres*** 26-11-2008 20:00:52

muchisimas gracias a todos los que me bancaron he solucionado el problema del orden por fecha y por hora

andres*** 28-11-2008 22:53:28

hola
tengo un problema, cuando imprimo un report en vez de salirme la primer hoja impresa, me sale la primera en blanco y la segunda con la impresion

yo pongo

form x .quickrep1.peview

y cuando me tira la vista preliminar del fornmulario , mando a imprimir

hay alguna otra forma de imprimir un formulario?

gracias

Lepe 29-11-2008 02:34:02

Puedes obviar la presentación preliminar y enviar a imprimir, pero el resultado va a ser el mismo.

mira con detalle (si lo has tocado o no usas un A4) el tamaño de página, los márgenes y posiblemente una banda de detalle muy grande.

Saludos

andres*** 16-12-2008 19:32:56

buenaas

nesecito saber como puedo depurar desde una fecha hasta otra los datos de una tabla

Delphius 16-12-2008 19:46:33

Cita:

Empezado por andres*** (Mensaje 331171)
buenaas

nesecito saber como puedo depurar desde una fecha hasta otra los datos de una tabla

¿Depurar?:confused:
¿Podrías ser más descriptivo?

¿Que componentes estás empleado? ¿Sigues con los Tables o estás haciendo uso de Querys.?

Saludos,

andres*** 16-12-2008 19:53:46

perdon.

necesito poner dos fechas y que todos los datos que esten entre esas fechas se borren de la tabla .

yo tengo una tabla a la que le cargo turnos
y para que no jodan los turnos de los dias pasados a la fecha queria saber como puedo hacer para borrarlos

me explico.

saludos

Caral 16-12-2008 20:04:17

Hola
Y eso no se hace con un asentencia sql con Betwin (o lo que es lo mismo entre en spanglish) o poniendo los rangos >= y <= .
No se digo yo.
Saludos

Delphius 16-12-2008 20:13:52

Como bien lo ha dicho Carlos,
Si se hace mediante SQL, y por tanto de Querys, hay dos opciones:
1. Poner en la parte where una condición del tipo (fecha >= fechaIni) and (Fecha <= fechaFin)
2. Poner en la parte where la instrucción bettwen.

Es un tema ya muy ampliamente tratado y si buscas en los foros hallarás muchos hilos en donde hay ejemplos. Prueba con palabras claves como rango fecha, bettwen.

Si se emplea un Table no queda otra opción que emplear Filtro y poner una condición como la señalada en el punto 1. Nuevamente debo mencionar, sin ofender, que el tema de filtros también fue tratado.

Por algo he dicho que mencionaras que componentes usas. Dependiendo de cual uses se realiza el trabajo.

Saludos,

Saludos

andres*** 16-12-2008 20:22:34

yo lo que quiero es eliminar los datos que cargue en la base de datos, entre una fecha y otra ,no se si me explico.

Delphius 16-12-2008 20:32:40

Cita:

Empezado por andres*** (Mensaje 331199)
yo lo que quiero es eliminar los datos que cargue en la base de datos, entre una fecha y otra ,no se si me explico.

Ahora si, no es lo mismo mostrar datos que eliminarlos.

No es por ser pedante, pero si supieramos, si nos contases de que modo estás trabajando sería más fácil para ti entender nuestros ejemplos. Por algo te estoy pidiendo que nos comentes sonre que componentes empleas.
Para mi es mucho más fácil, directo, económico, y fiable lanzar una instrucción SQL como esta:

Código SQL [-]
DELETE FROM LA_TABLA
WHERE Fecha between FechaIni and FechaFinal

O algo similar.

Saludos,

andres*** 07-01-2009 21:13:02

buenas tardes....

tengo un problema en el programa que arme con la ayuda de ustedes,
no puedo hacer que me filtre x medico y a la vez por dia.
la sentencia que puse es la siguiente:

procedure TIngresoturnos.SpeedButton3Click(Sender: TObject);
begin

query1.active:=true;
query1.filter:= ComboBox1.TEXT + ' ='+ quotedstr(DBLookupComboBox1.TEXT + '*');
query1.filtered:=true;
dbgrid1.visible:=false;
dbgrid2.visible:=true;
QUERY1.filter:= 'FECHA=' + quotedstr(FORMATDATeTIME('dd/mm/yyyy',datetimepicker2.date));
end;
tendra alguna solucion gracias

Delphius 07-01-2009 21:27:15

Hola andres***,
Usa las etiquetas DELPHI por favor:

[ DELPHI ]
tu codigo aquí
[ /DELPHI ]

Sin los espacios entre los corchetes.

Respecto a tu duda,
Sólo veo que haces un segundo filtro pero no indicas que lo aplique mediante Filtered.
Fuera de eso no veo error.
Si te da un error debes indicárnoslo. No basta con tirarnos el código y que adivinemos. Coméntanos más al respecto.

Saludos,

andres*** 07-01-2009 21:42:24

hola Delphius

el problema es el siguiente:
mi base posee turnos
ej

paciente fecha hora medico
xxx 10/01/09 11:45 spatola
dsd 10/01/09 12:25 rames
yty 10/01/09 11:25 spatola

cuando yo filtro con la sentencia que te detalle en el mensaje anterior , yo pretendo que cuando me filtre, me devuelva el detalle de pacientes que tiene un determinado medico, un determinado dia

por ejemplo yo filtro el medico spatola y el dia 10/01/09 y me tendria que quedar.

paciente fecha hora medico
yty 10/01/09 11:25 spatola
xxx 10/01/09 11:45 spatola

el tema es que me filtra por dia y no por medico.....

Delphius 07-01-2009 21:53:17

No es por nada pero volvemos a un dilema que inicialmente te habíamos comentado: ¡tienes la fecha y la hora en campos separados!

Hay dos opciones:
1. Emplear un campo fecha y hora o DateTime en que incluyas la fecha y la hora. De este modo tu condición de filtrado será muy simple:

Código Delphi [-]
Query1.Filter := 'TU_CAMPO = ' + Quoted(....);

Tal como lo estás pretendiendo hacer.

2. O bien, seguir manteniendo los campos por separado y hacer una condición compuesta. Algo como:

Código SQL [-]
(FECHA =  07/01/2009) AND (HORA = 10:20)

Es decir que bastaría con añadir a tu filtro un AND y la siguiente condición: por hora.

¿Se entiende?

Saludos,

andres*** 07-01-2009 22:16:46

Delphius

en la primera yo cargaria la fecha y la hora en un mismo campo?

y la segunda

vos decis que ponga la condicion de filtrado por medico y la de por hora con and en el medio.

andres*** 08-01-2009 19:21:21

por favor alguien que me ayude con esto.


gracias

Delphius 08-01-2009 20:19:23

Hola andres***,
Disculpame no había visto que ya habías comentado al respecto.

A ver si me explico: Si tu tuvieras en un mismo campo registrado la fecha Y hora se puede emplear el código que tu comentas. Puesto que bastaría una simple condición para filtrar los datos.

Pero como empleas dos campos: uno para la fecha y otro para el día, (supongo que será del tipo Date y Time respectivamente) necesariamente debes armar una doble condición:
Código Delphi [-]
Query1.Filter := '(CAMPO_FECHA = ' + Quoted(...) + ') AND (CAMPO_HORA = ' + Quoted(...) + ')';

Ahora bien, este código es un tanto lioso. Lo más confiable y rápido es lanzar directamente la consulta con los datos a filtrar:
Código SQL [-]
select TUS_CAMPOS
from TU_TABLA
where (Fecha = :FechaParam) AND (Hora = :HoraParam)

Y valiendote de parámetros luego puedes hacer esto:
Código Delphi [-]
Query1.Params.ParamByName(FechaParam).AsDate := ....
Query1.Params.ParamByName(HoraParam).AsTime := ....
Query1.Open;

Por el tema de parámetros sugiero una búsqueda en los foros sobre el tema. Fue ampliamente tratado.

Y si a dichos campos lo "tansforma" a uno solo, de tipo fecha/hora igual puedes seguir lanzando una SQL igual a la anterior, pero esta vez, con una sola condición:

Código SQL [-]
where (FechaHora = :FechaHoraParam)

Y en Delphi, antes de lanzar algo como:

Código Delphi [-]
Query1.Params.ParamByName(FechaHoraParam).AsDateTime := ....

¿Me explico?

Saludos,

carlosjimenez 22-11-2011 16:54:28

no abre el qry
 
Saludo a todos, tengo un qry que no me da el open(no abre) solo cuando utilizo SQLSERVER, si utilizo otra base de datos funciona bien, he hecho varia prueba y he podido comprobar que es debido al order by de los campos que estoy solicitando, si le pongo un solo(el codigo del articulo) el qry abre pero solo con ese, si le pongo otro no abre o si lo convino con otros, es solo con ese campo que abre.

Me explico sino le pongo el orden by el qry abre bien, si le dejo el order by con un campo que no sea el codigo del articulo no abre

este es el qry

with FDataModulo.qryUtility2, Sql do
begin
Close;
Clear;
Add('select cia.cia_descripcion,cia.cia_rnc,'+
'loc.loc_descripcion,tid.cia_codigo,tid.dti_fecha,tid.dti_item,tid.alm_codigo,'+
'tid.art_codigo,loc.loc_direccion,loc.loc_telefono,'+
'loc.loc_fax,art.id,tri.tri_fecha,tri.tri_codigo,'+
'tdo.tdo_descripcion,tdo.tdo_entrada_salida');
Add(' from companias cia, localidades loc, transacciones_inv tri, tipos_documentos tdo,');
Add(' transacciones_inventario tid,articulos art');
Add(' where cia.cia_codigo = '+#39+gs_cia_codigo+#39);
Add(' and loc.cia_codigo = cia.cia_codigo');
Add(' and tri.cia_codigo = loc.cia_codigo');
Add(' and tri.loc_codigo = loc.loc_codigo');
Add(' and tri.alm_codigo = ''01''');
Add(' and tid.art_codigo = '+#39+articulo+#39);
Add(' and tri.tri_estado <> ''R''');
Add(' and tdo.cia_codigo = tri.cia_codigo');
Add(' and tdo.tdo_codigo = tri.tdo_codigo');
Add(' and tid.cia_codigo = tri.cia_codigo');
Add(' and tid.loc_codigo = tri.loc_codigo');
Add(' and tid.tdo_codigo = tri.tdo_codigo');
Add(' and tid.tri_codigo = tri.tri_codigo');
Add(' and art.cia_codigo = tid.cia_codigo');
Add(' and art.tpi_codigo = tid.tpi_codigo');
Add(' and art.art_codigo = tid.art_codigo');
Add(' order by tid.dti_fecha'); // si le pongo el campo fecha no abre solo con el campo codigo de articulo no toma otro.
Open;

este es el orde del qry que quiero, este orden me funciona bien en otras base de datos menos en SLQSERVER
Add(' order by tid.art_codigo,tri.tri_fecha,tri.tri_codigo');

Gracias de antemano

Casimiro Notevi 22-11-2011 18:57:03

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración.


La franja horaria es GMT +2. Ahora son las 03:02:00.

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