[ Foro para dudas y novedades ]

Programa para micro empresa

02-Aug-2006 17:54
Eduardo Hiram Aguirre
16 Respuestas

Tengo un problema, espero y me puedan ayudar.Yo soy un alumno del CBTis 225 en León Gto. Estoy en la carrera de computación y aprendi a programar en c++. Sabiendo esto comence un proyecto para la empresa de mis papas, se trata de un programa para el control de las entradas y salidas de productos de limpieza, así como un registro de nuestras vendedoras, y un control de materias primas. Necesito que me puedan guiar ene sto porque algo que he estado investigando es acerca de como saco y comparo de una base de datos, pues yo no se hacer eso de relacionar con bases de datos. Espero y me puedan ayudar.
03-Aug-2006 19:48
Nacho Cabanes (+84)

Buena pregunta!  ;-)

Es que lo que pides no es fácil. Pero no en el sentido de que sea difícil, sino de que no hay un estándar claro. Tienes que elegir un motor de bases de datos que vayas a utilizar, un compilador que sea capaz de acceder a ese motor de bases de datos, y aprender cómo se relacionan el uno con el otro.

Lo habitual es que desde tu programa en C++ puedas hacer una consulta a la base de datos, usando SQL. Recibirás como respuesta un "cursor", un bloque de información (un conjunto de "fichas") que cumple la condición que tú has pedido y por el que te puedes mover hacia delante y hacia atrás.

Pero insisto, la sintaxis exacta depende del compilador que utilices, de la base de datos que emplees, y de cómo se comuniquen entre ellos. Yo eso desde C++ lo hice con alguna de las primeras versiones de Borland C++ Builder, usndo su motor de bases de datos incorporado (Paradox Engine), pero lo que te pudiera contar sobre ese entorno quizá no te sirva de nada si no tienes acceso a él.

Es posible que más adelante dé un curso en esta misma web sobre Visual C++, y entonces puede que llegara a tratar algo sobre acceso a bases de datos con ese entorno, pero ahora mis prioridades son el curso de Java y el de PHP, que son los que más interés han despertado entre mis alumnos presenciales.


05-Aug-2006 13:36
Cog Swapero

Y con c podemos acceder a bases de datos?? o nuestras bases de datos son los ficheros?

cc+ son objetos no?
php son funciones, como c?

Pregunto!!¿?
En c no se puede usar phpmyadmin, o si ? va ser que no...
Y cual es el gestor de bbdd de c++ ? Y el de Java?

Pregunto por que si no son muchas las aplicaciones que gestionan la base de datos, se puede hacer una lista... con las consultas habituales... dices..


Lo habitual es que desde tu programa en C++ puedas hacer una consulta a la base de datos, usando SQL. Recibirás como respuesta un "cursor", un bloque de información (un conjunto de "fichas") que cumple la condición que tú has pedido y por el que te puedes mover hacia delante y hacia atrás.

Deduzco que es una simple conversación, preguntas y respuestas no?

Hay muchas preguntas? Y muchas respuestas?

Pues nada, una lista que preguntas y respuestas con todas las aplicaciones :)

05-Aug-2006 19:55
Nacho Cabanes (+84)

Como la pregunta es larga y abarca varias cosas, te respondo por partes, esperando que así sea más fácil de seguir...  ;-)
05-Aug-2006 20:03
Nacho Cabanes (+84)

En general, se podría considerar que un fichero es un único bloque de información, que se guarda como un conjunto.

Una base de datos va más allá: en general serán varios conjuntos de información (que se llaman tablas) y que están relacionados entre ellos.

De modo que se podría considerar que los ficheros que hemos manejado durante el curso eran pequeñas bases de datos. Una base de datos real para una empresa suele contener mucha más información. Bloques de información típicos serían: datos de clientes, de proveedores, de productos que se suministran, de facturas, de albaranes de entrega...

En la práctica, según el motor de bases de datos que se emplee, toda la información se puede guardar en un único fichero (como hace Access) o en varios ficheros (lo que hacen la mayoría).

En cualquier caso, se suele tratar de algo mucho más complejo que un único fichero sencillo como los quehemos manejado durante el curso, y no suele bastar con órdenes sencillas como "fseek" y "fgets".

(Todo esto lo vereis con más detalle en segundo año, en la asignatura de Bases de Datos).

05-Aug-2006 20:32
Nacho Cabanes (+84)

Para acceder a bases de datos desde lenguajes de alto nivel (como C, C++, Pascal o Java), lo habitual suele ser lo siguiente:

  • Usar una estructura de 3 capas:
  • En el nivel más bajo (físico) está la base de datos en sí, creada con cualquier gestor comercial, como Access, MySQL, PostgreSQL, Oracle, Informix, Ms SQL Server, Paradox...
  • En el nivel más alto está el programa que interacciona con el usuario, que le pide los datos, comprueba que lo que ha introducido es correcto, busca la información y muestra los resultados. Este programa se suele crear con lenguajes de alto nivel (C, C++, Pascal, Java, ...)
  • Entre medias, suele haber la capa que proporciona a ese lenguaje concreto las órdenes para acceder a esa base de datos concreta (en Windows suele ser los controladores ODBC). Esta capa se encarga de que no necesitemos saber las diferencias internas de cada base de datos, sino que usemos una misma órden para cualquiera. Tendremos órdenes para hacer una consulta (generalmente usando SQL), ir a la primera ficha, a la última, a la que tenga un cierto número o un cierto valor en la "clave principal"...  Por ejemplo, con C++ Builder, la orden ExecuteQuery pone en marcha una consulta SQL, independientemente de si la base de datos que estamos consultando es Access, Paradox o MySQL.
Para asentar conceptos: Un ejemplo de programa en "lenguaje inventado" que accediera a una base de datos podría ser algo así

MiBaseDeDatos = ConectarConBaseDeDatos "empresa.mdb"
MiConsulta = MiBaseDeDatos.EjecutarConsulta ("SELECT * FROM CLIENTES")

MiConsulta.IrAPrimeraFicha;
Nombre = MiConsulta.LeerCampo("NombreCliente")
EscribirEnPantalla (Nombre)

MiConsulta.SegundaFicha
SuCasa = MiConsulta.LeerCampo("Domicilio")
EscribirEnPantalla (SuCasa)

MiConsulta.IrAFicha(23)
Nombre = MiConsulta.LeerCampo("NombreCliente")
EscribirEnPantalla (Nombre)

MiConsulta.BuscarFicha("Juan Lopez")
SuCasa = MiConsulta.LeerCampo("Domicilio")
EscribirEnPantalla (SuCasa)

MiConsulta.EscribirFicha("Telefono", "222 333 444")
MiConsulta.GuardarDatos
...

05-Aug-2006 20:42
Nacho Cabanes (+84)

Decir eso es un poco simplista.  Un programa en C++ sencillo también está formado por funciones.

Lo que ocurre es que en lenguajes como C, cuando un programa se hace grande, sólo tienes dos opciones:
  • Dejar que siga siendo cada vez más grande.
  • Partir de forma "casi arbitraria", metiendo ciertas funciones en un fichero .c y otras en otro fichero.


En cambio, en lenguajes orientados a objetos, como C++ o Java, las cosas son distintas desde el momento del diseño: tienes que ver tu programa como una serie de objetos que interaccionan (usuario, formulario, menú, botón, base de datos) y está claro (o debería estarlo) cual es la misión de cada uno de esos objetos, con lo que es mucho más fácil repartir el trabajo, controlar que cada parte hace lo que debe, buscar y solucionar errores, etc.

Pero insisto: las diferencias se notan en programas GRANDES (miles de líneas). Para un programa de 200 líneas no se llega a usar nada de objetos que ahorre trabajo... o casi, salvo por el hecho de que puedas "heredar" cosas que ya están hechas. Y en un programa de 15 líneas... menos todavía  ;-)

En el caso de PHP, tienes disponibles ciertos objetos para tu uso, con los que puedes interactuar, como el navegador, pero no es un lenguaje orientado a objetos.


05-Aug-2006 21:00
Nacho Cabanes (+84)

Ahora aquí respondo al resto de curiosidades "pequeñas" ;-)

> En c no se puede usar phpmyadmin, o si ? va ser que no...

Espero que ahora esté más claro. PhpMyAdmin administra la base de datos, con la ayuda de PHP. El que luego tú accedas a esa base de datos desde C, C++, Java, PHP, Delphi o la herramienta que quieras para hacer las consultas, es cosa tuya.

> Y cual es el gestor de bbdd de c++ ? Y el de Java?

Idem. Casi cualquier base de datos se podría llegar a usar desde C++ y desde Java si existiera la capa intermedia necesaria. Y hay muchas capas intermedias, los propios fabricantes de bases de datos (o la comunidad open-source) se suelen encargar de crearlas.

> Pregunto por que si no son muchas las aplicaciones
> que gestionan la base de datos, se puede hacer una
> lista... con las consultas habituales... dices..

Así es. A la hora de la verdad, para cada aplicación "real" las consultas suelen ser casi las mismas. Por ejemplo, un administrador de un foro podría querer saber el número total de posts, los posts de un usuario, cual es el tema de que más se ha hablado, etc. Puedes tener 20 consultas preparadas y eso cubre todo tu uso básico. Lo más que se hace es que alguna tenga parámetro. Por ejemplo, algo como

EjecutarConsulta("SELECT COUNT * FROM POSTS WHERE NOMBRE=" + NombreRemitente);

Según el valor de la variable NombreRemitente, verías el total de posts de un usuario u otro.

> Deduzco que es una simple conversación, preguntas y respuestas no?

Sí, básicamente sí. Las preguntas se las pasas a través de una orden, normalmente usando SQL, y las respuestas las recibes en forma de lista, a través de la que te puedes desplazar.



07-Aug-2006 00:59
Cog Swapero

En la práctica, según el motor de bases de datos que se emplee, toda la información se puede guardar en un único fichero (como hace Access) o en varios ficheros (lo que hacen la mayoría).

Deduzco pues que accediendo a varios ficheros ¿mas pequeños? reducirá el consumo... no?

07-Aug-2006 01:15
Cog Swapero

Tengo un pequeño lio entre la capa física e intermedia, las veo muy parecidas... PHPMyAdmin donde estaría? capa fisica no? pero tienes esas órdenes que sirven para muchas bbdd... no?

?-)

07-Aug-2006 01:17
Nacho Cabanes (+84)

PhpMyAdmin está en la capa de aplicación:

a) Es un programa, que te permite hacer ciertas cosas con tu base de datos.

b) En general, casi ningún programa accede directamente a la capa física, casi todos usan esa capa intermedia, por simplicidad, aunque "tú no lo notes".


07-Aug-2006 01:18
Nacho Cabanes (+84)

Define "consumo" ;-)

Suele ser más eficiente usar varios ficheros: más rápido para leer y escribir, y sobre todo mucho más rápido cuando se añaden muchos datos, porque no hay que redimensionar un fichero enorme cada dos por tres.

Pero Access es una base de datos "de consumo" ("no profesional"). No pretende ser la más rápida, sino otras cosas, como que sea fácil hacer copias de seguridad.


07-Aug-2006 01:22
Cog Swapero

Nada que objetar... bueno si, lo de simplista...

Un simplista es el que que simplificar? pues si...
pero solo si es para mejorar ;)



07-Aug-2006 01:28
Nacho Cabanes (+84)

No, con lo de "simplista" me refiero a que es simplificar demasiado. Las diferencias son tantas que es difícil resumirlo en sólo 4 palabras. De hecho, con C++ se puede hacer un programa sin usar nada de orientación a objetos.

Por eso digo que lo de "C++ = objetos, PHP = funciones" es demasiado "simplificador", deja muchas cosas en el tintero.


07-Aug-2006 01:29
Cog Swapero

Tema delicado el de los backups... pero no creo necesitar a Bill para realizarlos e invertir más en hard que permita un "consumo" mayor...

Vamos que si, que mejor repartidito en varias funciones



simplista

07-Aug-2006 01:32
Cog Swapero

De momento no llego a más...


... pero tengo 21 años :)

Buenas noches....


07-Aug-2006 15:36
Nacho Cabanes (+84)

Llegarás a más risa


Aun así, con lo de simplista no me refería a ti (obviamente), sino a la afirmación, a eso de "C++ = objetos, PHP = funciones", que es simplificar demasiado.

De hecho, si afinamos un poco más... PHP versión 4 no permite programación orientada a objetos... ¡ pero PHP5 sí !  (aunque no creo que nuestro curso, que es introductorio, lleguemos a entrar con detalles de orientación a objetos en PHP).

Ten en cuenta que las afirmaciones tan radicales en informática tienen mucho riesgo de quedarse cojas ;-)








(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)