Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-10-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
Error en Consuta SQL

Salu2 amigos foristas

quisiera saber como puedo solventar el siguiente problema:

Código Delphi [-]
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('Select Aula,Dia,Prof,Hora1,Hora11,Hora2,Hora22,Hora3,Hora33,Hora4,Hora44,Hora5,Hora55,Hora6,Hora66,Hora7,Ho  ra77,Hora8,Hora88,Hora9,Hora99,Hora10,Hora101,Hora11a,Hora111,Hora12,Hora121,Hora13,Hora131,Hora14,H  ora141,Hora15,Hora151,Hora16,Hora161,Hora17,Hora171 From horario.db Where Aula like "' + (ComboBox1.Text) + '%"');
  Query1.Active:=True;
  Query1.Open;
  dbgrid1.Columns.Items[0].Width:=100;
  dbgrid1.Columns.Items[1].Width:=100;
  dbgrid1.Columns.Items[2].Width:=100;
  dbgrid1.Columns.Items[3].Width:=50;
  dbgrid1.Columns.Items[4].Width:=50;
  dbgrid1.Columns.Items[5].Width:=50;
  dbgrid1.Columns.Items[6].Width:=50;
  dbgrid1.Columns.Items[7].Width:=50;
  dbgrid1.Columns.Items[8].Width:=50;
  dbgrid1.Columns.Items[9].Width:=50;
  dbgrid1.Columns.Items[10].Width:=50;
  dbgrid1.Columns.Items[11].Width:=50;
  dbgrid1.Columns.Items[12].Width:=50;
  dbgrid1.Columns.Items[13].Width:=50;
  dbgrid1.Columns.Items[14].Width:=50;
  dbgrid1.Columns.Items[15].Width:=50;
  dbgrid1.Columns.Items[16].Width:=50;
  dbgrid1.Columns.Items[17].Width:=50;
  dbgrid1.Columns.Items[18].Width:=50;
  dbgrid1.Columns.Items[19].Width:=50;
  dbgrid1.Columns.Items[20].Width:=50;
  dbgrid1.Columns.Items[21].Width:=50;
  dbgrid1.Columns.Items[22].Width:=50;
  dbgrid1.Columns.Items[23].Width:=50;
  dbgrid1.Columns.Items[24].Width:=50;
  dbgrid1.Columns.Items[25].Width:=50;
  dbgrid1.Columns.Items[26].Width:=50;
  dbgrid1.Columns.Items[27].Width:=50;
  dbgrid1.Columns.Items[28].Width:=50;
  dbgrid1.Columns.Items[29].Width:=50;
  dbgrid1.Columns.Items[30].Width:=50;
  dbgrid1.Columns.Items[31].Width:=50;
  dbgrid1.Columns.Items[32].Width:=50;
  dbgrid1.Columns.Items[33].Width:=50;
  dbgrid1.Columns.Items[34].Width:=50;
  dbgrid1.Columns.Items[35].Width:=50;
  dbgrid1.Columns.Items[36].Width:=50;
  dbgrid1.Columns[0].Title.caption:='Aula';
  DBGrid1.Columns[1].Title.caption:='Dia';
  dbgrid1.Columns[2].Title.caption:='Prof';
  dbgrid1.Columns[3].Title.Caption:='Hora I1';
  dbgrid1.Columns[4].Title.Caption:='Hora F1';
  dbgrid1.Columns[5].Title.Caption:='Hora I2';
  dbgrid1.Columns[6].Title.Caption:='Hora F2';
  dbgrid1.Columns[7].Title.Caption:='Hora I3';
  dbgrid1.Columns[8].Title.Caption:='Hora F3';
  dbgrid1.Columns[9].Title.Caption:='Hora I4';
  dbgrid1.Columns[10].Title.Caption:='Hora F4';
  dbgrid1.Columns[11].Title.Caption:='Hora I5';
  dbgrid1.Columns[12].Title.Caption:='Hora F5';
  dbgrid1.Columns[13].Title.Caption:='Hora I6';
  dbgrid1.Columns[14].Title.Caption:='Hora F6';
  dbgrid1.Columns[15].Title.Caption:='Hora I7';
  dbgrid1.Columns[16].Title.Caption:='Hora F7';
  dbgrid1.Columns[17].Title.Caption:='Hora I8';
  dbgrid1.Columns[18].Title.Caption:='Hora F8';
  dbgrid1.Columns[19].Title.Caption:='Hora I9';
  dbgrid1.Columns[20].Title.Caption:='Hora F9';
  dbgrid1.Columns[21].Title.Caption:='Hora I10';
  dbgrid1.Columns[22].Title.Caption:='Hora F10';
  dbgrid1.Columns[23].Title.Caption:='Hora I11';
  dbgrid1.Columns[24].Title.Caption:='Hora F11';
  dbgrid1.Columns[25].Title.Caption:='Hora I12';
  dbgrid1.Columns[26].Title.Caption:='Hora F12';
  dbgrid1.Columns[27].Title.Caption:='Hora I13';
  dbgrid1.Columns[28].Title.Caption:='Hora F13';
  dbgrid1.Columns[29].Title.Caption:='Hora I14';
  dbgrid1.Columns[30].Title.Caption:='Hora F14';
  dbgrid1.Columns[31].Title.Caption:='Hora I15';
  dbgrid1.Columns[32].Title.Caption:='Hora F15';
  dbgrid1.Columns[33].Title.Caption:='Hora I16';
  dbgrid1.Columns[34].Title.Caption:='Hora F16';
  dbgrid1.Columns[35].Title.Caption:='Hora I17';
  dbgrid1.Columns[36].Title.Caption:='Hora F17';

necesito realizar esa consulta SQL pero me da error al ejecutar, el error es el siguiente:

[Error]Unit5.pas(371):String literals may have at most 255 elements

no se mucho ingles pero creo que dice que me sobrepasé del limite de caracteres....


¿saben alguna solucion?

salu2 y gracias adelantdas
__________________
Las cosas o son, o no son...
Responder Con Cita
  #2  
Antiguo 22-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
la string dentro del Add mide mas de 255 caracteres, prueba de ir haciendo varios adds con la cadena partida en trozos.
Responder Con Cita
  #3  
Antiguo 22-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Añadiendo a las palabras de coso, sería bueno que simplicaras ese código.
Tranquilamente se puede reducir ese código. Por ejemplo:

Código Delphi [-]
for i := xxx to yyy do
  DBGrid1.Columns[i].Title.Caption := 'zzz ' + IntToStr(i);

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 22-10-2008 a las 21:35:55. Razón: cambiar xxx por i
Responder Con Cita
  #4  
Antiguo 22-10-2008
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 17
TOPX Va camino a la fama
Saludos,

... Uhm, no sé, pero tenía un poco de tiempo y, a mí me gusta así:

Código Delphi [-]
  Query1.Close;
  Query1.SQL.Text := 
    'Select Aula, Dia, Prof, ' +
    'Hora1, Hora11, Hora2, Hora22, Hora3, Hora33, ' +
    'Hora4, Hora44, Hora5, Hora55, Hora6, Hora66, ' +
    'Hora7, Hora77, Hora8, Hora88, Hora9, Hora99, ' +
    'Hora10, Hora101, Hora11a, Hora111, ' +
    'Hora12, Hora121, Hora13, Hora131, ' +
    'Hora14, Hora141, Hora15, Hora151, ' +
    'Hora16, Hora161, Hora17, Hora171 ' +
    'From horario.db ' +
    'Where Aula like "' +ComboBox1.Text+ '%"';
  Query1.Open;

  for i := 0 to (DBGrid1.Columns.Count - 1) do
  begin
    if i <= 2 then
    begin
      DBGrid1.Columns[i].Width := 128;
    end
    else
    begin
      DBGrid1.Columns[i].Width := 64;
    end;
  end;
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #5  
Antiguo 23-10-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
estemmm si lo resolvi a mi manera pero estoy claro que debo aprender a simplificar las cosas ya que se entenderia mejor y se ahorraria tiempo en programar tanto, ademas el software tarda algo de tiempo en realizar lo pedido creo que como (1seg) pero creo que simplificando el codigo sería mas rapido

de todas maneras gracias y trataré de aprender a simplificar mis códigos
__________________
Las cosas o son, o no son...
Responder Con Cita
  #6  
Antiguo 23-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por lKinGl Ver Mensaje
estemmm si lo resolvi a mi manera pero estoy claro que debo aprender a simplificar las cosas ya que se entenderia mejor y se ahorraria tiempo en programar tanto, ademas el software tarda algo de tiempo en realizar lo pedido creo que como (1seg) pero creo que simplificando el codigo sería mas rapido

de todas maneras gracias y trataré de aprender a simplificar mis códigos
Este... ¿Y podríamos saber cual es tu manera?
Este sitio está hecho para que nos ayudemos entre todos y quien sabe, alguien en un futuro tiene el mismo problema y lo de "a tu manera" le es útil para resolverlo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 23-10-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
Código Delphi [-]
  Query1.Close;
  Query1.SQL.Clear;
  cadena1:='Select Aula,Dia,Prof,Hora1,Hora11,Hora2,Hora22,Hora3,Hora33,Hora4,Hora44,Hora5,Hora55,Hora6,Hora66,Hora7,Ho  ra77,Hora8,Hora88,Hora9,Hora99';
 cadena2:='Hora10,Hora101,Hora11a,Hora111,Hora12,Hora121,Hora13,Hora131,Hora14,H  ora141,Hora15,Hora151,Hora16,Hora161,Hora17,Hora171 From horario.db Where Aula like "' + (ComboBox1.Text) + '%"');
  Query1.SQL.Add(cadena1+cadena2);
  Query1.Active:=True;
  Query1.Open;
  dbgrid1.Columns.Items[0].Width:=100;
  dbgrid1.Columns.Items[1].Width:=100;
  dbgrid1.Columns.Items[2].Width:=100;
  dbgrid1.Columns.Items[3].Width:=50;
  dbgrid1.Columns.Items[4].Width:=50;
  dbgrid1.Columns.Items[5].Width:=50;
  dbgrid1.Columns.Items[6].Width:=50;
  dbgrid1.Columns.Items[7].Width:=50;
  dbgrid1.Columns.Items[8].Width:=50;
  dbgrid1.Columns.Items[9].Width:=50;
  dbgrid1.Columns.Items[10].Width:=50;
  dbgrid1.Columns.Items[11].Width:=50;
  dbgrid1.Columns.Items[12].Width:=50;
  dbgrid1.Columns.Items[13].Width:=50;
  dbgrid1.Columns.Items[14].Width:=50;
  dbgrid1.Columns.Items[15].Width:=50;
  dbgrid1.Columns.Items[16].Width:=50;
  dbgrid1.Columns.Items[17].Width:=50;
  dbgrid1.Columns.Items[18].Width:=50;
  dbgrid1.Columns.Items[19].Width:=50;
  dbgrid1.Columns.Items[20].Width:=50;
  dbgrid1.Columns.Items[21].Width:=50;
  dbgrid1.Columns.Items[22].Width:=50;
  dbgrid1.Columns.Items[23].Width:=50;
  dbgrid1.Columns.Items[24].Width:=50;
  dbgrid1.Columns.Items[25].Width:=50;
  dbgrid1.Columns.Items[26].Width:=50;
  dbgrid1.Columns.Items[27].Width:=50;
  dbgrid1.Columns.Items[28].Width:=50;
  dbgrid1.Columns.Items[29].Width:=50;
  dbgrid1.Columns.Items[30].Width:=50;
  dbgrid1.Columns.Items[31].Width:=50;
  dbgrid1.Columns.Items[32].Width:=50;
  dbgrid1.Columns.Items[33].Width:=50;
  dbgrid1.Columns.Items[34].Width:=50;
  dbgrid1.Columns.Items[35].Width:=50;
  dbgrid1.Columns.Items[36].Width:=50;
  dbgrid1.Columns[0].Title.caption:='Aula';
  DBGrid1.Columns[1].Title.caption:='Dia';
  dbgrid1.Columns[2].Title.caption:='Prof';
  dbgrid1.Columns[3].Title.Caption:='Hora I1';
  dbgrid1.Columns[4].Title.Caption:='Hora F1';
  dbgrid1.Columns[5].Title.Caption:='Hora I2';
  dbgrid1.Columns[6].Title.Caption:='Hora F2';
  dbgrid1.Columns[7].Title.Caption:='Hora I3';
  dbgrid1.Columns[8].Title.Caption:='Hora F3';
  dbgrid1.Columns[9].Title.Caption:='Hora I4';
  dbgrid1.Columns[10].Title.Caption:='Hora F4';
  dbgrid1.Columns[11].Title.Caption:='Hora I5';
  dbgrid1.Columns[12].Title.Caption:='Hora F5';
  dbgrid1.Columns[13].Title.Caption:='Hora I6';
  dbgrid1.Columns[14].Title.Caption:='Hora F6';
  dbgrid1.Columns[15].Title.Caption:='Hora I7';
  dbgrid1.Columns[16].Title.Caption:='Hora F7';
  dbgrid1.Columns[17].Title.Caption:='Hora I8';
  dbgrid1.Columns[18].Title.Caption:='Hora F8';
  dbgrid1.Columns[19].Title.Caption:='Hora I9';
  dbgrid1.Columns[20].Title.Caption:='Hora F9';
  dbgrid1.Columns[21].Title.Caption:='Hora I10';
  dbgrid1.Columns[22].Title.Caption:='Hora F10';
  dbgrid1.Columns[23].Title.Caption:='Hora I11';
  dbgrid1.Columns[24].Title.Caption:='Hora F11';
  dbgrid1.Columns[25].Title.Caption:='Hora I12';
  dbgrid1.Columns[26].Title.Caption:='Hora F12';
  dbgrid1.Columns[27].Title.Caption:='Hora I13';
  dbgrid1.Columns[28].Title.Caption:='Hora F13';
  dbgrid1.Columns[29].Title.Caption:='Hora I14';
  dbgrid1.Columns[30].Title.Caption:='Hora F14';
  dbgrid1.Columns[31].Title.Caption:='Hora I15';
  dbgrid1.Columns[32].Title.Caption:='Hora F15';
  dbgrid1.Columns[33].Title.Caption:='Hora I16';
  dbgrid1.Columns[34].Title.Caption:='Hora F16';
  dbgrid1.Columns[35].Title.Caption:='Hora I17';
  dbgrid1.Columns[36].Title.Caption:='Hora F17';

me las tuve que ingeniar de una u otra forma ya que la conexion de internet donde estaba era muy pésima y me costo mucho entrar a la web del club
__________________
Las cosas o son, o no son...
Responder Con Cita
  #8  
Antiguo 23-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Ya veo

No es por ser un tanto pesadito (bueno, si, algunos kilos de más tengo) pero lo mejor sería emplear varias veces Add().

query1.SQL.Add('select ...');
query1.SQL.Add('....');

Ahora una preguntita, de curioso nomás, ¿Porqué tantos campos? ¿No es posible estructurar de otro modo tu/s tabla/s?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #9  
Antiguo 23-10-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
ahhh ok, estemmm no se si sea posible estructurar mejor los campos de la tabla pero esta es la problematica:

en mi universidad necesitan un sistema pequeño que permita la distribucion de las cargas academicas y aulas de modo que no exista ninguna colisión y lo que llevo es en la tabla, las aulas máximo por dia se usan 17 horas, para evitar las colisiones con las horas de las aulas, necesito saber a quehora entra 1profesor y a que hora sale, y aque hora entra el otro y a que hora sale para evitar lo choques de horarios

Horas I.1 = Hora de Ingreso1
Horas F.1= Hora de Final 1
asi hasta 17 (Nº de horas maximo de uso por aula).

nada mas hay son 34 campos y son 37, no se que otra forma se te ocurre

estoy manejando horas militares enteras(01,02...22,23,24), para facilitar el sistema

abierto a sugerencias
__________________
Las cosas o son, o no son...
Responder Con Cita
  #10  
Antiguo 23-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por lKinGl Ver Mensaje
ahhh ok, estemmm no se si sea posible estructurar mejor los campos de la tabla pero esta es la problematica:

en mi universidad necesitan un sistema pequeño que permita la distribucion de las cargas academicas y aulas de modo que no exista ninguna colisión y lo que llevo es en la tabla, las aulas máximo por dia se usan 17 horas, para evitar las colisiones con las horas de las aulas, necesito saber a quehora entra 1profesor y a que hora sale, y aque hora entra el otro y a que hora sale para evitar lo choques de horarios

Horas I.1 = Hora de Ingreso1
Horas F.1= Hora de Final 1
asi hasta 17 (Nº de horas maximo de uso por aula).

nada mas hay son 34 campos y son 37, no se que otra forma se te ocurre

estoy manejando horas militares enteras(01,02...22,23,24), para facilitar el sistema

abierto a sugerencias
Pues yo lo veo un tanto rebuscado y liado.

Yo más bien veo tres tablas:
Profesores - 1 --- * - Horarios - * --- Aulas -
Es decir, que entre las tabla Profesores y Aulas existe una relación M-M, por tanto se añade la tabla intermedia y se consigue una relación 1-M entre Profesores y Horarios y de igual modo entre Aulas y Horarios.

Los campos, me parecen que son bastantes sencillos de entender.
El tema de la "colisión" es ya un aspecto de programación.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #11  
Antiguo 23-10-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
esas exactamente son las tablas que tengo hechas, existen el campo que las relaciona como tu dices, pero lo que tu ves largo son el trato con las horas, que por cierto no creo que me este quedando bien del todo, ya que de la forma como lo llevo hay que alimentar de horas las aulas 1 por 1 pero se da el caso de que hay materias que no tienen 1 hora sino 2 o 3 y hay sino se como hacer.....
__________________
Las cosas o son, o no son...
Responder Con Cita
  #12  
Antiguo 23-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por lKinGl Ver Mensaje
esas exactamente son las tablas que tengo hechas, existen el campo que las relaciona como tu dices, pero lo que tu ves largo son el trato con las horas, que por cierto no creo que me este quedando bien del todo, ya que de la forma como lo llevo hay que alimentar de horas las aulas 1 por 1 pero se da el caso de que hay materias que no tienen 1 hora sino 2 o 3 y hay sino se como hacer.....
A ver....
¿Quieres decirme que esos son los campos de la tabla horarios? Pues, yo no lo veo conveniente.

Yo lo veo así:

AULAS
------
IDAula
Nombre
....

PROFESORES
------------
IDProfesor
Nombre
...

HORARIOS
----------
IDHorario
AulaID -> FK
ProfesorID -> FK
Fecha (*)
Duracion ---> representa la duración del cursado
....

(*) Este campo Fecha llevará el día (dd/mm/aaaa). Tal vez, si el diseño lo amerita, el campo no deba ser de esta forma. Supuestamente los horarios se establecen para la semana y queda fijo por lo que es posible tener esto:
Código:
DiaSemana - 1 --- * - Horarios - * ---- 1 - Aulas
                          |
                          *
                          |
                          1
                          |
                     Profesores
Entonces el campo Fecha debería ser DiaSemID, y por tanto ser FK a una PK de la tabla DiaSem. Y en este caso:

DiaSemana
----------
IDDiaSemana
Nombre

De este modo se puede tener algo como:
1 - Lunes
2 - Martes
...

¿Se entiende la idea?
Para tener referencia a esas 17 horas, lo que se puede hacer es tener un campo en la tabla Aulas que lleve la cantidad de horas permitidas.

El asunto, como dije antes es una cuestión de programación, armar las SQLs de forma apropiada, y ofrecer los medios necesario de control.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #13  
Antiguo 24-10-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
ufff men no entiendo nada :S

no se, pienso que seria bueno así, horainicio del dia y horafinal pero como hago si el aula se utiliza de 7:00 a 8:00 y de 8:00 a 9:00 esta desocupada :S

gracias adelantadas
__________________
Las cosas o son, o no son...
Responder Con Cita
  #14  
Antiguo 24-10-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Cita:
Empezado por lKinGl Ver Mensaje
ufff men no entiendo nada :S

no se, pienso que seria bueno así, horainicio del dia y horafinal pero como hago si el aula se utiliza de 7:00 a 8:00 y de 8:00 a 9:00 esta desocupada :S

gracias adelantadas
pues mejor que te lo explico delphius no creo que nadie lo haga, leelo de nuevo y fijate en lo que te dice alli esta la solucion
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #15  
Antiguo 24-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola de nuevo, coincidiendo con delphius, es una manera poco elegante y bastante 'trabajosa' de trabajar. Personalmente haria

tabla 'horas':

- id horas (de primary key)
- dia de la semana : string
- materia : string
- aula : string o integer
- inicio : TTime
- profesor : string

de esta tabla, hacer tantos registros por dias de la semana, aulas y horas en activo necesites. Una vez tuvieses esos registros, haciendo una consulta sencilla podrias encontrar las necesarias. Ej, aula 3, miercoles : select * from horas where aula = 3 and dia_semana = 'miercoles' order by inicio, o bien los dias de algebra: select * from horas where materia = 'algebra'. Tu consulta inicial se reduciria a 'select * from horas.db where aula like ' + QuotedStr(ComboBox1.text)+'%' + '''. Que luego necesites ligar aula a una tabla de aulas o bien profesor a una tabla de profesores, ya seria otra historia. Mas o menos es lo mismo que te conto delphius, solo que explicado de manera diferente. saludos y a ver si te sirve.

PD: se suelen llamar a las horas por primera hora, segunda, tercera etc... asi, inicio siendo un entero tambien te serviria y simplificaria. saludos de nuevo.
Responder Con Cita
  #16  
Antiguo 24-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por lKinGl Ver Mensaje
ufff men no entiendo nada :S

no se, pienso que seria bueno así, horainicio del dia y horafinal pero como hago si el aula se utiliza de 7:00 a 8:00 y de 8:00 a 9:00 esta desocupada :S

gracias adelantadas
¿Que es lo que no se me entiende?
Pensé que se entendería bien. De hecho, lo hice lo más breve y simple posible.

¿O será que por ser demasiado breve omití algunas explicaciones escenciales?

lKinGl, ¿Qué es lo que no entiendes de mi diseño? Te lo puedo volver a explicar si es necesario.
Esa duda de las horas de cuando está desocupada u ocupada lo trato con el diseño que he planteado.

Digo, se basa en un principio elemental y básico: Si existen registros asociados a x horas, entonces para todas las 17-x horas restantes significa que el aula está desocupada.

¿Para que guardar información de que está desocupada si puede enterderse y desprenderse de otra información ya almacenada? ¡Estarías duplicando información!

¿Sabes cual es el problema lKinGl?, Encontrar las instrucciones SQL que te permiten desarrollar la programación del sistema.

El diseño que yo elaboré responde a tus requisitos. Como he dicho antes, ahora lo que resta es programación, pensar un poquito. Nada más.

¿Necesitas saber cuántas horas tiene libre un aula x para un dia y? Fácil:
Código SQL [-]
SELECT sum(Duracion) AS SumaHora
FROM Horarios
WHERE (Horarios.AulaID = :pAulaID) AND (Horarios.DiaSemID = :pDiaSemID)

Esa Query la ejecuto en un TQuery, pasandole los parámetros pAulaID y pDiaSemID y después puedo hacer algo como esto:

Código Delphi [-]
horas_ocupadas := MiQuery.FieldByName('SumaHora').AsInteger;
horas_libres := 17 - horas_ocupadas;
ShowMessage('El aula tiene : ' + IntToStr(horas_libres) + ' horas libres');

¿Se entiende la idea?
Si no entiendes te pediría entonces que me indicaras que no entiendes en vez de estar diciendo simplemente que no entiendes.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 24-10-2008 a las 19:28:01. Razón: corrección en la consulta SQL
Responder Con Cita
  #17  
Antiguo 24-10-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
aja delphius pero tu dices:
xaula tiene xhoras desocupadas verdad?

pero que horas?,por que puede ser q en el aula2 haya, clase el lunes de 7-9 y de 10-12 pero como detectar que el aula esta disponible de 9-10

esa es mi inquietud....

salu2
__________________
Las cosas o son, o no son...
Responder Con Cita
  #18  
Antiguo 25-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por lKinGl Ver Mensaje
aja delphius pero tu dices:
xaula tiene xhoras desocupadas verdad?

pero que horas?,por que puede ser q en el aula2 haya, clase el lunes de 7-9 y de 10-12 pero como detectar que el aula esta disponible de 9-10

esa es mi inquietud....

salu2
Bueno, lKinGl ¿Y acaso no puedes hacer una consulta que extraiga las clases que si están?

A lo que voy lKinGl es que la información está; Y en ciertos casos, la ausencia de información es una información muy valiosa. ¿Me explico?

Hay una frase que dice: "la falta de evidencias es una evidencia" En cuanto a este caso, la falta de ese dato de las horas libres es un dato... y como tal puede obtenerse.

Lo que deberías preguntarte es ¿que es detectar para ti? ¿Bajo que contexto deberíamos interpretarlo?

El diseño que yo te ofrecí es simple, pero como todas las cosas algo en contra tiene. Y como he dicho, guardar X y guardar Y-X es redundante. O lo uno u lo otro, ambos terminarían siendo lo mismo puesto que ofrecen la misma respuesta pero desde puntos de vista opuestos.

¿No se puede dejar a interpretación del usuario? Puesto que si se puede obtener datos sobre las horas ocupadas, es posible armar un diseño visual (por ejemplo) en donde se muestre el horario.

Y de hecho, lKinGl, se puede calcular. Como he dicho, cuestión de programación. Tal vez con un SQL resulte rebuscado, pero he aqui que con Delphi puede conseguirse. ¿Cómo?

Una opción: implementar un algoritmo que recorra el conjunto de datos (ordenado) devuelto por una Query e ir calculando los horarios en blanco. ¿Se puede? ¡Claro! ¡Si los datos están!

lKinGl, piensa... piensa. No es por malo, pero el dato está; de una u otra "forma" pero está.

Veamos como te lo puedo "graficar":

Supongamos que la tabla Aulas además de dichos campos mencionados anteriormente tiene dos campos más (necesarios):
HoraInicio
HoraFin

Teniendo estos dos campos se puede establecer un marco temporal.

Además la tabla Horarios tiene un campo HoraInicio, cuyo propósito es registrar la hora en que se da comienzo la actividad.

Con estos campos es posible ya, implementar un algoritmo que vaya examinando registro a registro y calculando la diferencias de horas, estas diferencias de horas puede proporcionar un conjunto con las horas libres.

Por ejemplo, supongamos que HoraIncio y HoraFin de un aula es 08:00 y 18:00 respectivamente.

Mantengo en una variable InicioClase el valor inicial:
InicioClase = Aula.HoraInicio
InicioClase = 08:00

El primer registro de los horarios nos dá estos datos:
Horarios.HoraInicio = 09:00
Horarios.Duracion = 1

Entonces, evaluamos:
Horario.HoraInicio > InicioClase
09:00 > 08:00

Como es verdadero, estamos en presencia de una hora libre:
HoraLibre = HoraLibre + 1

Creamos un "registro" y calculamos la duracion:
HoraLibres[HoraLibre].Duracion = Horario.HoraInicio - Aula.HoraInicio
HoraLibres[1].Duracion = 09:00 - 08:00 = 1

//Comentario: Yo hice, de manera simple que se trata de un array....

Calcula la nueva hora de inicio a clase
InicioClase = Horario.HoraInicio + Horario.Duracion
InicioClase = 09:00 + 1 = 10:00

Ahora me muevo al siguiente registro, y leo:
Horario.HoraInicio = 10:00
Horario.Duracion = 2

Al evaular tenemos:
Horario.HoraInicio > InicioClase
10:00 > 10:00

Al ser falso, es evidente que no estamos en una hora libre. Directamente calculo la siguiente hora de incio a clase:
InicioClase = Horario.HoraInicio + Horario.Duracion
InicioClase = 10:00 + 2 = 12:00

Me muevo al siguiente registro y vuelvo a evaluar...

Y asi se continua mientras haya registros, o en otro caso, se supere la hora de fin destinadas al aula.

¿Se entiende el algoritmo? ¿Está la información lKinGl?
Como vez, no todo es SQL, en ocasiones Delphi tiene que trabajar un poquito más

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #19  
Antiguo 25-10-2008
lKinGl lKinGl is offline
Miembro
 
Registrado: ago 2007
Posts: 333
Poder: 17
lKinGl Va por buen camino
Ya entiendo hahaha lo que pasa es que tu dices

horainicio horafin
Dia: Horainicio - Horafin
ejemplo:

Lunes:8-9
Lunes:9-10
Lunes:10-11


yo lo estaba pensando de esta forma en 1 linea de registro de la bd tendria:

Lunes: Hora1: Hora2: Hora3....Hora17:
Martes: Hora1: Hora2: Hora3....Hora17:
Miercoles: Hora1: Hora2: Hora3....Hora17:
Jueves: Hora1: Hora2: Hora3....Hora17:
Viernes: Hora1: Hora2: Hora3....Hora17:

porsupuesto que de la forma que yo digo se lleva muchisimo mas trabajo.

Gracias delphius ya entendi tu modelo y es mucho mas fácil que la forma como yo lo habia pensado
__________________
Las cosas o son, o no son...
Responder Con Cita
  #20  
Antiguo 25-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
lKinGl,
Me alegro que entiendas, me evito una dosis de locura por buscar otro modo de explicarte.

Hay una tabla que no ha sido nombrada (no explícitamente), de igual modo también hay un campo en la tabla Horarios (también no nombrado) que lo relaciona a esta tabla "desconocida". A modo de exámen: ¿Cuál es dicha tabla?

Recuerda que yo prefiero hacerte pensar un poquito que estar dandote la solución.
Yo elaboré un esbozo, un tanto sencillo para que comprendas y tengas una alternativa. Yo espero que luego tu añadas lo que hace falta para conseguir tus objetivos.

Por cierto, ¿en que quedó lo de choferes y sitios?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
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
dbexpress Error: unknown error Code '101' raorre Conexión con bases de datos 3 13-10-2008 07:53:49
Error General Sql Error lock conflict ...deadlock Patricio Varios 1 19-03-2008 14:52:14
error:[Fatal Error] Unit1.pas(7): Unit ZDbcConnection was compiled with a different.. karaoke Conexión con bases de datos 2 19-12-2007 10:22:36
¿Por qué me da este error?Error creating cursor manejador nuri SQL 2 01-08-2005 17:30:28
consuta dinamicas en report builder lledesma Impresión 5 26-04-2005 11:47:12


La franja horaria es GMT +2. Ahora son las 20:15:34.


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