![]() |
Ayuda con sql para descontar articulo.
Buenas gente, los molesto de nuevo...esta vez para pedirle un a ayudita en un cofigo sql, de a poco empeze a usar querys y realemnte que le voy agarrando la mano, mas o menos.
Ya habia consultado en otro hilo hace tiempo pero no pude llegar a una solucion, revise todos los hios que hablan de descontar stock, pero no llegue a adaptarlo porque siempre me falta algo. Tengo una tabla rxmemory llamada md temporal, tiene los campos cantidad y codigo, ambos de tipo float intente hacer esto, al compilar no me da error, pero no me hace nada directamente. Código:
while not frmfactura.MDtemporal.Eof do en el dbgri las el indice de las columnas con 0-cantidad y 1-codigo Código:
for i:=0 to frmfactura.DBGrid1.FieldCount-1 do Donde el "procod" que seria el codigo de producto que tendria que ser igual que el campo mdtemporal con el que tiene el nombre "codigo", ascociado al dbgrid con el indice 1. POr ahi lei que conviene recorrer la tabla.. Agradezco de antema su ayuda Saludos |
Hola
Esto es solo para tratar de entenderlo mejor
por favor usa las etiquetas Saludos |
Si me equivoque de etiquetas y si me quedo mal, disculpas
|
Hola
vamos a ver si entiendo. Lo que quieres hacer es una resta del campo prostkact menos cantidad que esta el la tabla temporal. Veamos asi, para mi es un asunto de concatenado: bueno, no estoy muy conforme con esto, tendrias que revisarlo, tengo dudas con el menos. Saludos |
Si Caral tenes razon en mi pc lo tengo con una coma antes del quotedstr despues del menos , lo que quisiera saber si esa es la forma de trabajar con sql, cuando compilo no me da error, simplemente no funciona.
Esta bien traajado o no se hace asi, conviene acceder a la tabla o trabajar con lsoc ampos del dbgrid? Garcias |
Hola
Me harias un favor? Me podrias explicar campo por campo de que se trata? Me parece que prostkact pertenece a la tabla stock y que es el campo que quieres actualizar con el dato obtenido de cantidad que esta en la tabla MDtemporal y que sera de acuerdo al campo codigo, que tambien estas en temporal, supongo? me gustaria si me lo puedes explicar un poco mas a ver si lo logro entender, recuerda que soy novato. Saludos |
Caral, primer lugar, se que no eres novato, he leido muchos de tus hilos, y hasta el foro dice lo contrario. jaja
Aca el novato muy novato soy yo. Te comento la tabla Stock es la tabla que yo guardo los articulos, y en esa tabla tengo los campos "prostkact" que describe el stock actual y el campo "procod", obviamente posee mas campos pero los que utilizaria para descontarlo serien esos. Y por otro lado, tengo las lineas de detalle de la factura en una tabla de tipo rxmemory table, en esta tabla, tengo los campos "cantidad", "codigo", etc. Mi intencion para descontar el stock era de restarle al campo de la tabla "stock", osea a "prostkact" el campo "cantidad" de la tabla temporal llamada mdtemporal. donde el codigo del producto de mi tabla stock "procod" sea igual al codigo de la tabla temporal, llamado "codigo". Todas las variables son de tipo float. Espero haberme explicado mejor, cualquier cosa, tratare de hacerlo mejor. Saludo y gracias |
Hola
perdon una pregunta mas: De donde saca los datos el dbgrid? Este debe estar enlazado a un table o query, me puedes decir el nombre de este? Espero no molestarte mas. Saludos |
No caral, como va ser molestia, si los que me ayudan son uds.
El dbgrid esta enlazado a la tabla mdtemporal, en otro form, que se llama frmfactura. Ahi es donde estan los detalles de la factura, en el dbgrid estan los campos codigo y cantidad de la tabla mdtemporal. Por eso cuando ponfo frmfactura.dbgrid1.dataset.datasource, es porque lo tengo en otro form, y el form que quiero actiualizar los datos es el de forma de pago, donde le ingreso la forma de pago, y actalizo todas las tablas. Espero haberme explicado, sino no hay problema en volver hacerlo. Gracias, saludos Me olvidaba el dbgrid se llama dbgrid1. Gracias |
Hola
Intentemos esto, pero no estoy muy seguro todavia. El asunto es que no veo por donde meter las Cells del dbgrid, que creo seria lo adecuado. Sigamos intentando, tal vez algun maestro aparezca por aqui y lo soluciones en un dos por tres. Saludos |
Bueno, no soy un "maestro", pero intentaré lo que pueda.
Algunos detallitos: - Si un campo es numérico (leasé integer, float, currency, BCD) hay que quitar el "QuotedStr" ya que a un número no se le puede restar un string (cadena de texto). - Al pasar cantidades con decimales a un sql, hay que tener especial cuidado con formato, (leasé separador de miles y separador decimal), porque el SQL es un Standard y espera un número sin separador de miles y como separador decimal el punto. - Además es un bucle, hay que "agilizar esa ejecución sea como sea" Vamos a pasar del tema: - Usaremos un sql con parámetros, así nos quitamos el problema del separador decimal y de millar (que delphi haga las conversiones). - Usaremos una consulta compilada (Prepare), ésto hace indicar a delphi que su SQL no ha sido modificada, y por tanto en cada ciclo del bucle, no es necesario chequear la sintaxis de la misma (ahorramos algunos milisegundos). - Haremos un disableControls de la consulta, así delphi no actualiza el grid (recordemos que los mensajes de pintado del grid, el registro activo y demás consume tiempo).
Otra cosa: Si en frmfactura tienes los campos persistentes, sería mejor usar: usando Fieldbyname, se tiene que perder tiempo en averiguar si ese campo está en la tabla o no. Teniendo el campo persistente, se accede directamente a él. sALUDOS |
Hola
Lepe, me puedes explicar que es un campo persistente? No entiendo el concepto? Es cuando el campo esta en el query y no se modifica? Perdon por la pregunta de novato, pero si no la hago no aprendo. El resto esta genial, impresionas Maestro. Saludos |
Gracias tanto como a Caral como a Lepe, realmente da gusto haya personas como Uds con la predisposicion para ayudar a la gente que le gusta aprender este lenguaje. Yo las ganas de ayudar las tengo pero me faltan los conocimientos todavia:(. Pero ni bien pueda sin dudas estar ayudando.
En este momento me da un error en otra parte del codigo, asi que ni bien termine eso, me meto de lleno con esto y por supuesto avisare como me fue. Gente, muy agradecido. |
Cuando le das doble clic a un TTable, aparece la ventana editor de campos, botón derecho y Add All Fields.
A eso se le llama campos persistentes porque en tu Form aparece: Al crear la ventana, se crea ese campo como si se tratara de un panel, un edit, etc. Al usar FieldbyName esto es lo que ocurre: Si tu tabla tiene 10 campos, al usar FieldByName: - En el mejor de los casos, lo encuentras al primer intento de ese bucle. - En el peor de los casos, tendrás que dar 10 vueltas en ese bucle For Al usar campos persistentes, tienes ese campo como si fuera un panel o un Edit, no hay que realizar bucle alguno. En el caso que nos ocupa, nosotros tenemos otro bucle más: while not frmfactura.MDtemporal.Eof do si tenemos 20 registros en la tabla, 10 campos, usamos 2 veces fieldbyname dentro de nuestro bucle: -En el peor de los casos, 390 ciclos -En el mejor de los casos: 60 ciclos Usando campos persistentes: 20 ciclos No hay que meterse en paranoias :D, pero si tenemos los campos persistentes, es preferible usarlos ;). Petolansa: Si no entiendes algo de ese código usa la tecla F1, es la única forma de aprender, si aún así tienes dudas, avisa. Saludos |
Cita:
|
Hola
Me imaginaba que era eso, pero como tenéis nombres raros para todo, pues no sabia este.:D Gracias Maestros, como aprendo aquí, da gusto.:) Saludos |
La franja horaria es GMT +2. Ahora son las 07:31:34. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi