![]() |
restar entre 2 tablas de mysql y mostrar en reporte
que hay amigos traigo un problemilla, resulta que estoy haciendo un proyecto de entradas y salidas y guardo los datos en mysql, hasta ahi todo bien lo que quiero hacer es hacer una consulta, por ejemplo hay un producto de codigo x ese producto tuvo 5 entradas y esta en la tabla entradas y ese mismo producto tuvo 3 salidas y esta en la tabla salidas eso quiere decir que de existencia tengo 2 del codigo x, entonces quiero que me reste los que son del mismo codigo de la tabla entradas y salidas y mostrar el resultado en un Tquickreport ojala alguien pueda orientarme
|
Hola
Es una resta de dos campos a dos tablas, pero sin saber los campos es dificil adivinar. Saludos |
tienes toda la razon omiti informacion importante jeje mira entradas y salidas tienen los mismos campos que son
codigo nombre unidad cantidad precio importe entonces mas o ,menos lo que necesito es de cada codigo sumar cantidad de cada tabala y restarlo y mostrar en el reporte (Tquickreport) codigo, nombre y existencia esta ultima la cual es el resultado de la resta |
Y además de lo que comenta Caral, la segunda parte de la pregunta no tiene nada que ver con la primera, sacar un informe no tiene nada que ver con hacer un cálculo entre tablas, deberías de separar las preguntas en hilos distintos.
|
ok entones la que me interesa ahorita es la de sacar la resta de las 2 tablas si me pueden echar la mano en eso se los agradeceria ya lo del reporte veo si puedo ajustarlo si no pues abro otro hilo
|
Cita:
Código:
codigo |
Hola
despues en el reporte colocas un qrdb y haces la resta a ojo, no se si funcione. Saludos |
pues asi estructure mi programa como se lleva un control por folio en numero consecutico de cada entrada y salida por eso de hacerlo en 2 tablas, y de la manera como me dices amigo caral me marca error se sintaxis
|
Hola
Yo en sql soy muy malo, lo que hago es sencillo. Tengo una copia de mi BD en access el cual tiene un generador de consultas sql muy bueno. Creo la consulta en access y luego la paso a firebird, con los cambios que necesite. De mysql a access se puede pasar muy facilmente y ahi puedes crear las consultas muy sencillamente. Saludos |
Hola
Mira tu consulta creada por access: De que funciona funciona.:D Saludos |
ok gracias por tu respuesta tratare de implementarlo de esa manera a ver que tal me va
|
hola
volviendo de nuevo por aqui lo implemente como me dijiste pero me marca un error que dice 'tablename must be defined' |
Hola
Deberias poner aqui la sentencia sql que hiciste para ver si hay algun error Saludos |
ok mira el resultado lo quiero mostrar en un dbgrid y la forma que lo utilice fue la siguiente:
procedure TForm12.Button1Click(Sender: TObject); begin
|
lo puse directamente en un query en un programa que se llama sqlyog y si me da resultado pero mal tengo 3 entradas y 2 salidas y deberia de dar 1 colmo resultado y me esta arrojando 0
|
Hola
La sentencia esta bien, estas seguro que el nombre de las tablas es Entradas y Salidas, ademas del nombre de los campos ?.
Saludos |
si totalmente seguro que son los nombres correctos, y esa sentencia la ejecuto en un programa que se llama sqlyog y si me arroja el resultado pero mal tengo 3 entradas y 2 salidas y me pone resultado 0
|
Hola
Veamos a ver si me entero: Para mi las entradas y las salidas estan en el campo cantidad en las dos tablas, es eso lo que necesitas o es otra cosa ?. Saludos |
mira tengo 3 tablas una es productos en la cual se da de alta el producto, otra es entradas aqui se van agregando los productos que entran a la tienda por codigo y la tercer tabla es salidas las cuales se van metiendo cuando sale un producto de la tienda mi finalidad es que si tengo entradas de un producto por asi decirlo 3 ahi tengo en existencia 3 pero en cuanto entre una salida debo de tener en existencia 2.
me imagino que se tiene que restar el campo cantidad de todos los codigos iguales entres las 2 tablas(entradas y salidas), practicamente es un programa de inventario |
Hola
El codogo que te di deberia restar la suma del campo cantidad de la tabla entradas con la suma del campo camtidad de la tabla salidas. Si por cada entrada de producto la cantidad es uno y lo mismo pasa en la tabal salidas el total sera cero, eso es seguro. Ahora si es asi lo que necesitarias es simplemente sumar la cantidad de registros, asi si te dara la cantidad de entradas y salidas. Me sigue pareciendo que la opcion logica es poner un campo existencias en la tabla productos y hacer un sencillo update por cada entrada y salida. saludos Edito: Deberias ver si el te esta restando la totalidad si es asi se necesitaria generar una condicion a la sentencia sql |
pues mira ya ando un poco perdido si me pudieras ayudar para implementarlo de esa forma agregando un campo existencias en mi tabla productos y de como puedo hacerle te lo agradeceria mucho
|
Hola
Simplemente agrega el campo existencias a la tabla productos. coloca aqui el codigo que usas para hacer una entrada o una salida y te pongo un ejemplo. Pon tambien los campos de la tabla productos para estar mas seguro. Saludos PD: Ponle a un producto determinado (como prueba) una existencia X para que veas como se hace el update. |
a ver si me explico de otro form voy metiendo los datos en un dbgrid de la siguiente forma
ya que tengo las entradas que voy a meter en mi base de datos por medio de un boton guardar que tiene el siguiente codigo los mando a la base de datos:
los campos de mi tabla productos son: codigo, nombre, fecha,precio, status, fec_baja, unidad, cantidad, id, existencias |
Hola
Tienes un boton en el que aplicas el update del dataset. No se que componente usas para conectarte pero digamos que es un query normal. Coloca un query (del componente que uses) lo conectas a la bd y pones este codigo en el boton del update. Primero cuentas o sumas el dato del campo cantidad de la tabla entradas, lo guardas en una variable: Despues generas el update de la tabla productos del campo existencias. Espero que lo entiendas.^\||/ Saludos |
me marca este error [DCC Error] Unit4.pas(248): E2250 There is no overloaded version of 'FloatToStr' that can be called with these arguments
en esta linea dato:= FloatToStr(Query1.Fields[0].Text); |
Hola
Puede ser: 1- que el campo cantidad sea integer y no float en tu tabla. de ser asi, cambia estas lineas: y esta:
2- puede ser al reves si el campo en la tabla es float: cambialo asi:
Saludos |
Cita:
Pero, por otro lado, dado que, al parecer, quieres el valor en formato de texto, entonces ni siquiera tienes que usar FloatToStr y simplemente pones:
// Saludos |
efectivamente ese era mi error ya se pudo ejecutar el programa y no marca error pero no actualiza el campo de existencias no se si me este faltando algo en el componente
|
ya logre hacer que me afecte inventarios pero hay nu detalle, si meto una entrada con cantidad de 5 en existencias me aparecen 5 ahi todo bien
pero si con ese mismo codigo agrego otra entrada con cantidad 1 deberia de dejarme en existencias 6 pero me vuelve a sumar los 5 que tenia en un principio y me aparece 11 |
Hola
Declara al principio del codiigo: Dato:= 0; Asi la variable se iniciara siempre en cero. Saludos |
pues no amigo sigue en las mismas por ejemplo si tengo un un folio con varios registros ya guardados y ese folio lo vuelvo a abrir en un dbgrid para agregar otro registro me vuelve a actualizar los codigos que estan ahi
|
Hola
No entiendo, creo que el problema es que guardas varios productos a la vez, osea, vas cargando los productos en el dbgrid y luego los guardas. me parece que para que el codigo de actualización sea eficiente tiene que estar en el codigo que guarda cada item. Saludos |
tratare de explicar mi codigo a ver si me doy a entender, en un form tengo varios edit los cuales voy llenando con los datos(codigo, nombre, precio, etc) ahi con un boton lo envio a otro edit donde tengo un dbgrid entonces se agrega el primer registro y asi puedo agregar todos los registros que necesite pero solo estande manera temporal ya que uso un clientdataset, ya que quiero guardarlo utilizo un boton que uso con solo el codigo clientdataset1.ApplyUpdates(0); y todos esos registros se guardan con un folio por decir 2, si ya despues me doy cuenta que me falto agregar otro registro con ese nuemro de folio lo vuelvo a mostrar en el dbgrid con todosl los registrs que tienen ese folio lo agrego y otra vez le doy en guardar pero solo me guarda el ultimo codigo que agregue, y con lo que estamnos haciendo ahorita me vuelve a sumar todas las cantidades, no se si abra otra manera de intentarlo
|
Hola
Te voy a explicar como se hace normalmente un sistema de inventario. Se tienen: 1 tabla productos 1 tabla transacciones. En la tabla productos se tiene un campo existencias y los datos del producto en la tabla transacciones se tiene un campo que define si es entrada (E) o salida (S) y la fecha de la transaccion. Es muy sencillo llevar estas dos tablas. Al tener el concepto que llevas te complicas mas de la cuenta sin sentido. Estructurar esto es muy sencillo, casi lo tienes listo. saludos |
si entiendo lo que me quieres decir pero mi problema esta en que tengo que llevar entradas en una tabla y salidas en otra porque van ordenadas por un folio consecutivo por eso no utilizo una tabla, e ahi por que me estoy complicando la existencia pero me imagino que si debe de haber solucion a mi problema aunque este complicado
|
Hola
Cual es el problema en llevar un folio consecutivo de entradas y otro de salidas en una sola tabla ?. Saludos |
pues necesito un folio 1 para entradas y un folio 1 para salidas y aunque si se puede como que se me hizo mas revuelto pero al no a ver solucion a como lo quiero hacer creo que tratare de implementarlo de esa manera aunque tendre que cambiar gran parte de mi diseño
|
Hola
Dame un tiempo, voy a hacerte un ejemplo con access, pero con sql normal para que lo puedas aplicar a tu sistema. Eso si, dame un rato. Saludos |
Hola
Viendo el tutorial de facturacion que puse en delphiaccess la parte de factura es muy similar a lo que quieres hacer, solo se tendrian que hacer muy pequeñas modificaciones. AQUI esta el archivo para que lo descargues, veas y me digas tus dudas. Saludos PD: Revisa el form factura. |
no pues cada vez estoy mas perdido amigo no logro identificar que parte podria ayudarme con mi problema de restar 2 campos de tablas diferentes, creo que ya me bloquie en esto :confused:
|
| La franja horaria es GMT +2. Ahora son las 17:01:50. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi