Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-05-2007
Narvaez Narvaez is offline
Registrado
 
Registrado: mar 2007
Posts: 3
Poder: 0
Narvaez Va por buen camino
ciclos en tablas

Hola, ates que nada, como es mi primer consulta; felicito a todos los miembros que integran la pagina.

mi problema es el siguiente:
estoy trabajando con unas tablas(paradox) a las cuales en mi programa les he cargado exitosamente unos datos provenientes de un libro de excel; para ser mas especificos son datos de precipitacion diaria de cada año. Lo que quiero hacer un recorrido de los valores de precipitacion empezando desde enero hasta diciembre; claro esto para cada año de datos que yo tenga.
es decir:
para el dato año = 1 hasta Naños hacer
obtener uno por uno los valores de ENERO
luego los de FEBRERO y asi sucesivamente hasta DICIEMBRE.

Espero me ayuden.
Responder Con Cita
  #2  
Antiguo 01-05-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola Narvaez
No veo el problema, con una sentencia sql y un par de datetimepickers se puede hacer, creo sin mayor problema.
Que es lo que tienes hasta ahora?, (codigo) aparte de lo mencionado antes.
Saludos
Responder Con Cita
  #3  
Antiguo 01-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Sería muy conveniente que indiques las tablas que tienes y qué datos almacenas en ella, porque, dependiendo de como esté almacenada, hay que hacer unas u otras virguerías.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 01-05-2007
Narvaez Narvaez is offline
Registrado
 
Registrado: mar 2007
Posts: 3
Poder: 0
Narvaez Va por buen camino
Post ciclos en tablas

Hola aqui esta lo que tengo hasta ahora.
veran en el proprecedimiento 2 el tipo de datos que manejo; y lo que quiero hacer especificamente es:
por ejemplo para El mes de ENERO es sumar los primeros 3 valores(1,2 y 3 de enero), conocer el valor de esa suma y si no se cumple cierta sentencia entones sumar los valores(2,3 y 4), luego los valores(3,4 y 5) hasta que la suma de esos tres valores sea igual a X cantidad y conocer en que mes y dia se cumple la sentencia.

Saludos

{ PROCEDIMIENTO 1
_________________________________________________________
CREA UN NUEVO ALIAS SOLO SI AÚN NO EXISTE
********************************************************* }
{ Requiere el AliasNombre y AliasDir }
procedure CreacionDeAliasNuevo;
Begin
{ *** Crea un ALIAS, pero solo si aún no existe *** }
If not Session.IsAlias(AliasNombre) then {Si no existe el }
Begin { ALIAS con Var AliasNombre entonces }
CreateDirectory(AliasDir,nil); { Crea el directorio }
try { Agrega un Alias emplenado Driver PARADOX }
Session.AddStandardAlias(AliasNombre,AliasDir,'PARADOX');
Session.SaveConfigFile;
except { Por si existe alguna excepción }
MessageDlg('Error de Creación de Alias',mtError,[mbOk],0);
Exit;
end;
End; {Termina la Creación del Alias }
End;


{ PROCEDIMIENTO 2
_________________________________________________________
CREA UNA TABLA
********************************************************* }
{ Requiere el
NombreTabla,
AliasNombre }
procedure TVentanaPrincipal.CrearTabla(Sender: TObject; TablaX: TTable);
begin
{ *** Inicia Código para la creación de la Tabla *** }
{Screen.Cursor:=crHourGlass; {Instrucción que asigna el tipo
de cursor mientras crea la Tabla}
TablaX:=TTable.Create(Self); {Para inicializar la Tabla por no
haber sido creada en Tiempo de diseño}
try
TablaX.DatabaseName:=AliasNombre;{ Nombre de la base de
datos que actualmente se está utilizando}
TablaX.TableName:=TablaNombre;{ Nombre de la Tabla de base
de datos }
{ Agrega las definiciones para cada campo }
TablaX.FieldDefs.Add('DIA',ftSmallInt,0,True);
TablaX.FieldDefs.Add('ENE',ftFloat,0,False);
TablaX.FieldDefs.Add('FEB',ftFloat,0,False);
TablaX.FieldDefs.Add('MAR',ftFloat,0,False);
TablaX.FieldDefs.Add('ABR',ftFloat,0,False);
TablaX.FieldDefs.Add('MAY',ftFloat,0,False);
TablaX.FieldDefs.Add('JUN',ftFloat,0,False);
TablaX.FieldDefs.Add('JUL',ftFloat,0,False);
TablaX.FieldDefs.Add('AGO',ftFloat,0,False);
TablaX.FieldDefs.Add('SEP',ftFloat,0,False);
TablaX.FieldDefs.Add('OCT',ftFloat,0,False);
TablaX.FieldDefs.Add('NOV',ftFloat,0,False);
TablaX.FieldDefs.Add('DIC',ftFloat,0,False);
{ Agrega una definición de índice para la clave primaria }
TablaX.IndexDefs.Add('','DIA',[ixPrimary]);

{ Todo está configurado, por lo tanto, crea la Tabla }
TablaX.CreateTable;
except { Para alguna excepción }
MessageDlg('Error al crear la Tabla',mtError,[mbOk],0);
Screen.Cursor:=crDefault; { Regresa el tipo de cursor }
TablaX.Free; { Se libera el Objeto TTable }
exit;
end;
{ Todo terminado, esto hace que el usuario lo sepa }
TablaX.Free;
{Screen.Cursor:=crDefault;{Regresa el tipo de Cursor por DEFAULT}
{ MessageDlg('La Tabla se Creó Exitosamente',mtInformation,[mbOk],0);
{ * Finaliza la Creación de la Tabla *
______________________________________________________}
end;




{ PROCEDIMIENTO 3
___________________________________________________________________
RELLENA DATOS A LA TABLA EN FUNCIÓN DE LOS DATOS DE UN ARCHIVO EXCEL
Requiere de 4 parámetros:
1. Sender
2. Fila. Fila desde la cual va iniciar a copiar los datos de Excel
3. Columna. Columna desde la cual empieza
4. HojaNo. El número de Hoja desde la cuál copiará los datos
5. TablaX. Componente fuente de datos que representa toda una tabla de datos.
Proporciona la manera más fácil y rápida de acceder a una tabla }
procedure TVentanaPrincipal.RellenarTabla(Sender: TObject; Fila, Columna:Integer;
HojaNo:Variant; TablaX: TTable);
var
Contador,
AnioBarra : Integer;
ValCelda,
Mensaje,
Titulo,
Otro : String;
begin
TablaX:= TTable.Create(Self); { Cre el componente TablaX de tipo TTable }
TablaX.DatabaseName:=AliasNombre; { Nombre de la base de datos que se está
utilizando actualmente }
TablaX.TableName:=TablaNombre; { Nombre de la Tabla de la base de datos,
en este caso con extensión *.db }
TablaX.Active:=True; { Abrir el conjunto de datos *.db }
TablaX.Edit; { Habilita la edición en el registro actual }
Titulo:=TablaNombre;
Titulo:=StringReplace(Titulo, TipoDat, 'Año',[rfReplaceAll]);
Titulo:= 'Del ' + StringReplace(Titulo, '.db', ' ',[rfReplaceAll]);
Otro := TablaNombre;
Otro := StringReplace(Otro, TipoDat, '',[rfReplaceAll]);
AnioBarra := StrToInt (StringReplace(Otro, '.db', '',[rfReplaceAll])) - AnioInicial;
{*** A continuación empieza el copiado de los datos desde Excel ***}
for Contador:=1 to 31 Do { CicLo para copiar los datos de todos los días del mes }
Begin
try
BarraAvans := Round( ( (Contador + (31 * AnioBarra))/( NoAnios * 31) ) * 100 );
MostrarProgreso.ProgressBar1.Position := BarraAvans;
TablaX.Append; { Crea un registro vacío y lo agrega al final del conjunto de datos }
{ Todos los campos de un registro de la Tabla son rellenados con un ciclo }
TablaX.FieldValues['DIA']:=Contador;

{** ENERO **}
ValCelda := HojaNo.Cells[Fila,Columna];
If ValCelda = '' then
Begin
Mensaje:='No tiene datos de1 ' + IntToStr(Contador) + ' de Enero. Se tomará como CERO';
Mensajes.Memo1.Lines.Add(' '+Titulo+' '+Mensaje);
{ MessageBox(Handle,PChar(Mensaje),PChar(Titulo),MB_ICONEXCLAMATION); }
End;
TablaX.FieldValues['ENE']:=HojaNo.Cells[Fila,Columna];

{** MARZO **}
ValCelda := HojaNo.Cells[Fila,Columna+2];
If ValCelda = '' then
Begin
Mensaje:='No tiene datos de1 ' + IntToStr(Contador) + ' de Marzo. Se tomará como CERO';
Mensajes.Memo1.Lines.Add(' '+Titulo+' '+Mensaje);
End;
TablaX.FieldValues['MAR']:=HojaNo.Cells[Fila,Columna+2];

{** MAYO **}
ValCelda := HojaNo.Cells[Fila,Columna+4];
If ValCelda = '' then
Begin
Mensaje:='No tiene datos de1 ' + IntToStr(Contador) + ' de Mayo. Se tomará como CERO';
Mensajes.Memo1.Lines.Add(' '+Titulo+' '+Mensaje);
End;
TablaX.FieldValues['MAY']:=HojaNo.Cells[Fila,Columna+4];

{** JULIO **}
ValCelda := HojaNo.Cells[Fila,Columna+6];
If ValCelda = '' then
Begin
Mensaje:='No tiene datos de1 ' + IntToStr(Contador) + ' de Julio. Se tomará como CERO';
Mensajes.Memo1.Lines.Add(' '+Titulo+' '+Mensaje);
End;
TablaX.FieldValues['JUL']:=HojaNo.Cells[Fila,Columna+6];

{** AGOSTO **}
ValCelda := HojaNo.Cells[Fila,Columna+7];
If ValCelda = '' then
Begin
Mensaje:='No tiene datos de1 ' + IntToStr(Contador) + ' de Agosto. Se tomará como CERO';
Mensajes.Memo1.Lines.Add(' '+Titulo+' '+Mensaje);
End;
TablaX.FieldValues['AGO']:=HojaNo.Cells[Fila,Columna+7];

{** OCTUBRE **}
ValCelda := HojaNo.Cells[Fila,Columna+9];
If ValCelda = '' then
Begin
Mensaje:='No tiene datos de1 ' + IntToStr(Contador) + ' de Octubre. Se tomará como CERO';
Mensajes.Memo1.Lines.Add(' '+Titulo+' '+Mensaje);
End;
TablaX.FieldValues['OCT']:=HojaNo.Cells[Fila,Columna+9];

{** DICIEMBRE **}
ValCelda := HojaNo.Cells[Fila,Columna+11];
If ValCelda = '' then
Begin
Mensaje:='No tiene datos de1 ' + IntToStr(Contador) + ' de Diciembre. Se tomará como CERO';
Mensajes.Memo1.Lines.Add(' '+Titulo+' '+Mensaje);
End;
TablaX.FieldValues['DIC']:=HojaNo.Cells[Fila,Columna+11];

If Contador < 31 then
Begin
{** ABRIL **}
ValCelda := HojaNo.Cells[Fila,Columna+3];
If ValCelda = '' then
Begin
Mensaje:='No tiene datos de1 ' + IntToStr(Contador) + ' de Abril. Se tomará como CERO';
Mensajes.Memo1.Lines.Add(' '+Titulo+' '+Mensaje);
End;
TablaX.FieldValues['ABR']:=HojaNo.Cells[Fila,Columna+3];

{** JUNIO **}
ValCelda := HojaNo.Cells[Fila,Columna+5];
If ValCelda = '' then
Begin
Mensaje:='No tiene datos de1 ' + IntToStr(Contador) + ' de Junio. Se tomará como CERO';
Mensajes.Memo1.Lines.Add(' '+Titulo+' '+Mensaje);
End;
TablaX.FieldValues['JUN']:=HojaNo.Cells[Fila,Columna+5];

{** SEPTIEMBRE **}
ValCelda := HojaNo.Cells[Fila,Columna+8];
If ValCelda = '' then
Begin
Mensaje:='No tiene datos de1 ' + IntToStr(Contador) + ' de Septiembre. Se tomará como CERO';
Mensajes.Memo1.Lines.Add(' '+Titulo+' '+Mensaje);
End;
TablaX.FieldValues['SEP']:=HojaNo.Cells[Fila,Columna+8];

{** NOVIEMBRE **}
ValCelda := HojaNo.Cells[Fila,Columna+10];
If ValCelda = '' then
Begin
Mensaje:='No tiene datos de1 ' + IntToStr(Contador) + ' de Noviembre. Se tomará como CERO';
Mensajes.Memo1.Lines.Add(' '+Titulo+' '+Mensaje);
End;
TablaX.FieldValues['NOV']:=HojaNo.Cells[Fila,Columna+10];
End;

If Contador > 30 then
Begin
ValCelda := HojaNo.Cells[Fila + 1 , Columna];
If ValCelda <> '' then
If ValCelda <> 'NO_D' then
Mensajes.Memo1.Lines.Add(' '+Titulo+' '
+'Tiene más de 31 datos del mes de Enero, solo se importarán los primeros 31');
ValCelda := HojaNo.Cells[Fila + 1 ,Columna+2];
If ValCelda <> '' then
If ValCelda <> 'NO_D' then
Mensajes.Memo1.Lines.Add(Titulo+' '
+'Tiene más de 31 datos del mes de Marzo, solo se importarán los primeros 31');
ValCelda := HojaNo.Cells[Fila + 1 ,Columna+4];
If ValCelda <> '' then
If ValCelda <> 'NO_D' then
Mensajes.Memo1.Lines.Add(' '+Titulo+' '
+'Tiene más de 31 datos del mes de Mayo, solo se importarán los primeros 31');
ValCelda := HojaNo.Cells[Fila + 1 ,Columna+6];
If ValCelda <> '' then
If ValCelda <> 'NO_D' then
Mensajes.Memo1.Lines.Add(' '+Titulo+' '
+'Tiene más de 31 datos del mes de Julio, solo se importarán los primeros 31');
ValCelda := HojaNo.Cells[Fila + 1 ,Columna+7];
If ValCelda <> '' then
If ValCelda <> 'NO_D' then
Mensajes.Memo1.Lines.Add(' '+Titulo+' '
+'Tiene más de 31 datos del mes de Agosto, solo se importarán los primeros 31');
ValCelda := HojaNo.Cells[Fila + 1 ,Columna+9];
If ValCelda <> '' then
If ValCelda <> 'NO_D' then
Mensajes.Memo1.Lines.Add(' '+Titulo+' '
+'Tiene más de 31 datos del mes de Octubre, solo se importarán los primeros 31');
ValCelda := HojaNo.Cells[Fila + 1 ,Columna+11];
If ValCelda <> '' then
If ValCelda <> 'NO_D' then
Mensajes.Memo1.Lines.Add(' '+Titulo+' '
+'Tiene más de 31 datos del mes de Diciembre, solo se importarán los primeros 31');
ValCelda:=HojaNo.Cells[Fila,Columna+3];
If ValCelda<>'' then
If ValCelda <> 'NO_D' then
Mensajes.Memo1.Lines.Add(' '+Titulo+' '
+'Tiene más de 30 datos del mes de Abril, solo se importarán los primeros 30');
ValCelda:=HojaNo.Cells[Fila,Columna+5];
If ValCelda<>'' then
If ValCelda <> 'NO_D' then
Mensajes.Memo1.Lines.Add(' '+Titulo+' '
+'Tiene más de 30 datos del mes de Junio, solo se importarán los primeros 30');
ValCelda:=HojaNo.Cells[Fila,Columna+8];
If ValCelda<>'' then
If ValCelda <> 'NO_D' then
Mensajes.Memo1.Lines.Add(' '+Titulo+' '
+'Tiene más de 30 datos del mes de Septiembre, solo se importarán los primeros 30');
ValCelda:=HojaNo.Cells[Fila,Columna+10];
If ValCelda<>'' then
If ValCelda <> 'NO_D' then
Mensajes.Memo1.Lines.Add(' '+Titulo+' '
+'Tiene más de 30 datos del mes de Noviembre, solo se importarán los primeros 30');
End;

{** FEBRERO **}
If Contador <= NDatFeb then
Begin
ValCelda := HojaNo.Cells[Fila,Columna+1];
If ValCelda = '' then
Begin
Mensaje:='No tiene datos de1 ' + IntToStr(Contador) + ' de Febrero. Se tomará como CERO';
Mensajes.Memo1.Lines.Add(' '+Titulo+' '+Mensaje);
End;
TablaX.FieldValues['FEB']:=HojaNo.Cells[Fila,Columna+1];
End;

If Contador > NDatFeb then
Begin
ValCelda := HojaNo.Cells[Fila,Columna+1];
If ValCelda<>'' then
If ValCelda <> 'NO_D' then
Begin
Mensaje:='Tiene más de ' + IntToStr(NDatFeb) + ' datos del mes de Febrero';
Mensajes.Memo1.Lines.Add(' '+Titulo+' '+Mensaje);
End;
ENd;
except
on EvariantTypeCastError Do
Begin
End;
on EDatabaseError do { En caso de algún error }
Begin
Mensajes.Memo1.Lines.Add(' '+Titulo+' '
+' Tipo de Dato no válido del día '+ IntToStr(Contador));
{ MessageBox(Handle,'Tipo de Dato no válido', PChar(Titulo),0); }
TablaX.Cancel; { Cancela cualquier edición hecha en el registro
actual si las ediciones aún no han sido envidas }
TablaX.Edit; { Habilita la edición del registro actual }
exit;
Continue; { Continúe con el ciclo }
End;
on EDBEngineError do { En caso de algún error }
Begin
Mensajes.Memo1.Lines.Add(' '+Titulo+' '
+' Error de importación del día '+ IntToStr(Contador));
{ MessageBox(Handle,'Tipo de Dato no válida', PChar(Titulo),0); }
TablaX.Cancel; { Cancela cualquier edición hecha en el registro
actual si las ediciones aún no han sido envidas }
TablaX.Edit; { Habilita la edición del registro actual }
exit;
Continue; { Continúe con el ciclo }
End;
end;
Inc(Fila); { Incrementa FIla para control en Excel }
try
TablaX.Post { Introduce el registro actual en la Base de Datos }
except
on EDBEngineError do { En caso de algún error }
Begin
Mensajes.Memo1.Lines.Add(' '+Titulo+' '
+' Error de importación del día '+ IntToStr(Contador));
{ MessageBox(Handle,'Duplicación de valores', { Duplicate Customer Number } {'Caracteres o Tecla no válida',0); { Key Violation }
TablaX.Cancel; { Cancela cualquier edición hecha en el registro
actual si las ediciones aún no han sido envidas }
TablaX.Edit; { Habilita la edición del registro actual }
Continue; { Continúe con el ciclo }
End;
end;
End;
end;
Responder Con Cita
  #5  
Antiguo 01-05-2007
reevil reevil is offline
Miembro
 
Registrado: abr 2006
Posts: 179
Poder: 19
reevil Va por buen camino
por favor, usa las etiquetas de codigo
Responder Con Cita
  #6  
Antiguo 02-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Desde luego, lo más cómodo es añadir un campo fecha en formato dd/mm/yyyy además de tus datos. De esa forma con pedir los datos ordenados por ese campo, ya tienes el listado que quieres.
Código SQL [-]
select * from tabla 
order by fecha

Con esa información no se me ocurre la forma.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, 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
Tablas dbf patorecalde Tablas planas 4 04-12-2008 00:05:58
problema de logica con filter y ciclos vroa74 Conexión con bases de datos 2 07-03-2007 22:46:47
tablas en sql server demasiadas tablas yeison Cristman SQL 8 10-08-2006 16:26:36
Tablas Dbf keys Conexión con bases de datos 2 03-11-2005 09:32:57
Imprimir ciclos con Rave Johnny Q Impresión 0 02-08-2005 16:02:05


La franja horaria es GMT +2. Ahora son las 07:02:18.


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