source: tol/doc/general/guiatol.lyx

devel
Last change on this file was 83a1cc2, checked in by Víctor de Buen <vdebuen@…>, 18 years ago

Unified document directory

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@21 be4846ae-f051-483a-831f-b64e7d08527f

  • Property mode set to 100644
File size: 30.7 KB
Line 
1#LyX 1.3 created this file. For more info see http://www.lyx.org/
2\lyxformat 221
3\textclass book
4\language spanish
5\inputencoding auto
6\fontscheme default
7\graphics default
8\paperfontsize default
9\spacing single
10\papersize Default
11\paperpackage a4
12\use_geometry 0
13\use_amsmath 0
14\use_natbib 0
15\use_numerical_citations 0
16\paperorientation portrait
17\secnumdepth 3
18\tocdepth 3
19\paragraph_separation indent
20\defskip medskip
21\quotes_language english
22\quotes_times 2
23\papercolumns 1
24\papersides 1
25\paperpagestyle default
26
27\layout Standard
28
29
30\begin_inset LatexCommand \tableofcontents{}
31
32\end_inset
33
34
35\layout Chapter
36
37Introducción
38\layout Section
39
40Definición y Objetivos
41\layout Standard
42
43Time Oriented Language, en adelante
44\family typewriter
45\series bold
46TOL
47\family default
48\series default
49, es un lenguaje de programación diseñado para el análisis de series temporales
50 y procesos estocásticos basado en la representación algebraica del tiempo
51 y las series temporales que permite:
52\layout Itemize
53
54Estructurar los datos procedentes de los sistemas operacionales, dándoles
55 un soporte temporal y clasificador que los convierte en una información
56 útil para comprender su comportamiento.
57\layout Itemize
58
59Analizar la información dinámica, generar modelos estadísticos, identificar
60 los factores que influyen en el comportamiento temporal y extraer conocimiento
61\layout Itemize
62
63Facilitar la toma de decisiones a partir del conocimiento, de los modelos
64 estadísticos, de las previsiones del comportamiento y de las funciones
65 y opciones de decisión.
66\layout Standard
67
68El tiempo es una magnitud continua representable como la recta real pero
69 al tratar con series temporales de naturaleza social como ventas, llamadas
70 telefónicas, movimientos bancarios, asistencia a eventos, tráfico, etc.,
71 se observan comportamientos ligados a diferentes características temporales
72 como son los ciclos dentro de un periodo (que puede ser el día, la semana,
73 el mes, el año ...); o la proximidad a festivos y cualesquiera otros eventos
74 identificables con el momento en que ocurren.
75\layout Standard
76
77Tradicionalmente estos fenómenos se han representado por extensión, es decir,
78 como una enumeración de eventos fabricada más o menos artesanalmente; lo
79 cual no supone un problema muy grave para series anuales o mensuales como
80 máximo.
81 Pero la explosión de la información ha traído series diarias, horarias
82 o de frecuencias aún más altas, para las que se hace necesario un tratamiento
83 algebraico de este tiempo social que, a partir de una base de conjuntos
84 temporales primarios y una colección de funciones, permitan construir analítica
85mente conjuntos temporales complejos que representen los comportamientos
86 sociales más intrincados.
87\layout Standard
88
89Por otro lado el lenguaje ha de ofrecer mecanismos de análisis estadístico
90 de los datos, desde la lectura de los mismos en archivos o bases de datos
91 a la producción de modelos predictivos pasando por los métodos de representació
92n visual de la información que se hagan necesarios.
93\layout Standard
94
95Dentro de este contexto nace TOL para intentar dar respuesta a todas estas
96 necesidades y a otras que han ido surgiendo durante el proceso de implementació
97n y maduración del lenguaje.
98\layout Section
99
100Diseño
101\layout Standard
102
103Estas son algunas de las características técnicas más importantes del lenguaje
104 y que más han influido en el diseño y la implementación de TOL .
105\layout Itemize
106
107El lenguaje TOL ha sido esarrollado en C++ por ser uno de los lenguajes
108 más rápidos, potentes y versátiles que existen.
109 Desde luego, también es uno de los más complicados y de los que más tiempo
110 de formación requieren.
111\layout Itemize
112
113Se ha desarrollado con vocación multiplaforma y se ha compilado el código
114 bajo Windows y bajo diferentes sistemas UNIX (LINUX, HPUX, AIX, IRIX y
115 SOLARIS); intentando siempre que el código sea lo más compatible posible.
116 No obstante, para algunas rutinas de bajo nivel no ha habido más remedio
117 que hacer implementaciones ad hoc para cada sistema operativo.
118\layout Itemize
119
120El lenguaje dispone, prácticamente desde su inicio, de un entorno gráfico
121 llamado TOLBASE que ha facilitado la labor del analista permitiéndole obtener
122 representaciones gráficas de los objetos programados, como series temporales,
123 conjuntos temporales, matrices, funciones, conjuntos, etc.
124 Esta particularidad ha influido en la estructura del lenguaje pues los
125 objetos definidos deben sobrevivir en memoria después del tiempo de ejecución
126 del programa, al contrario de lo que ocurre con muchos otros lenguajes
127 de programación.
128\layout Itemize
129
130TOL es un lenguaje de programación interpretado, lo cual facilita el uso
131 y el aprendizaje de los analistas.
132 En dos o tres meses se puede alcanzar un nivel de programación aceptable
133 partiendo de personas sin formación informática específica y con poca o
134 ninguna experiencia en programación.
135\layout Itemize
136
137Es un lenguaje fuertemente tipado aunque existe un tipo comodín llamado
138 
139\family typewriter
140Anything
141\family default
142 que permite construir funciones que traten objetos de diferentes tipos,
143 característica ésta de la que no conviene abusar.
144\layout Itemize
145
146TOL permite crear estructuras de datos y funciones de usuario con lo que
147 el analista puede ampliar el lenguaje y adaptarlo a sus necesidades guardando
148 en ficheros el código y organizándolo en librerías.
149 El sistema TOL, de hecho, no sólo consta de código C++ sino que se complementa
150 con una serie de librerías básicas.
151 Sólo por razones de eficiencia conviene a veces crear algunas nuevas funciones
152 en C++.
153 
154\layout Itemize
155
156TOL admie recursividad en las funciones (monocíclica y policíclica); esto
157 es, una función se puede llamarse a sí misma o a otras que a su vez llamen
158 a otras y así sucesivamente hasta que alguna vuelva a llamar a la inicial.
159 Esto ofrece grandes ventajas en cuanto a potencia y claridad del código
160 pero no se debe abusar porque se carga demasiado la pila de llamadas y
161 puede dar lugar a errores del tipo stack overflow.
162\layout Itemize
163
164Es un lenguaje autoevaluable, es decir, se puede usar el lenguaje para construir
165 código TOL y evluarlo en tiempo de ejecución.
166 Esta es una de las características más productivas de TOL a la hora de
167 enfrentar problemas masivos en los que un código ha de ejecutarse muchas
168 veces con variaciones derivadas de una cierta estructura de datos.
169\layout Itemize
170
171TOL es básicamente declarativo pues como ya se ha dicho, los objetos no
172 son el medio sino el fin del lenguaje.
173 Incluso las funciones son objetos de tipo Code y pueden ser argumentos
174 de otras funciones y almacenarse en estructuras permitiendo la construcción
175 de algoritmos complicados de forma estructural y no secuencial.A pesar de
176 ello se han ido introduciendo algunas capacidades de control del flujo
177 propias de los lenguajes secuenciales para dotar al programador de mayor
178 potencia de implementación algorítmica.
179 Por ser un lenguaje interpretado, el control de flujo es necesariamente
180 más lento que en los lenguajes compilados.
181 
182\layout Itemize
183
184Una de las tareas más complicadas de la programación es el manejo eficiente
185 de la memoria por ser éste uno de los recursos más caros y limitados de
186 la computadora.
187 El manejo de memoria en TOL es dinámico y transparente al usuario, los
188 objetos existen mientras son necesarios y desaparecen cuando nadie los
189 usa, todo ello merced a un sistema de referencias.
190\layout Itemize
191
192Implementa una representación algebraica del tiempo que permite manipular
193 conjuntos temporales y series temporales como objetos virtualmente infinitos,
194 que no son representables por extensión como tipos de datos en el sentido
195 clásico de la programación, sino que más bien son clases definidas por
196 funciones que determinan su comportamientorequiriéndose un lenguaje de
197 programación orientado al objeto como lo es C++.
198 
199\layout Itemize
200
201Esto obliga a plantear un mecanismo de evaluación de tipo lazy, es decir,
202 la evaluación del objeto se retrasa al momento en que es requerido por
203 otro objeto, puesto que la información que lo constituye no puede ser enumerada
204 sino que se construye la información necesaria cada vez que hace falta
205 a partir de ciertos métodos intrínsecos.
206 Este tipo de evaluación se ha extendido incluso a los tipos de datos que
207 no lo precisarían, como los números, los textos y las fechas que si son
208 almacenables en memoria de forma extensa.
209 
210\layout Chapter
211
212Conceptos Básicos
213\layout Section
214
215Forma de un programa TOL
216\layout Section
217
218Palabras reservadas
219\layout Section
220
221Tipos de datos en TOL
222\layout Chapter
223
224Tipos de Datos en Tol
225\layout Section
226
227Números Reales
228\layout Section
229
230Cadenas
231\layout Section
232
233Polinomios
234\layout Section
235
236Matrices
237\layout Section
238
239Números Complejos
240\layout Section
241
242El tipo especial Code
243\layout Section
244
245El tipo especial Anything
246\layout Section
247
248Conjuntos
249\layout Section
250
251Estructuras
252\layout Subsection
253
254Formato de una estructura
255\layout Subsection
256
257Paso de estructuras a funciones
258\layout Subsection
259
260Conjuntos estructurados
261\layout Chapter
262
263Constantes, Operadores y Expresiones
264\layout Section
265
266Constantes
267\layout Section
268
269Operadores
270\layout Section
271
272Expresiones TOL
273\layout Subsection
274
275Expresiones simples
276\layout Subsection
277
278Declaraciones de variable
279\layout Subsection
280
281Expresiones compuestas
282\layout Subsection
283
284Expresiones anidadas
285\layout Chapter
286
287Sentencias de control de flujo
288\layout Section
289
290Sentencias booleanas
291\layout Section
292
293Sentencias de iteración
294\layout Section
295
296Sentencias de inclusión
297\layout Chapter
298
299Funciones
300\layout Section
301
302Funciones internas del lenguaje
303\layout Section
304
305Funciones especiales
306\layout Subsection
307
308Funciones de aplicación de métodos
309\layout Section
310
311Funciones de usuario
312\layout Subsection
313
314Forma general de una función
315\layout Subsection
316
317Reglas de ámbito de las funciones
318\layout Subsection
319
320Reglas de ámbito de las funciones
321\layout Subsection
322
323Retorno de una función
324\layout Subsection
325
326Recursividad
327\layout Chapter
328
329Series temporales
330\layout Section
331
332El Tiempo
333\layout Section
334
335Series temporales
336\layout Chapter
337
338Acceso a Bases de Datos
339\layout Standard
340
341TOl tiene una interfaz que permite efectuar múltiples operaciones sobre
342 bases de datos.
343\layout Standard
344
345Para efectuar una operación sobre una base de datos determinada, en primero
346 lugar debe abrirse; Después se ejecuta la operación para terminar cerrándola.
347 El proceso es sencillo y se especifica detalladamente a continuación.
348\layout Section
349
350
351\begin_inset LatexCommand \label{sec:Apertura:-DBopen}
352
353\end_inset
354
355Apertura: DBopen
356\layout Standard
357
358La función de TOL que abre una base de datos es
359\emph on
360DBOpen
361\emph default
362.
363 Su prototipo es como sigue:
364\layout LyX-Code
365
366Real DBopen (Text alias, Text usuario, Text clave [, Set estructuraDB]);
367\layout Itemize
368
369Argumentos:
370\layout Description
371
372alias: Especifica el nombre del alias a través del cual se van a controlar
373 las operaciones efectuadas en las bases de datos abiertas.
374 Debe ser único para cada base de datos, de forma que no se confundan las
375 bases de datos usadas posteriormente.
376 En el caso de acceso ODBC este alias coincide con el alias especificado
377 en el sistema ODBC.
378\layout Description
379
380usuario: Especifica el nombre del usuario con el que se accede a la base
381 de datos.
382\layout Description
383
384clave: La clave que acompaña al usuario en el acceso.
385\layout Description
386
387estructuraDB: Argumento opcional que permite el acceso a bases de datos
388 de forma nativa.
389 Su declaración puede depender del gestor al cual se accede, si bien en
390 la mayoría de los casos se limitará al nombre del servidor y de la base
391 de datos.
392\layout Itemize
393
394Valor devuelto:
395\layout Standard
396
397
398\emph on
399DBopen
400\emph default
401 devuelve un 1 (Verdadero) en caso de éxito, y un 0 (Falso) en caso de error.
402 En caso de error, un mensaje por pantalla ayudará a identificar el problema
403 (Acceso denegado, alias ya existente, servidor no accesible, etc.).
404\layout Subsection
405
406ODBC
407\layout Standard
408
409La apertura de bases de datos ODBC bajo TOL es muy sencilla, ya que únicamente
410 se hace necesario especificar el alias ODBC, un usuario y su clave de acceso.
411 Por supuesto, la base de datos debe haber sido especificada previamente
412 en el sistema ODBC.
413\layout Itemize
414
415Estructura:
416\layout LyX-Code
417
418Struct DBStructODBC
419\layout LyX-Code
420
421{
422\layout LyX-Code
423
424  Text driver
425\layout LyX-Code
426
427};
428\layout Standard
429
430Por compatibilidad con versiones anteriores de TOL, si el gestor no es especific
431ado mediante el uso de esta estructura, se utilizará ODBC como gestor por
432 defecto a la hora de abrir una base de datos, pero TOL avisará del uso
433 erróneo mediante un mensaje.
434\layout Itemize
435
436Ejemplo de uso:
437\layout LyX-Code
438
439Struct DBStructODBC
440\layout LyX-Code
441
442{
443\layout LyX-Code
444
445  Text driver
446\layout LyX-Code
447
448};
449\layout LyX-Code
450
451Set db = DBStructODBC("odbc");
452\layout LyX-Code
453
454Real resultado = DBOpen(
455\begin_inset Quotes eld
456\end_inset
457
458Alias
459\begin_inset Quotes erd
460\end_inset
461
462,
463\begin_inset Quotes erd
464\end_inset
465
466usuario
467\begin_inset Quotes erd
468\end_inset
469
470,
471\begin_inset Quotes erd
472\end_inset
473
474passwd
475\begin_inset Quotes erd
476\end_inset
477
478,db);
479\layout Standard
480
481Como se ha explicado con anterioridad, por compatibilidad con versiones
482 anteriores de TOL, también se permite el uso siguiente, que sería equivalente
483 al anterior:
484\layout LyX-Code
485
486Real resultado = DBOpen(
487\begin_inset Quotes eld
488\end_inset
489
490Alias
491\begin_inset Quotes erd
492\end_inset
493
494,
495\begin_inset Quotes erd
496\end_inset
497
498usuario
499\begin_inset Quotes erd
500\end_inset
501
502,
503\begin_inset Quotes erd
504\end_inset
505
506passwd
507\begin_inset Quotes erd
508\end_inset
509
510);
511\layout Standard
512
513Este uso se considera erróneo y debe evitarse.
514\layout Subsection
515
516Acceso nativo
517\layout Standard
518
519Además de ODBC, TOL permite el acceso de forma nativa a múltiples gestores
520 de bases de datos, consiguiendo de esta forma un acceso mas rápido y fiable.
521\layout Standard
522
523Si bien cada uno de estos gestores tiene un comportamiento completamente
524 distinto, la interfaz de acceso a bases de datos de TOL ayuda a hacerlo
525 de forma transparente.
526\layout Standard
527
528A continuación se especifica el comportamiento de cada uno de los gestores
529 existentes.
530\layout Subsubsection
531
532mySQL
533\layout Standard
534
535La interfaz mySQL de TOL requiere tan sólo especificar el gestor, servidor
536 y base de datos en la estructura detallada en la sección
537\begin_inset LatexCommand \ref{sec:Apertura:-DBopen}
538
539\end_inset
540
541.
542\layout Itemize
543
544Estructura:
545\layout LyX-Code
546
547Struct DBStructMySQL {
548\layout LyX-Code
549
550  Text driver,
551\layout LyX-Code
552
553  Text database,
554\layout LyX-Code
555
556  Text host
557\layout LyX-Code
558
559};
560\layout Description
561
562driver: Especifica el gestor a utilizar.
563 En este caso concreto, su valor será
564\begin_inset Quotes eld
565\end_inset
566
567mysql
568\begin_inset Quotes erd
569\end_inset
570
571.
572\layout Description
573
574host: Especifica el nombre o dirección IP del servidor de la base de datos.
575 Ejemplos válidos son
576\begin_inset Quotes eld
577\end_inset
578
579localhost
580\begin_inset Quotes erd
581\end_inset
582
583,
584\begin_inset Quotes eld
585\end_inset
586
587server.domain.es
588\begin_inset Quotes erd
589\end_inset
590
591 y
592\begin_inset Quotes eld
593\end_inset
594
595127.0.0.1
596\begin_inset Quotes erd
597\end_inset
598
599.
600\layout Description
601
602database: Especifica el nombre de la base de datos.
603 Ejemplo:
604\begin_inset Quotes eld
605\end_inset
606
607test
608\begin_inset Quotes erd
609\end_inset
610
611.
612\layout Itemize
613
614Ejemplo:
615\layout LyX-Code
616
617Struct DBStruct {
618\layout LyX-Code
619
620  Text driver,
621\layout LyX-Code
622
623  Text database,
624\layout LyX-Code
625
626  Text host
627\layout LyX-Code
628
629};
630\layout LyX-Code
631
632Set db1 = DBStruct("mysql", "test", "localhost");
633\layout LyX-Code
634
635Real DBOpen("alias","root","",db1);
636\layout Standard
637
638Una vez abierta la base de datos, su comportamiento no varía con respecto
639 al resto de gestores.
640\layout Subsubsection
641
642HuffmanByFields
643\layout Standard
644
645(En desarrollo y documentación)
646\layout Subsubsection
647
648Otros gestores
649\layout Standard
650
651La implementación de otros gestores de bases de datos está siendo llevada
652 a cabo en estos momentos, y según sean considerados estables serán incorporados
653 al lenguaje.
654 Además, la interfaz permite el uso de cualquier tipo de soporte de almacenamien
655to en el acceso, que no tiene por qué ser una base de datos, como pueda
656 ser un fichero con un determinado formato.
657\layout Section
658
659Cierre: DBClose
660\layout Standard
661
662Una vez se haya terminado de usar una base de datos, ésta debe ser cerrada
663 para liberar todos los recursos que TOL reserva para su utilización.
664 Para hacer esto se cuenta con la función
665\emph on
666DBClose:
667\layout LyX-Code
668
669Real DBClose(Text aliasName);
670\layout Standard
671
672El único parámetro de DBClose especifica el alias con el cual la base de
673 datos fué abierta con anterioridad.
674 Un ejemplo correcto de apertura y cierre de dos bases de datos mysql y
675 una ODBC con TOL sería:
676\layout LyX-Code
677
678//Especificacion de las estructuras necesarias:
679\layout LyX-Code
680
681Struct DBStructMySQL {
682\layout LyX-Code
683
684  Text driver,
685\layout LyX-Code
686
687  Text database,
688\layout LyX-Code
689
690  Text host
691\layout LyX-Code
692
693};
694\layout LyX-Code
695
696Struct DBStructODBC {
697\layout LyX-Code
698
699  Text driver
700\layout LyX-Code
701
702};
703\layout LyX-Code
704
705//Apertura:
706\layout LyX-Code
707
708Set db1 = DBStructMySQL("mysql", "test", "localhost");
709\layout LyX-Code
710
711Real DBOpen("aliasTest","user","passwd",db1);
712\layout LyX-Code
713
714Set db2 = DBStructMySQL("mysql", "empresa", "myserver");
715\layout LyX-Code
716
717Real DBOpen("aliasEmpresa","user","passwd",db2);
718\layout LyX-Code
719
720Set db3 = DBStructODBC("odbc");
721\layout LyX-Code
722
723Real DBOpen("aliasName","user","passwd",db3);
724\layout LyX-Code
725
726//Cierre de las bases de datos abiertas:
727\layout LyX-Code
728
729Real DBClose(
730\begin_inset Quotes eld
731\end_inset
732
733aliasEmpresa
734\begin_inset Quotes erd
735\end_inset
736
737);
738\layout LyX-Code
739
740Real DBClose(
741\begin_inset Quotes eld
742\end_inset
743
744aliasTest
745\begin_inset Quotes erd
746\end_inset
747
748);
749\layout LyX-Code
750
751Real DBClose(
752\begin_inset Quotes eld
753\end_inset
754
755aliasName
756\begin_inset Quotes erd
757\end_inset
758
759);
760\layout Section
761
762Operaciones sobre bases de datos
763\layout Standard
764
765Existen varias funciones en TOL para efectuar operaciones sobre bases de
766 datos.
767 Los prototipos son:
768\layout LyX-Code
769
770Real DBExecQuery(Text consulta);
771\layout LyX-Code
772
773Set DBTable (Text consulta [, Text nombreEstructura]);
774\layout LyX-Code
775
776Matrix DBMatrix(Text consulta);
777\layout LyX-Code
778
779Set DBSeries(Text consulta, timeSet fechado, Set nombres
780\layout LyX-Code
781
782  [, Set Set descripciones, Real valorDefecto=0]);
783\layout LyX-Code
784
785Set DBSeriesTable (Text consulta , TimeSet fechado, Set nombres
786\layout LyX-Code
787
788  [, Set descripciones, Real valorDefecto=0]);
789\layout LyX-Code
790
791Set DBSeriesColumn (Text consulta , TimeSet fechado
792\layout LyX-Code
793
794  [, Real valorDefecto=0]);
795\layout LyX-Code
796
797Real DBSpool (Text consulta, Text fichero
798\layout LyX-Code
799
800  [, Text cabecera="",Text separadorColumnas=";",
801\layout LyX-Code
802
803  Text separadorFilas=";",Real formateo=CIERTO ]);
804\layout LyX-Code
805
806Real DBCreateSeriesTable (Text nombreTabla, Set series
807\layout LyX-Code
808
809  [, Text nombreFecha , Text tipoFecha, Text formatoFechas,
810\layout LyX-Code
811
812  Set nombres]);
813\layout Subsection
814
815DBExecQuery
816\layout Itemize
817
818Qué hace: Ejecuta un comando en la base de datos activa.
819 En el caso de comandos de extracción de datos no es posible acceder al
820 contenido devuelto, por lo que se recomienda limitar esta función al uso
821 de comandos de inserción, creación y borrado.
822\layout Itemize
823
824Valor devuelto: Devuelve el número de filas afectadas o (-1) en caso de
825 error.
826 Nótese que existen comandos SQL, como son
827\emph on
828drop
829\emph default
830,
831\emph on
832create
833\emph default
834 o similares, en los que el valor devuelto será cero aunque la consulta
835 se haya efectuado correctamente.
836 Además de estos casos, una consulta puede devolver cero filas y aún así
837 tratarse de una llamada correcta.
838 DBExecQuery devuelve un error (-1) únicamente en caso de imposibilidad
839 de ejecución del comando.
840\layout Itemize
841
842Ejemplo de uso:
843\layout LyX-Code
844
845Real DBExecQuery(
846\begin_inset Quotes eld
847\end_inset
848
849create table prueba ( campo1 VARCHAR(5),
850\layout LyX-Code
851
852                                         campo2 INT,
853\layout LyX-Code
854
855                                         fechado DATE)
856\begin_inset Quotes erd
857\end_inset
858
859);
860\layout Subsection
861
862DBTable
863\layout Itemize
864
865Qué hace: Ejecuta un comando en la base de datos activa.
866 Al contrario que
867\emph on
868DBExecQuery
869\emph default
870,
871\emph on
872DBTable
873\emph default
874 devuelve un conjunto con los datos leídos.
875 Estos datos deben ser de tipo numérico, texto o fecha.
876\layout Itemize
877
878Valor devuelto: Devuelve un conjunto con los datos leídos o un conjunto
879 vacío en caso de error.
880\layout Itemize
881
882Ejemplo de uso:
883\layout LyX-Code
884
885Set conjunto = DBTable(
886\begin_inset Quotes eld
887\end_inset
888
889select dni, nombre, apellido from empleados
890\begin_inset Quotes erd
891\end_inset
892
893);
894\layout Subsection
895
896DBMatrix
897\layout Itemize
898
899Qué hace: Ejecuta un comando en la base de datos activa.
900 Su funcionamiento es similar a
901\emph on
902DBTable
903\emph default
904, si bien
905\emph on
906DBMatrix
907\emph default
908 devuelve los datos leídos en una matriz en vez de un conjunto, y además
909 los datos de ese conjunto se encuentran limitados a campos de tipo numérico.
910\layout Itemize
911
912Valor devuelto: Devuelve una matriz con los datos leídos o una matriz de
913 tamaño cero en caso de error.
914\layout Itemize
915
916Ejemplo de uso:
917\layout LyX-Code
918
919Matrix matriz = DBMatrix(
920\begin_inset Quotes eld
921\end_inset
922
923select * from tabla
924\begin_inset Quotes erd
925\end_inset
926
927);
928\layout Subsection
929
930DBSeries
931\layout Itemize
932
933Qué hace: Ejecuta una consulta en la base de datos activa y devuelve un
934 conjunto de series con los nombres dados y haciendo uso del fechado indicado.
935 La consulta obligatoriamente debe devolver en el primer campo una fecha
936 y a continuación un dato numérico, y las filas deben estar ordenadas por
937 fecha.
938\layout Itemize
939
940Valor devuelto: El conjunto de las series temporales generadas por la consulta.
941\layout Itemize
942
943Ejemplo de uso:
944\layout LyX-Code
945
946// Devuelve las series de ingresos y gastos de los
947\layout LyX-Code
948
949// movimientos de una cuenta bancaria, tomando como
950\layout LyX-Code
951
952// valor por defecto cero:
953\layout LyX-Code
954
955Set seriesMovimientos = DBseries(
956\begin_inset Quotes eld
957\end_inset
958
959select fecha, ingresos, gastos
960\layout LyX-Code
961
962                                   from movimientos
963\layout LyX-Code
964
965                                     where id_cuenta = 12345
966\layout LyX-Code
967
968                                     order by fecha
969\begin_inset Quotes erd
970\end_inset
971
972,
973\layout LyX-Code
974
975                      Diario,
976\layout LyX-Code
977
978                      [[ingresos, gastos]],
979\layout LyX-Code
980
981                      [[ing, gast]],0);
982\layout Subsection
983
984DBSeriesTable
985\layout Itemize
986
987Qué hace: De forma similar a la función DBSeries, ejecuta una consulta en
988 la base de datos activa y devuelve un conjunto de conjuntos de series con
989 los nombres dados y haciendo uso del fechado indicado.
990 La consulta obligatoriamente debe devolver en el primer campo un prefijo
991 para la serie, una fecha y a continuación un dato numérico.
992 La consulta debe estar ordenada por los campos prefijo y fecha.
993\layout Itemize
994
995Valor devuelto: Un conjunto bidimensional consistente en los conjuntos de
996 series temporales generadas por la consulta a a base de datos.
997\layout Itemize
998
999Ejemplo de uso:
1000\layout LyX-Code
1001
1002// Devuelve el conjunto bidimensional de las series generadas por
1003\layout LyX-Code
1004
1005//los ingresos y gastos de cada cuenta bancaria existente:
1006\layout LyX-Code
1007
1008Set seriesMov = DBSeriesTable(
1009\begin_inset Quotes eld
1010\end_inset
1011
1012select fecha, id_cuenta, ingresos, gastos
1013\layout LyX-Code
1014
1015                               from movimientos
1016\layout LyX-Code
1017
1018                               order by id_cuenta, fecha
1019\begin_inset Quotes erd
1020\end_inset
1021
1022,
1023\layout LyX-Code
1024
1025                              Diario,
1026\layout LyX-Code
1027
1028                              [[ingresos, gastos]]);
1029\layout Subsection
1030
1031DBSeriesColumn
1032\layout Itemize
1033
1034Qué hace: De forma similar a la función DBSeries, ejecuta una consulta en
1035 la base de datos activa, pero únicamente devuelve un conjunto de series
1036 con los nombres dados y haciendo uso del fechado indicado.
1037 La consulta obligatoriamente debe devolver en el primer campo el nombre
1038 de la serie, seguido por una fecha y a continuación un dato numérico.
1039 La consulta debe estar ordenada por los campos serie y fecha.
1040\layout Itemize
1041
1042Valor devuelto: El conjunto de las series temporales consultadas.
1043\layout Itemize
1044
1045Ejemplo de uso:
1046\layout LyX-Code
1047
1048// Devuelve el conjunto de las series generadas por los
1049\layout LyX-Code
1050
1051// ingresos y los gastos de cada cuenta bancaria existente:
1052\layout LyX-Code
1053
1054Set seriesCol = DBSeriescolumn(
1055\begin_inset Quotes eld
1056\end_inset
1057
1058select fecha, id_cuenta, ingresos, gastos
1059\layout LyX-Code
1060
1061                               from movimientos
1062\layout LyX-Code
1063
1064                               order by id_cuenta, fecha
1065\begin_inset Quotes erd
1066\end_inset
1067
1068,
1069\layout LyX-Code
1070
1071                               Diario,
1072\layout LyX-Code
1073
1074                               [[ingresos, gastos]]);
1075\layout Subsection
1076
1077DBCreateSeriesTable
1078\layout Itemize
1079
1080Qué hace: Crea una tabla en la base de datos activa con las series indicadas
1081 como contenido.
1082 La existencia de dicha tabla es independiente del funcionamiento de TOL,
1083 por lo que, si no se desea conservarla al terminar un programa, hay que
1084 borrarla explícitamente mediante la orden:
1085\begin_inset Quotes eld
1086\end_inset
1087
1088drop table tablaSeries
1089\begin_inset Quotes erd
1090\end_inset
1091
1092.
1093\layout Itemize
1094
1095Valor devuelto:
1096\layout Itemize
1097
1098Ejemplo de uso:
1099\layout LyX-Code
1100
1101// Guardamos las series devueltas por DBSeriesTable:
1102\layout LyX-Code
1103
1104DBCreateSeriesTable(tablaSeries, seriesMov,
1105\begin_inset Quotes eld
1106\end_inset
1107
1108fecha
1109\begin_inset Quotes erd
1110\end_inset
1111
1112,
1113\begin_inset Quotes erd
1114\end_inset
1115
1116
1117\begin_inset Quotes erd
1118\end_inset
1119
1120,
1121\begin_inset Quotes erd
1122\end_inset
1123
1124
1125\begin_inset Quotes erd
1126\end_inset
1127
1128,[[,,]]);
1129\layout Section
1130
1131Manejo simultáneo de múltiples bases de datos
1132\layout Standard
1133
1134TOL permite el uso simultáneo de varias bases de datos de forma que es posible
1135 alternar su uso sin tener que abrirlas y cerrarlas entre operaciones.
1136\layout Subsection
1137
1138DBActivate
1139\layout Standard
1140
1141Mediante el uso de la función
1142\emph on
1143DBActivate
1144\emph default
1145 se puede hacer uso de una determinada base de datos mientras el resto siguen
1146 abiertas.
1147\layout Standard
1148
1149El prototipo de DBActivate es:
1150\layout LyX-Code
1151
1152Real DBActivate (Text alias);
1153\layout Itemize
1154
1155Comportamiento de activación de las bases de datos:
1156\layout Standard
1157
1158Es importante conocer el comportamiento de estado de activación de las bases
1159 de datos abiertas, puesto que no siempre puede parecer evidente.
1160 Básicamente existen dos reglas básicas:
1161\layout Enumerate
1162
1163Después de abrir una base de datos ésta se activa automáticamente.
1164\layout Enumerate
1165
1166En caso de cierre de una base de datos activa, la primera de la lista de
1167 bases de datos abiertas será activada.
1168\layout Itemize
1169
1170Valor devuelto:
1171\layout Standard
1172
1173DBActivate devuelve 1 (Verdadero) en caso de éxito y 0 (Falso) en caso de
1174 error.
1175\layout Itemize
1176
1177Ejemplo de uso:
1178\layout LyX-Code
1179
1180// Abrimos dos bases de datos:
1181\layout LyX-Code
1182
1183Real DBopen(
1184\begin_inset Quotes eld
1185\end_inset
1186
1187alias1
1188\begin_inset Quotes erd
1189\end_inset
1190
1191,
1192\begin_inset Quotes eld
1193\end_inset
1194
1195usuario
1196\begin_inset Quotes erd
1197\end_inset
1198
1199,
1200\begin_inset Quotes erd
1201\end_inset
1202
1203clave
1204\begin_inset Quotes erd
1205\end_inset
1206
1207,db1);
1208\layout LyX-Code
1209
1210Real DBopen(
1211\begin_inset Quotes eld
1212\end_inset
1213
1214alias2
1215\begin_inset Quotes erd
1216\end_inset
1217
1218,
1219\begin_inset Quotes eld
1220\end_inset
1221
1222usuario
1223\begin_inset Quotes erd
1224\end_inset
1225
1226,
1227\begin_inset Quotes erd
1228\end_inset
1229
1230clave
1231\begin_inset Quotes erd
1232\end_inset
1233
1234,db2);
1235\layout LyX-Code
1236
1237// Operamos sobre la última abierta:
1238\layout LyX-Code
1239
1240Set tabla2 = DBTable(
1241\begin_inset Quotes eld
1242\end_inset
1243
1244select * from tabla
1245\begin_inset Quotes erd
1246\end_inset
1247
1248);
1249\layout LyX-Code
1250
1251// Activamos la primera:
1252\layout LyX-Code
1253
1254Real DBActivate(
1255\begin_inset Quotes eld
1256\end_inset
1257
1258alias1
1259\begin_inset Quotes erd
1260\end_inset
1261
1262);
1263\layout LyX-Code
1264
1265// Operamos sobre la primera:
1266\layout LyX-Code
1267
1268Set tabla1 = DBTable(
1269\begin_inset Quotes eld
1270\end_inset
1271
1272select * from tabla
1273\begin_inset Quotes erd
1274\end_inset
1275
1276);
1277\layout LyX-Code
1278
1279// Cerramos las dos bases de datos:
1280\layout LyX-Code
1281
1282Real DBClose(
1283\begin_inset Quotes eld
1284\end_inset
1285
1286alias1
1287\begin_inset Quotes erd
1288\end_inset
1289
1290);
1291\layout LyX-Code
1292
1293Real DBClose(
1294\begin_inset Quotes eld
1295\end_inset
1296
1297alias2
1298\begin_inset Quotes erd
1299\end_inset
1300
1301);
1302\layout Subsection
1303
1304DBGetOpened
1305\layout Standard
1306
1307Mediante el uso de la función DBGetOpened es posible examinar el estado
1308 de todas las bases de datos abiertas, ya que devuelve un conjunto de estructura
1309s de información sobre cada base de datos abierta, incluyendo alias usado
1310 en TOL, gestor, servidor y nombre de la base de datos.
1311\layout Standard
1312
1313Su prototipo es:
1314\layout Standard
1315
1316Set DBGetOpened(Text tipo);
1317\layout Itemize
1318
1319Valor devuelto:
1320\layout Standard
1321
1322DBGetOpened devuelve un conjunto bidimensional con la información de cada
1323 base de datos que se encuentre en condiciones de uso.
1324\layout Standard
1325
1326El parámetro
1327\begin_inset Quotes eld
1328\end_inset
1329
1330tipo
1331\begin_inset Quotes erd
1332\end_inset
1333
1334 especifica el gestor cuya coincidencia filtrará el conjunto.
1335 Para consultar la lista completa, basta con dar una cadena vacía como argumento.
1336\layout Itemize
1337
1338Ejemplo de uso:
1339\layout LyX-Code
1340
1341// Abrimos tres bases de datos:
1342\layout LyX-Code
1343
1344Real DBOpen(
1345\begin_inset Quotes eld
1346\end_inset
1347
1348alias1
1349\begin_inset Quotes erd
1350\end_inset
1351
1352,
1353\begin_inset Quotes eld
1354\end_inset
1355
1356usuario
1357\begin_inset Quotes erd
1358\end_inset
1359
1360,
1361\begin_inset Quotes erd
1362\end_inset
1363
1364clave
1365\begin_inset Quotes erd
1366\end_inset
1367
1368,db1);
1369\layout LyX-Code
1370
1371Real DBOpen(
1372\begin_inset Quotes eld
1373\end_inset
1374
1375alias2
1376\begin_inset Quotes erd
1377\end_inset
1378
1379,
1380\begin_inset Quotes eld
1381\end_inset
1382
1383usuario
1384\begin_inset Quotes erd
1385\end_inset
1386
1387,
1388\begin_inset Quotes erd
1389\end_inset
1390
1391clave
1392\begin_inset Quotes erd
1393\end_inset
1394
1395,db2);
1396\layout LyX-Code
1397
1398Real DBOpen(
1399\begin_inset Quotes eld
1400\end_inset
1401
1402alias3
1403\begin_inset Quotes erd
1404\end_inset
1405
1406,
1407\begin_inset Quotes eld
1408\end_inset
1409
1410usuario
1411\begin_inset Quotes erd
1412\end_inset
1413
1414,
1415\begin_inset Quotes erd
1416\end_inset
1417
1418clave
1419\begin_inset Quotes erd
1420\end_inset
1421
1422,db3);
1423\layout LyX-Code
1424
1425// Leemos la información sobre bases de datos abiertas:
1426\layout LyX-Code
1427
1428Set dataBases = DBGetOpened(
1429\begin_inset Quotes eld
1430\end_inset
1431
1432
1433\begin_inset Quotes erd
1434\end_inset
1435
1436);
1437\layout LyX-Code
1438
1439// ¿Cuántas bases de datos hay?
1440\layout LyX-Code
1441
1442Real numDataBases = Card(dataBases);
1443\layout LyX-Code
1444
1445// ¿De qué tipo es la segunda?
1446\layout LyX-Code
1447
1448Text type = dataBases[2][2];
1449\layout LyX-Code
1450
1451// ¿La primera está activa?
1452\layout LyX-Code
1453
1454Real active = dataBases[1][3];
1455\layout LyX-Code
1456
1457// ¿Qué alias tiene la tercera?
1458\layout LyX-Code
1459
1460Text alias = dataBases[3][1];
1461\layout LyX-Code
1462
1463// Cerramos las bases de datos:
1464\layout LyX-Code
1465
1466Real DBClose(
1467\begin_inset Quotes eld
1468\end_inset
1469
1470alias1
1471\begin_inset Quotes erd
1472\end_inset
1473
1474);
1475\layout LyX-Code
1476
1477Real DBClose(
1478\begin_inset Quotes eld
1479\end_inset
1480
1481alias2
1482\begin_inset Quotes erd
1483\end_inset
1484
1485);
1486\layout LyX-Code
1487
1488Real DBClose(
1489\begin_inset Quotes eld
1490\end_inset
1491
1492alias3
1493\begin_inset Quotes erd
1494\end_inset
1495
1496);
1497\the_end
Note: See TracBrowser for help on using the repository browser.