Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-02-2021
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
No.
Yo estoy pensando en llenar las columnas del DBGrid. Pero eso sólo debes hacerlo 1 vez. No debes hacerlo por cada fila (registro).
Vos decis que haciendolo solo una vez al agregar un nuevo registro, apareceran los codigos?

Hasta ahora hice esto(como me habias dicho el afterOpen):

Código Delphi [-]
procedure TDataModule1.cdsptemporalAfterOpen(DataSet: TDataSet);
begin
 SetupGridPickList('Codigo','Select * from productos;');
end;


Código Delphi [-]
 procedure TDataModule1.SetupGridPickList(const FieldName, sql: string);
var
 slPickList:TStringList;
 Query : TSQLQuery;
 i : integer;
begin
 slPickList:=TStringList.Create;
 Query := TSQLQuery.Create(self);

 Query.SQLConnection :=DataModule1.CONEXION;
 Query.SQL.Text := sql;
 Query.Open;
 //Fill the string listwhile not Query.EOF dobegin
 Query.First;
 while not Query.eof do
   begin
       slPickList.Add(Query.Fields[9].AsString);

       Query.Next;
   end;



 Form3.gpedido.Columns[1].PickList:=slPickList;


end;

Pero me da access violation y no compila: Form3.gpedido.Columns[1].PickList:=slPickList; Gpedido es la grilla en cuestion.

Por otro lado el onchange de codigo funciona perfecto:

Código Delphi [-]
procedure TDataModule1.cdsptemporalCodigoChange(Sender: TField);
var

 Queryn : TSQLQuery;
 i : integer;
begin

 Queryn := TSQLQuery.Create(self);

 Queryn.SQLConnection :=DataModule1.CONEXION;
 Queryn.SQL.Text :='SELECT NomProducto,PrecioActual from productos where Codigo="'+cdsptemporalCodigo.AsString + '"';

 Queryn.Open;
 DataModule1.cdsptemporalidcliente.AsInteger:=DataModule1.cdsclientesIdCliente.AsInteger;
qlistapedido.ParamByName('idcl').AsInteger:=DataModule1.cdsptemporalidcliente.AsInteger;
qlistapedido.Open;

DataModule1.cdsptemporallista.AsString:=qlistapedido.Fields[1].AsString;
 DataModule1.cdsptemporalPrecio.AsFloat:=Queryn.Fields[1].AsFloat;
 DataModule1.cdsptemporalNomProducto.AsString:=       Queryn.Fields[0].AsString;


end;
Responder Con Cita
  #2  
Antiguo 12-02-2021
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por giulichajari Ver Mensaje
Pero me da access violation y no compila: Form3.gpedido.Columns[1].PickList:=slPickList; Gpedido es la grilla en cuestion.
Para el problema de que no compila, deberías decir el error que te da.
Para el "Access Violation" puedes ejecutar paso a paso y ver dónde está el problema. Posiblemente algo que no está asignado correctamente.

En esa línea además estás asignando a la PickList (que es un TStringList) otro objeto, cosa que te va a dar problemas.
Añade los elementos a la lista, pero no sustituyas el objeto.

Algo así:

Código Delphi [-]
  // Rellenar la lista de productos
  DataProductos.Open;
  while not DataProductos.Eof do begin
    DBGrid1.Columns[2].PickList.Add(DataProductos.FieldByName('Codigo').AsString);
    DataProductos.Next;
  end;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 12-02-2021
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Para el problema de que no compila, deberías decir el error que te da.
Para el "Access Violation" puedes ejecutar paso a paso y ver dónde está el problema. Posiblemente algo que no está asignado correctamente.

En esa línea además estás asignando a la PickList (que es un TStringList) otro objeto, cosa que te va a dar problemas.
Añade los elementos a la lista, pero no sustituyas el objeto.

Algo así:

Código Delphi [-]
  // Rellenar la lista de productos
  DataProductos.Open;
  while not DataProductos.Eof do begin
    DBGrid1.Columns[2].PickList.Add(DataProductos.FieldByName('Codigo').AsString);
    DataProductos.Next;
  end;
Bueno hasta ahora hice como me dijiste en el after open del tclientdataset del pedido:


Código Delphi [-]
procedure TDataModule1.cdspedidotemporalAfterOpen(DataSet: TDataSet);

begin

 DataModule1.cdsproductos.First;

 while not DataModule1.cdsproductos.eof do
   begin
      Form3.gpedidotemp.Columns[1].PickList.Add(DataModule1.cdsproductosCodigo.AsString) ;


       DataModule1.cdsproductos.Next;
   end;

end;

Y obtengo como te dije:

https://imgur.com/a/jCMQ9Lr

Un error, osea no entiendo porque no puedo asignar el contenido del dataset a la columna de la grilla.
Responder Con Cita
  #4  
Antiguo 15-02-2021
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por giulichajari Ver Mensaje
Y obtengo como te dije:

https://imgur.com/a/jCMQ9Lr

Un error, osea no entiendo porque no puedo asignar el contenido del dataset a la columna de la grilla.
Puedes probar con algo así:

Código Delphi [-]
while not DataModule1.cdsproductos.eof do
begin
  Form3.gpedidotemp.Columns[1].PickList.Add(DataModule1.cdsproductos.FieldByName('codigo').AsString) ;
  DataModule1.cdsproductos.Next;
end;

Si te sigue dando un "Access Violation" evalua si alguno de los elementos de la línea no está asignado.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 20-02-2021
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Puedes probar con algo así:

Código Delphi [-]
while not DataModule1.cdsproductos.eof do
begin
  Form3.gpedidotemp.Columns[1].PickList.Add(DataModule1.cdsproductos.FieldByName('codigo').AsString) ;
  DataModule1.cdsproductos.Next;
end;

Si te sigue dando un "Access Violation" evalua si alguno de los elementos de la línea no está asignado.
Hola German ,funciono de la siguiente manera:

Código Delphi [-]
procedure TPEDIDO.FormCreate(Sender: TObject);
var
idpedido:integer;
begin
Position := poScreenCenter;
//obtengo el pedido actual

if DBEdit1.Text<>'' then
begin
//hago la consulta con este id y obtengo el detalle
  idpedido:=StrToInt(DBEdit1.Text);
  DataModule1.qdetpedido.Close;
DataModule1.qdetpedido.ParamByName('idp').AsInteger:=idpedido;
DataModule1.qdetpedido.ExecSQL();
end;
  DataModule1.cdsproductos.First;

 while not DataModule1.cdsproductos.eof do
   begin
     PEDIDO.gpedidotemp.Columns[2].PickList.Add(DataModule1.cdsproductosCodigo.AsString) ;


       DataModule1.cdsproductos.Next;
   end;
end;

En el evento OnCreate del formulario donde esta la grilla.


Por lo menos una parte ya hice. Lo que hago con button5 es agregar un nuevo pedido.
Código SQL [-]
procedure TPEDIDO.Button5Click(Sender: TObject);
var
intUltimo:integer;
begin
//añado nuevo pedido
DataModule1.cdspedidos.Open;
DataModule1.cdspedidos.Insert;
intUltimo:=DataModule1.cdspedidos.RecordCount + 1;
DBEdit1.Text:=IntToStr(intUltimo);
//lo registro
DataModule1.cdspedidos.ApplyUpdates(0);

//lo asigno al detalle
DataModule1.qdetpedido.Close;
 DataModule1.qdetpedido.ParamByName('idp').AsInteger:=intUltimo;
  DataModule1.qdetpedido.ExecSQL;


end;

Pero la grilla de detalle de pedido no se borra. Esta grilla tiene una DatSource asociado a un TClientDataSet, y todo proviene de un query:

Código SQL [-]
select * from detallepedido where detallepedido.Idpedido=:idp;

Es decir lo que intento hacer es seleccionar de acuerdo al pedido en cuestion su detalle.
¿Cual es la manera de borrar la grilla y resetearla?
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
Sera posible este tipo de ShowModal? pborges36 OOP 4 12-09-2008 00:49:12
¿Es posible cerrar automaticamente un formulario en delphi? mabjes OOP 7 13-07-2007 17:47:26
Copiar registros de una tabla a otra en Access con Delphi Gelmin Conexión con bases de datos 1 01-07-2005 12:35:04
es posible este tipo de consulta? manos SQL 7 09-05-2005 15:43:48
Ver un formulario de Access en delphi?? razadi Servers 2 06-08-2004 00:31:09


La franja horaria es GMT +2. Ahora son las 17:43:04.


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