FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
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 |
#3
|
||||
|
||||
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. |
#4
|
|||
|
|||
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; |
#5
|
|||
|
|||
por favor, usa las etiquetas de codigo
|
#6
|
||||
|
||||
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.
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. |
|
|
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 |
|