• Miércoles 15 de Abril de 2026, 00:36

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - 123celes

Páginas: [1]
1
C/C++ / Re: Diferencia entre BC y TC
« en: Miércoles 29 de Octubre de 2008, 16:35 »
OK; muchas gracias por tu paciencia y por tus repuestas.

Econtré un enlace interesante que tiene mucho código fuente en lenguaje C:
planet-source-code.com/vb/default.asp?lngWId=3

2
C/C++ / Re: Diferencia entre BC y TC
« en: Martes 28 de Octubre de 2008, 11:55 »
Muchas gracias por tu respuesta. Supongo que buscare un nuevo compilador de C. Escuche cosas buenas de un tal PRO * C. Veré como funciona. Una cosita más esos compiladores que aceptan la mezcla de C y SQL ¿Pueden hacer todo lo que los compiladores de C standart pueden, es decir programación gráfica, manipular el teclado, joystcik, rutinas ratón, reproducir sonido y eso?

Sinceramente te agradezco el tiempo que te tomaste para con mis respuestas, muchas gracias.

Estos enlaces pueden ser interesantes.

ftp://garbo.uwasa.fi/pc/programming/

flipcode.com/archives/

monroeccc.edu/ckelly/game_programming.htm

Dentro de este último enlace recomiendo el ejemplo de Ray Tracer para compilar con el Borland c++ (modelo de memoria grande), ¡Es impresionante!

3
C/C++ / Re: Diferencia entre BC y TC
« en: Lunes 27 de Octubre de 2008, 17:36 »
Lo siento, los errores que me da el compilador son:

Compiling SQL.C:

Error SQL.C 45: Declaration synstax error
Error SQL.C 49: Variable 'EXEC' is initialized more than once
Error SQL.C 49: Declaration synstax error
Error SQL.C 65: Variable 'EXEC' is initialized more than once
Error SQL.C 78: Variable 'EXEC' is initialized more than once
Error SQL.C 78: Declaration synstax error
Error SQL.C 80: Variable 'EXEC' is initialized more than once
Error SQL.C 80: Declaration syntax error
Error SQL.C 81: Declaration syntax error
Error SQL.C 87: Function call missing )
Error SQL.C 87: Unterminated string or character constant
Error SQL.C 88: Unterminated string or character constant
Error SQL.C 93: Function 'fsanf' should have a prototype
Error SQL.C 93: 'num' is not a member of 'struct'
Error SQL.C 93: Undefined symbol 'emp'
Error SQL.C 94: Undefined symbol 'numem'
Error SQL.C 97: Statement missing ;
Error SQL.C 100: Undefined symbol 'SQLCODE'
Error SQL.C 102: Undefined symbol 'regsal'
Error SQL.C 113: Function 'fscaf'should have a prototype
Error SQL.C 115: Undefined symbol 'fecna'
Error SQL.C 118: Undefined symbol 'nombrel'
Error SQL.C 119: Undefined symbol 'nombrev'
Error SQL.C 119: Expression syntax
Error SQL.C 119: Too many error or warning messages

4
C/C++ / Re: Diferencia entre BC y TC
« en: Lunes 27 de Octubre de 2008, 13:50 »
Perdón
tenías razón, Gracias por el aviso, era solo un fragmento del código,
metí la pata sin querer.
Voy a comenzar desde el principio conseguí el libro "sql para usuarios
y programadores", cuarta edición 1998 J. Benavides Abajo
J.M. Olaizola Bartolomé
E. Rivera Cornelio
Editorial Paraninfo
El libro habla del sql en general y muestra varios ejercicios a través
de los capitulos. Para poder irlos realizando yo he utilizado el MS-SQL
Server 7(el libro no especifica ningún SGBD en particular, solo habla
del SQL en general). Todos los ejercicios se hacen con la misma base de
datos, es una base de datos llamada TRA que contiene las siguientes
tablas:
Código: Text
  1. --Tablas página 309
  2.  
  3. -------------------------------------------------------------------------------------------------
  4.  
  5. --Tabla
  6. de empleados
  7.  
  8. --Cada fila representa un empleado
  9.  
  10. --nombre de la tabla: TEMPLE
  11.  
  12. --columnas:
  13.  
  14. --NUMEM: número identificador del empleado (integer) NOT NULL
  15.  
  16. --NUMDE: número de departamento al que esta asignado (integer) NOT NULL
  17.  
  18. --EXTEL: EXtensión telefónica correspondiente al empleado (smallint)
  19. NOT NULL
  20.  
  21. --FECNA: Fecha de nacimiento (date) NOT NULL
  22.  
  23. --FECIN: Fecha de ingreso (date) NOT NULL
  24.  
  25. --SALAR: salario mensual (decimal) NOT NULL
  26.  
  27. --COMIS: comisión mensual (decimal), en miles de pesetas.
  28. --Esta columna sólo es aplicable a los empleados que son vendedores,
  29. --o directores de vendedores, incluyendo hasta el director comercial.
  30. En los
  31. --otros empleados toma el valor nulo.
  32.  
  33. --NUMHI: número de hijos (smallint) NOT NULL
  34.  
  35. --NOMEM: nombre del empleado (varchar) NOT NULL
  36.  
  37. --clave primaria: (NUMEM)
  38.  
  39. -------------------------------------------------------------------------------------------------
  40.  
  41. --Tabla
  42. de departamentos
  43.  
  44. --Cada fila representa una unidad organizativa. Todas estas unidades se
  45. llaman departamentos.
  46.  
  47. --nombre de la tabla: TDEPTO
  48.  
  49. --columnas:
  50.  
  51. --NUMDE: número identificador de departamento (integer) NOT NULL
  52.  
  53. --NUMCE: número de centro de trabajo donde esta el departamento
  54. (integer) NOT NULL.
  55. --Todo departamento esta en un centro de trabajo. Un centro es un
  56. edificio o local. Un centro
  57. --puede albergar a más de un departamento.
  58.  
  59. --DIREC: número del empleado que es director del departamento (integer)
  60. NOT NULL.
  61. --Todo departamento tiene un único director. Puede tratarse de un
  62. director en propiedad,
  63. --o de un director en funciones. Un empleado sólo puede ser director en
  64. propiedad de un departa-
  65. --mento como máximo, pero puede ser director provisional en funciones
  66. de varios
  67.  
  68. --TDIR: tipo de director (char) NOT NULL
  69. --P: en propiedad, F: en funciones.
  70.  
  71. --FECIN: Fecha de ingreso (date) NOT NULL
  72.  
  73. --PRESU: presupuesto anual de departamento (decimal), en millones de
  74. pesetas NOT NULL.
  75.  
  76. --DEPDE: Número de departamento del que depende (integer).
  77. --Todo departamento depende de otro (excepto el de más alto nivel, que
  78. no depende de ninguno).
  79. --Un departamento puede tener varios dependientes de el. Esta
  80. dependencia expresa la jeraquía de
  81. --mando. El director de un departamento es jefe de todos los empleados
  82. pertenecientes a su depar-
  83. --tamento y a los departamentos dependientes del suyo, directa o
  84. indirectamente.
  85. --Esta columna admite el valor nulo.
  86.  
  87. --NOMDE: nombre del departamento (varchar) NOT NULL
  88.  
  89. --clave primaria: (NUMDE)
  90.  
  91. -------------------------------------------------------------------------------------------------
  92. --Tabla
  93. de centros de trabajo
  94.  
  95. --Cada fila representa un edificio, piso o local donde se desempeñan
  96. actividades laborales.
  97.  
  98. --nombre de la tabla: TCENTR
  99.  
  100. --columnas:  
  101. --NUMCE: número identificador del centro (integer).
  102.  
  103. --NOMCE: nombre del centro (varchar).
  104.  
  105. --SEÑAS: dirección del local (varchar).
  106.  
  107. --clave primaria: (NUMCE)
  108.  
  109.  
Ahora voy a mostrar como se crea la base de datos y las tablas en
MS-SQL SERVER 7
Código: Text
  1. USE MASTER --ok
  2.  
  3. GO --ok
  4.  
  5. ----------
  6.  
  7. CREATE DATABASE TRA --ok
  8.  
  9. ----------
  10.  
  11. USE TRA --ok
  12.  
  13. GO --ok
  14.  
  15. -----------
  16.  
  17. ----------------------------------------
  18.  
  19. CREATE TABLE TEMPLE(
  20. NUMEM integer  NOT NULL PRIMARY KEY,
  21. NUMDE integer NOT NULL,
  22. EXTEL smallint NOT NULL,
  23. FECNA datetime NOT NULL,
  24. FECIN datetime NOT NULL,
  25. SALAR decimal NOT NULL,
  26. COMIS decimal,
  27. NUMHI smallint NOT NULL,
  28. NOMEM varchar (25)NOT NULL
  29. )
  30.  
  31. ---------------------------------ok
  32.  
  33. CREATE TABLE TDEPTO
  34.  
  35. (NUMDE integer NOT NULL PRIMARY KEY,
  36. NUMCE integer NOT NULL,
  37. DIREC integer NOT NULL,
  38. TDIR char NOT NULL,
  39. PRESU decimal NOT NULL,
  40. DEPDE integer,
  41. NOMDE varchar (25) NOT NULL
  42. )
  43.  
  44.  
  45. ----------------------------ok
  46.  
  47. CREATE TABLE TCENTR
  48.  
  49. (NUMCE integer NOT NULL PRIMARY KEY,
  50. NOMCE varchar (25) NOT NULL,
  51. SEÑAS varchar (25)NOT NULL,
  52. )
  53.  
  54. ---------------------------------ok----------------------------------------------------------------
  55.  
Las
tablas continen los siguientes registros, los que voy a mostrar a
continuación son como se insertarían esos registros con el SGBD MS-SQL
SERVER 7
Código: Text
  1. ---------------------------------ok----------------------------------------------------------------
  2.  
  3. INSERT
  4. into TDEPTO (NUMDE, NUMCE, DIREC, TDIR, PRESU, DEPDE, NOMDE) values
  5. (100, 10, 260, 'P', 12,null, "DIRECCION GENERAL")
  6. INSERT into TDEPTO (NUMDE, NUMCE, DIREC, TDIR, PRESU, DEPDE, NOMDE)
  7. values (110, 20, 180, 'P', 15, 100, 'DIRECCION COMERCIAL')
  8. INSERT into TDEPTO (NUMDE, NUMCE, DIREC, TDIR, PRESU, DEPDE, NOMDE)
  9. values (111, 20, 180, 'F', 11, 110, 'SECTOR INDUSTRIAL')
  10. INSERT into TDEPTO (NUMDE, NUMCE, DIREC, TDIR, PRESU, DEPDE, NOMDE)
  11. values (112, 20, 270, 'P', 9, 110, 'SECTOR SERVICIOS')
  12. INSERT into TDEPTO (NUMDE, NUMCE, DIREC, TDIR, PRESU, DEPDE, NOMDE)
  13. values (120, 10, 150, 'F', 3, 100, 'ORGANIZACION')
  14. INSERT into TDEPTO (NUMDE, NUMCE, DIREC, TDIR, PRESU, DEPDE, NOMDE)
  15. values (121, 10, 150, 'P', 2, 120, 'PERSONAL')
  16. INSERT into TDEPTO (NUMDE, NUMCE, DIREC, TDIR, PRESU, DEPDE, NOMDE)
  17. values (122, 10, 350, 'P', 6, 120, 'PROCESO DE DATOS')
  18. INSERT into TDEPTO (NUMDE, NUMCE, DIREC, TDIR, PRESU, DEPDE, NOMDE)
  19. values (130, 10, 310, 'P', 2, 100, 'FINANZAS')
  20.  
  21. -------------------------------ok
  22.  
  23. INSERT into TCENTR (NUMCE, NOMCE, SEÑAS) values (10, 'SEDE CENTRAL',
  24. 'C. ALCALA, 820 MADRID')
  25. INSERT into TCENTR (NUMCE, NOMCE, SEÑAS) values (20, 'RELACION CON
  26. CLIENTES', 'C. ATOCHA, 405, MADRID')
  27.                    
  28.       -------------------------------
  29.  
  30. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  31. NUMHI, NOMEM) values (110, 121, 350, 10/11/29, 15/02/50, 310,null, 3,
  32. 'PONS, CESAR')
  33. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  34. NUMHI, NOMEM) values (120, 12, 840, 09/06/35, 01/10/68, 350, 110, 1,
  35. 'LASA, MARIO')
  36. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  37. NUMHI, NOMEM) values (130, 112, 810, 09/09/45, 01/02/69, 290, 110, 2,
  38. 'TEROL, LUCIANO')
  39. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  40. NUMHI, NOMEM) values (150, 121, 340, 10/08/30, 15/01/48, 440,null, 0,
  41. 'PEREZ, JULIO')
  42. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  43. NUMHI, NOMEM) values (160, 111, 740, 09/07/39, 11/11/68, 310, 110, 2,
  44. 'AGUIRRE AUREO')
  45. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  46. NUMHI, NOMEM) values (180, 110, 508, 18/10/34, 18/03/56, 480, 50, 2,
  47. 'PEREZ, MARCOS')
  48. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  49. NUMHI, NOMEM) values (190, 121, 350, 12/05/32, 11/02/62, 300,null, 4,
  50. 'VEIGA, JULIANA')
  51. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  52. NUMHI, NOMEM) values (210, 100, 200, 28/09/40, 22/01/59, 380,null, 2,
  53. 'GALVEZ, PILAR')
  54. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  55. NUMHI, NOMEM) values (240, 111, 760, 26/02/42, 24/02/66, 280, 100, 3,
  56. 'SAENZ, LAVINIA')
  57. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  58. NUMHI, NOMEM) values (250, 100, 250, 27/10/46, 01/03/67, 450,null, 0,
  59. 'ALBA, ADRIANA')
  60. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  61. NUMHI, NOMEM) values (260, 100, 220, 03/12/43, 12/07/68, 720,null, 6,
  62. 'LOPEZ, ANTONIO')
  63. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  64. NUMHI, NOMEM) values (270, 112, 800, 21/05/45, 10/09/66, 380, 80, 3,
  65. 'GARCIA, OCTAVIO')
  66. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  67. NUMHI, NOMEM) values (280, 130, 410, 11/01/48, 08/10/71, 290,null, 5,
  68. 'FLOR, DOROTEA')
  69. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  70. NUMHI, NOMEM) values (285, 122, 620, 25/10/49, 15/02/68, 380,null, 0,
  71. 'POLO, OTILIA')
  72. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  73. NUMHI, NOMEM) values (290, 120, 910, 30/11/47, 14/02/68, 270,null, 3,
  74. 'GIL, GLORIA')
  75. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  76. NUMHI, NOMEM) values (310, 130, 480, 21/11/46, 15/01/71, 420,null, 0,
  77. 'GARCIA, AUGUSTO')
  78. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  79. NUMHI, NOMEM) values (320, 122, 620, 25/12/57, 05/02/78, 405,null, 2,
  80. 'SANZ, CORNELIO')
  81. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  82. NUMHI, NOMEM) values (330, 112, 850, 19/08/48, 01/03/72, 280, 90, 0,
  83. 'DIEZ, AMELIA')
  84. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  85. NUMHI, NOMEM) values (350, 122, 610, 13/04/49, 10/09/84, 450,null, 1,
  86. 'CAMPS, AURELIO')
  87. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  88. NUMHI, NOMEM) values (360, 111, 750, 29/10/58, 10/10/68, 250, 100, 2,
  89. 'LARA, DORINDA')
  90. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  91. NUMHI, NOMEM) values (370, 121, 360, 22/06/67, 20/01/87, 190,null, 1,
  92. 'RUIZ, FABIOLA')
  93. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  94. NUMHI, NOMEM) values (380, 112, 880, 30/03/68, 01/01/88, 180,null, 0,
  95. 'MARTIN, MICAELA')
  96. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  97. NUMHI, NOMEM) values (390, 110, 500, 19/02/66, 08/10/86, 215,null, 1,
  98. 'MORAN, CARMEN')
  99. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  100. NUMHI, NOMEM) values (400, 111, 780, 18/08/69, 01/11/87, 185,null, 0,
  101. 'LARA, LUCRECIA')
  102. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  103. NUMHI, NOMEM) values (410, 122, 660, 14/07/68, 13/10/88, 175,null, 0,
  104. 'MUÑOZ, AZUCENA')
  105. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  106. NUMHI, NOMEM) values (420, 130, 450, 22/10/66, 19/11/88, 400,null, 0,
  107. 'FIERRO, CLAUDIA')
  108. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  109. NUMHI, NOMEM) values (430, 122, 650, 26/20/67, 19/11/88, 210,null, 1,
  110. 'MORA, VALERIANA')
  111. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  112. NUMHI, NOMEM) values (440, 111, 760, 26/09/66, 28/02/86, 210, 100, 0,
  113. 'DURAN, LIVIA')
  114. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  115. NUMHI, NOMEM) values (450, 112, 880, 21/10/66, 28/02/86, 210, 100, 0,
  116. 'PEREZ, SABINA')
  117. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  118. NUMHI, NOMEM) values (480, 111, 760, 04/04/65, 28/02/86, 210, 100, 1,
  119. 'PINO, DIANA')
  120. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  121. NUMHI, NOMEM) values (490, 112, 880, 06/06/64, 01/01/88, 180, 100, 0,
  122. 'TORREZ, HORACIO')
  123. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  124. NUMHI, NOMEM) values (500, 111, 750, 08/10/65, 01/01/87, 200, 100, 0,
  125. 'VAZQUEZ, HONORIA')
  126. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  127. NUMHI, NOMEM) values (510, 110, 550, 04/05/66, 01/11/86, 200,null, 1,
  128. 'CAMPOZ, ROMULO')
  129. INSERT into TEMPLE (NUMEM, NUMDE, EXTEL, FECNA, FECIN, SALAR, COMIS,
  130. NUMHI, NOMEM) values (550, 111, 780, 10/01/70, 21/01/88, 100, 120, 0,
  131. 'SANTOS, RANCHO')  
  132.  
  133. ------------------ok
  134.  
De esta manera cuando corro los ejemplos en la máquina me quedan
exactamente los mismos resultados que en el libro. Todo iba bien hasta
el capitulo 16:inclusion de sentencias sql en programas.
Hasta ahora el libro no había especificado ningún SGBD y yo use MS-SQL
SERVER 7 y todo me había salido bien. Ahora tampoco especificaba ningún
compilador de C. Yo utilizo el Turbo C++ 3.1 de Borland. Hasta ahora no
he conseguido compilar el programa completo en C, que dan de ejemplo.
El programa es el siguiente:

Lo que yo hago es:
1)Primero activo el SGBD MS-SQL SERVER 7, observo que se carge en la
memoria.
2)Luego abró el programa sql.cpp(el programa en C) con Turbo c++ 3.1
Código: Text
  1. /*
  2. Librerías de Include que pueden variar dependiendo del compilador y
  3. precompilador
  4. */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9.  
  10.  
  11. #define NOTFOUND 100
  12.  
  13. /*
  14. FICHEROS DE E/S
  15. */
  16.  
  17. FILE *inciden;
  18.  
  19. FILE *datos;
  20.  
  21. FILE *report;
  22.  
  23. /*
  24. Estructuras de E/S
  25. */
  26.  
  27. /* inreg; registro de incidencias*/
  28.  
  29. struct {
  30. int num_emp;
  31. int codigo;
  32. } inreg;
  33.  
  34. /* regsal: Report de salida */
  35.  
  36. struct {
  37. int numero;
  38. char fill[8];
  39. char text[71];
  40. } resal;
  41.  
  42. static char format1[]="%3u1%un";
  43. static char format2[]="%3u%3u%8s%3u%1u%2u%20sn";
  44. static char format3[]="%3u%7s%7Os%n";
  45.  
  46. EXEC SQL INCLUDE SQLCA;
  47.  
  48. /*Tabla de empleados*/
  49.  
  50. EXEC SQL DECLARE TEMPLE TABLE
  51.       (NUMEM INTEGER NOT NULL,
  52.        NUMDE INTEGER NOT NULL,
  53.        EXTEL SMALLINT NOT NULL,
  54.        FECNA DATE     NOT NULL,
  55.        FECIN DATE     NOT NULL,
  56.        SALAR DECIMAL (5,0) NOT NULL,
  57.        COMIS DECIMAL (5,0),
  58.        NUMHI SMALLINT      NOT NULL,
  59.        NOMEM VARCHAR(20)   NOT NULL);
  60.  
  61. /* Dentro de la declare Section se incluirán todos
  62. los campos necesarios para las sentencias SQL.
  63. Son los que se leerán del fichero de datos.
  64. */
  65.  
  66. EXEC SQL BEGIN DECLARE SECTION;
  67.  
  68. int numen;
  69. int numde;
  70. char fecha[9];
  71. int salar;
  72. int numhi;
  73. struct {
  74. short int nombrel;
  75. char nombrev[21];
  76.  
  77. } nomem;
  78.  
  79. EXEC SQL END DECLARE SECTION;
  80.  
  81. EXEC SQL WHENEVER SQLERROR GOTO TERROR;
  82. EXCEC SQL WHENEVER SQLWARNING CONTINUE;
  83.  
  84. /*Main function*/
  85.  
  86. main()
  87. {
  88. inciden =fopen("DD:FICHIN,"r,recfm=F,recl=4");
  89. datos =fopen("DD:FICHD,"r,recfm=F,recl=40");
  90. report =fopen("DD:REPORT","W");
  91.  
  92. while (!feof(inciden))
  93.    {
  94.    fsanf(inciden,format1, inreg.num-emp,inreg.codigo);
  95.    numem=inreg.num_emp;
  96.    if(inreg.codigo==1)
  97.        {
  98.        EXEC SQL
  99.        DELETE FROM TABLE
  100.        WHERE NUMEM=:numem;
  101.        if(SQLCODE=100)
  102.            {
  103.            strcpy("NO EXISTE EN
  104. TEMPLE",regsal.text);
  105.            }
  106.      else
  107.            {
  108.            strcpy("CAUSA BAJA EN LA
  109. EMPRESA",regsal.text);
  110.            }
  111.        }
  112.        else       {
  113.       fscaf (datos, format2, numem,
  114.                    
  115.          numde,
  116.                    
  117.          fecna,
  118.                    
  119.          salar,
  120.                    
  121.          numhi,
  122.                    
  123.          nombrel,
  124.                    
  125.          nombrev,);
  126.       EXECSQL
  127.       INSERT INTO TEMPLE
  128.       VALUES (:numem,
  129.             :numde;
  130.             0,
  131.             :fecna,
  132.             CURRENT DATE,
  133.             :salar,
  134.             NULL,
  135.             :numhi,
  136.             :nombre);
  137.                  
  138. strcpy("CAUSA ALTA EN LA EMPRESA", regsal.text);
  139.  
  140.       }  
  141.    
  142.    fprinf (report, format3, regsal.numero,
  143.                    
  144.         regsal.fill,
  145.                    
  146.         regsal.text);
  147.                    
  148.          
  149.                    
  150.            }//Fin del while
  151.         fclose(inciden);
  152. fclose(datos);
  153. fclose(report);
  154.  
  155. TERROR:
  156.    sql_err()
  157. }
  158.  
  159. /*****Final del Main****/
  160.  
  161.  
  162.  
  163. sql_err()
  164. {
  165. if(SQLCODE= -803)
  166.    {
  167.    strcpy("EMPLEADO YA EXISTENTE", regsal.text);
  168.    }
  169. else
  170.     {
  171.     strcpy("ERROR SQL AL PROCESAR EMPLEADO", regsal.text);
  172.     }
  173.     fprinf (report, format3, resal.numero,
  174.                    
  175.      resal.fill,
  176.                    
  177.      resal.text);
  178. fclose(inciden);
  179. fclose(datos);
  180. fclose(report);
  181. }                  
  182.      
  183.  
  184.  
  185.  
Haga lo que haga el programa no me compila.Estuve investigando por la
red y dicen que el Turbo c++ no puede trabajar con bases de datos. Yo
he usado este compilador desde hace bastante tiempo y con el he hecho
de todo: juegos, animaciones, reproductores de sonido, editores de
texto y mucho más, se podría decir que le he tomado cariño ha esta
herramienta.
Antes de pasarme a un compilador de C mas "moderno" como visual c++ o
Dev-c++, me gustaría sacarme esta duda: ¿Realmente es imposible que el
Turbo c++ trabaje con bases de datos? ¿No hay alguna librería,archivo
de cabecera ,suplemento o "truco" que me pueda descargar para que las
admita?¿Si quiero trabajar con bases de datos en C, realmente tengo que
dejar este compilador?
PD: bueno eso es todo, muchas gracias por la atención

5
C/C++ / Diferencia entre BC y TC
« en: Domingo 26 de Octubre de 2008, 13:14 »
Hola, ¿Qué tal?, aquí estoy de nuevo, esta vez con una duda de de C++. Me baje hacer poco los compiladores Borland c++ 3.1 y Turbo c++ 3.1 y a mí me parecen iguales, ¿Cual es la diferencia entre ellos?

También estoy buscando alguna librería que me permita trabajar con bases de datos, usando estos compiladores, ¿Ustedes conocen alguna? Resulta que hace poco conseguí el libro "SQL para usuarios y programadores, cuarta edición 1998" y en la Pág. 187 explica como conectar un programa escrito en lenguaje C con una base de datos:

Código: Text
  1. #include <stdiol.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define     NOTFOUND 100
  6.  
  7. //Página 187
  8.  
  9. EXEC SQL INCLUDE SQLCA
  10.  
  11. /*Declaración de la tabla TEMPLE de los ejemplos*/
  12.  
  13. EXEC SQL DECLARE TEMPLE TABLE
  14.          (NUMEM INTEGER NOT NULL,
  15.           NUMDE INTEGER NOT NULL,
  16.           EXTEL SMALLINT NOT NULL,
  17.           FECNA DATE     NOT NULL,
  18.           FECIN DATE     NOT NULL,
  19.           SALAR DECIMAL (5,0) NOT NULL,
  20.           COMIS DECIMAL (5,0),
  21.           NUMHI SMALLINT      NOT NULL,
  22.           NOMEM VARCHAR(20)   NOT NULL);
  23.          
  24. void main ()
  25.  
  26. {
  27.  
  28. }
  29.  
  30.  
Pero cuando lo trato de compilar el programa no me reconoce ninguna sentencia ¿Alguien sabe que compilador de C, estaban usando en ese libro?¿O algún ejemplo de conexión a base de datos con el Borland c++ o el Turbo c++?

Bueno muchísimas gracias por su atención.

6
ASM (Ensamblador) / Re: Assembler inline
« en: Sábado 25 de Octubre de 2008, 14:59 »
Muchas gracias por su respuesta. Creo que ya lo tengo el color de un píxel en este modo va de 0-255, si yo quiero poner toda la pantalla de blanco (63d  11111111b)

Entonces le paso como parámetro la dirección de la memoria de video A000:0000 que va en el parámetro Where tamaño Word y el color deseado Col 11111111b que es blanco de tamaño byte

Primero guardo el contenido de es, luego pongo 16000 en cx por que es el número de repeticiones que voy a hacer con rep stosd por que con cada pasada voy a dibujar con píxeles de color blanco. Luego es recibe la dirección de la memoria de video, di se coloca a cero, por que los bytes se van a copiar desde eax que tiene 4 bytes a ES:E(DI), para que comience desde cero. El color elegido va del Col a al y de al a ah, luego se salva ax en dx como dato temporal y luego los valores de al y ah se desplazan 16 lugares a la izquierda para que cuando se copia el valor de dx a ax que el color blanco (11111111b) 4 veces, en los 4 bytes de eax. Luego de realizada la acción E(DI) es incrementado en 4 (doble palabra) para continuar con los próximos 4 bytes de la memoria de video, y al final se recupera el valor de es y la pantalla queda con el color seleccionado en este caso blanco. Muchas gracias a todos por sus comentarios, no lo hubiera sacado nunca sin su ayuda.

También encontré estos enlaces de referencia si les interesa.

investigacion.frc.utn.edu.ar/labsis/Publicaciones/InvesDes/3deng/Intro/13h.htm

ing.unlpam.edu.ar/~material/arquitectura/Arquitectura-PC-dos.html

paginespersonals.upcnet.es/~rvm1/e_graf.html



Procedure fill64k (Where:word;Col : Byte); assembler;
asm
   push    es
   mov     cx, 16000;
   mov     es,[where]
   xor     di,di
   mov     al,[col]
   mov     ah,al
   mov     dx, ax
   db      $66, $C1, $E0, $10         {shl eax, 16}
   mov     ax, dx
   db      $F3, $66, $AB              {rep stosd}     {vivan los 32 Bits :)}
   pop     es
End;

7
ASM (Ensamblador) / Assembler inline
« en: Viernes 24 de Octubre de 2008, 20:18 »
Hola, ¿Cómo están todos? (espero que bien ), yo por mi parte me encuentro muy bien y sigo estudiando distintas rutinas de ensamblador orientadas a la programación gráfica.

En realidad el código que estoy estudiando en un Assembly inline, ósea que esta embebido en Turbo Pascal, pero igual me funciona muy bien a la hora de optimizar ciertos códigos.

Les escribo por que quería consultarles sobre una determinada rutina, la cual creo haber entendido en su mayoría:

Rutina de borrado.
La rutina de borrado lo que hace es rellenar un segmento de la memoria con un byte especificado (del 0 - 255), si rellenamos con el byte 0 y este representa el color negro 'borraremos' la pantalla con el color 0, si borramos con el byte 25 y este representa el color naranja, 'borraremos' la pantalla con el color naranja. Esta rutina también debe estar optimizada al máximo ya que se realiza muchas veces por ciclo. También se usan registros de 32 bits:

  -rutina de borrado en ensamblador:

Código: Text
  1.  
  2. PROCEDURE Fill64k (Where:word;Col : Byte); assembler;
  3. asm
  4.     push    es
  5.     mov     cx, 16000;
  6.     mov     es,[where]
  7.     xor     di,di
  8.     mov     al,[col]
  9.     mov     ah,al
  10.     mov     dx, ax
  11.     db      $66, $C1, $E0, $10   {shl eax, 16}
  12.     mov     ax, dx
  13.     db      $F3, $66, $AB          {rep stosd}
  14.     pop     es
  15. End;
  16.  
  17.  

Lo que quiero preguntar es:

1)Por qué en la linea 11
db      $66, $C1, $E0, $10   {shl eax, 16}

No coloca directamente shl eax, 16 ¿Es por que esas instrucciones no existen en el Assembly Inline de Turbo Pascal y tiene que usar los prefijos para que el procesador lo entienda?

2)En las lineas 10 y 12:
mov     dx, ax

mov     ax, dx

No comprendo que trabajo realizan, ¿Para que sirven?

Bueno eso es todo, muchas gracias por leer mi mensaje.

Les dejo estos sitios de interes:

geocities.com/SiliconValley/code/2632/ Programación de videojuegos en Turbo Pascal

ftp.lanet.lv/ftp/mirror/x2ftp/msdos/programming/source/00index.html Un excelente sitio con mucho código fuente

8
ASM (Ensamblador) / Re: Rutina de copiado.
« en: Martes 21 de Octubre de 2008, 15:29 »
Ahhh. ahora ya lo entiendo, muchas gracias por su respuesta. Para mostrar mi gratitud les dejo esta excelente página con fuentes de assembler

asmsource.8k.com

PD:suerte.

9
ASM (Ensamblador) / Re: Rutina de copiado.
« en: Martes 21 de Octubre de 2008, 14:35 »
Muchas gracias por sus respuestas. Si no les importa, les podría preguntar ¿Para que es necesario que SI y DI tengan valor cero?

10
ASM (Ensamblador) / Rutina de copiado.
« en: Lunes 20 de Octubre de 2008, 15:32 »
Hola ¿Que tal?,  yo soy 123celes y soy nuevo en el foro. Hace no mucho empecé a internarme en la programación, sobre todo la de los video juegos. Empecé a estudiar el lenguaje ensamblador y cada vez aprendo un poquito más.

Donde mostraban distintas rutinas en ensamblador para optimizar la programación gráfica, concretamente la que no comprendo es la de Copy64K. La  parte que no comprendo es esta: las líneas que dicen

xor  di,di
xor  si,si
mov  cx,16000
db   66h;rep movsw

¿Que trabajo hacen estas líneas, para que sirven?

PROCEDURE Copy64K  (SegOrg,SegDes:Word);assembler;
Asm
    push ds
    mov  ax,SegOrg
    mov  ds,ax
    mov  ax,SegDes
    mov  es,ax
    xor  di,di
    xor  si,si
    mov  cx,16000
    db   66h;rep movsw
    pop  ds
End;


PD: desde ya muchas gracias por su atención

11
Pascal / Re: Texto en modo gráfico
« en: Sábado 18 de Octubre de 2008, 16:37 »
Muchas gracias por tu respuesta, me sirvió de mucho. Una cosa más si no es molestia:

PROCEDURE WriteTXT(segm,x,y:word;txt:string;color:byte);
VAR i,j,k:byte;
Begin
 for i:=1 to length(txt) do
  for j:=0 to 15 do   {horiz}
    for k:=0 to 7 do {vert}

     if ((mem[fseg:fofs+ord(txt)*16+j] shl k) and 128) > 0 then
        begin
          mem[segm:(y+j)*320+(i*8)+x+k]:=color;
        end;
End;

En la linea que resalte en negrita. Concretamente que esta preguntando:

Lo que me confunde es el and 128, ¿Que hace?

¿comparar el shl k del mem... con el shl k de 128:?

Bueno muchas gracias la respuesta.

12
Pascal / Texto en modo gráfico
« en: Jueves 16 de Octubre de 2008, 15:09 »
Hola, ¿Qué tal?, les escribo para preguntarles sobre una rutina en Turbo Pascal que permite escribir texto en modo gráfico



PROCEDURE WriteTXT(segm,x,y:word;txt:string;color:byte);
VAR i,j,k:byte;
Begin
for i:=1 to length(txt) do
for j:=0 to 15 do
for k:=0 to 7 do

if ((mem[fseg:fofs+ord(txt)*16+j] shl k) and 128) > 0 then
begin
mem[segm:(y+j)*320+(i*8)+x+k]:=color;
end;
End;

fseg,fofs:word; {para la fuente grafica}

Me podrían explicar por favor ¿Qué hace cada linea?, muchas gracias.

Páginas: [1]