Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-11-2007
Petolansa Petolansa is offline
Miembro
 
Registrado: jul 2005
Posts: 159
Poder: 19
Petolansa Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 15-11-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 15-11-2007
Petolansa Petolansa is offline
Miembro
 
Registrado: jul 2005
Posts: 159
Poder: 19
Petolansa Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 15-11-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 15-11-2007
Petolansa Petolansa is offline
Miembro
 
Registrado: jul 2005
Posts: 159
Poder: 19
Petolansa Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 15-11-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Intentemos esto, pero no estoy muy seguro todavia.
Código Delphi [-]
while not frmfactura.MDtemporal.Eof do
begin
query1.Close;
query1.SQL.Text:='update stock set prostkact = prostkact -' +quotedstr(frmfactura.MDtemporal.fieldbyname('cantidad').AsString)+
'where procod = '+quotedstr(frmfactura.MDtemporal.fieldbyname('codigo').AsString);
query1.ExecSQL;
end;
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
Responder Con Cita
  #7  
Antiguo 15-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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).

Código Delphi [-]

query1.Close;
query1.SQL.Text:='update stock set prostkact = prostkact - :prCantidad where procod = :prProcod';
query1.Prepare;
frmfactura.MDtemporal.First; // no sé donde andará el registro activo, me aseguro
frmfactura.MDtemporal.DisableControls; // dejamos de actualizar los controles data-Aware
try
  while not frmfactura.MDtemporal.Eof do
  begin
    query1.parambyname('prCantidad').Asinteger := frmfactura.MDtemporal.fieldbyname('cantidad').AsInteger;
    query1.parambyname('prProcod').AsInteger :=  frmfactura.MDtemporal.fieldbyname('codigo').AsString;
    query1.ExecSQL;
  frmfactura.MDtemporal.Next; // <<<<<<<<<< ¿esto no estaba en tu código?
  end;
finally
  frmfactura.MDtemporal.First;
  frmfactura.MDtemporal.EnableControls;
end;

Otra cosa: Si en frmfactura tienes los campos persistentes, sería mejor usar:
Código Delphi [-]
frmfactura.MDtemporalcantidad.AsInteger; // asinteger, asfloat lo que sea
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 15-11-2007 a las 20:48:58.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Articulo similar al de Paradox en red, pero para Access Wonni Conexión con bases de datos 0 17-05-2007 14:51:03
Codificar para el cambio: Mi primer articulo en BDN!!! mamcx Noticias 11 22-09-2006 01:37:20
Articulo -> Ventas - Borrar Articulo hmoner Conexión con bases de datos 7 14-10-2005 18:24:54
Artículo de Paradox en red Mariana Conexión con bases de datos 4 22-12-2004 04:23:27
Duda para crear índice de artículo Tio Firebird e Interbase 2 10-06-2003 01:00:14


La franja horaria es GMT +2. Ahora son las 16:43:27.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi