Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-07-2012
disturbednoise disturbednoise is offline
Registrado
NULL
 
Registrado: may 2012
Posts: 7
Poder: 0
disturbednoise Va por buen camino
Unhappy Agregar datos en grid llenado con dataset

Hola a todos, espero y poder explicar de la mejor manera mi problema:

Cuento con un TADOStored Proc ligado a un DataSource para regresar datos y mostrarlos en una forma delphi usando un boton de la siguiente manera:

Código Delphi [-]
procedure TmoduloVentasW.agregarProducto(Sender: TObject);
begin
           
            dm.spAgregarArt.ProcedureName:='consultaArticuloVentaEx';
            dm.spAgregarArt.Parameters.Refresh;
               if codigoProducto.Text='' then
               begin
               showmessage('Es necesario agregar un código de producto');
               exit;
               end
               else
                dm.spAgregarArt.Parameters.ParamByName('@idArticulo').Value:= codigoProducto.Text;
                dm.spAgregarArt.Parameters.ParamByName('@articuloV').Value:= NULL;
                dm.spAgregarArt.ExecProc;
                valorVA:= dm.spAgregarArt.Parameters.ParamByName('@articuloV').value;

                if  (valorVA = 0)  then
                begin
                  showmessage('El artículo ingresado no existe');
                  codigoProducto.Text:='';
                  exit;

                end;
              if (valorVA = 1) then

                  //Aqui refresco y cambio los valores para asignar otro nombre de procedimiento almacenado al mismo TADOStored Proc
                     
                  dm.spAgregarArt.ProcedureName:='consultaArticuloVenta';
                  dm.spAgregarArt.Parameters.Refresh;
                  dm.spAgregarArt.Parameters.ParamByName('@idArticulo').Value:= codigoProducto.Text;
                  dm.spAgregarArt.Open;
          

end;

Funciona el código al presionar el boton una vez y me pasa los datos de la consulta, que es un "select" a un grid, pero al volver a dar click al botón me muestra el siguiente mensaje: spAgregarArt Cannot perform this operation on an open data set

Y era de esperarse, ya que deje el dm.spAgregarArt.Open, pero mi duda es si puedo recorrer ese data set y volver a usarlo para agregar otro elemento a mi grid o de que manera hacerlo?, para que al dar click cuantas veces desee, se me agreguen datos al grid usando la consulta y el stored procedure

Espero y puedan ayudarme, muchas gracias!!

Última edición por Casimiro Notevi fecha: 21-07-2012 a las 00:40:51.
Responder Con Cita
  #2  
Antiguo 21-07-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.107
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Lo que no entiendo, en principio, es para qué haces una consulta si lo que quieres es agregar registros.
Responder Con Cita
  #3  
Antiguo 21-07-2012
disturbednoise disturbednoise is offline
Registrado
NULL
 
Registrado: may 2012
Posts: 7
Poder: 0
disturbednoise Va por buen camino
Red face Respuesta

Buen dia

El programa que estoy intentando desarrollar es sobre facturacion.

Cuento con un TextEdit que al momento de poner por ejemplo un ID de algún articulo y dar click en el botón llamado "agregar" en el evento onclick llamado "agregarProducto", quiero que se llene un grid con los datos del articulo, por ejemplo, descripción, precio, cantidad, etc. Para realizar una venta.

Si por ejemplo pusiera un nuevo ID, entonces desearía que mi grid se llenara con el nuevo articulo, sin borrar el anterior y así sucesivamente

El primer stored procedure llamado "consultaArticuloVentaEx" la realizo para comprobar si existe el ID en la base de datos, sino solamente regreso algun valor que me indica que no existe el articulo y muestro un mensaje.

El segundo stored procedure llamado "consultaArticuloVenta", lo mando llamar en caso de que si exista un ID válido y dejo el dm.spAgregarArt.Open; que en este caso si me llenaria mi grid con los datos correspondientes, saludos!
Responder Con Cita
  #4  
Antiguo 22-07-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola disturbednoise.

Si no entiendo mal lo que estas buscando, un modo de hacerlo podría ser:
Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  DataSet.Open;
  StringGrid1.FixedCols:= 0;
  StringGrid1.FixedRows:= 1; // fila reservada para título
  StringGrid1.ColCount:= DataSet.FieldCount; // tantas columnas como campos
  // poner el nombre de campo como título de cada columna
  for i:= 0 to DataSet.FieldCount-1 do
    StringGrid1.Cells[i, 0]:= DataSet.Fields[i].DisplayLabel;
end;

procedure TForm1.btnAgregarClick(Sender: TObject);
var
  i: Integer;
begin
  // Si el dato ingresado existe, pasar campos al StringGrid
  if DataSet.Locate('NOMBRE_DEL_CAMPO_BUSCADO', Edit1.Text, []) then
  begin
    for i:= 0 to DataSet.FieldCount-1 do
      StringGrid1.Cells[i, StringGrid1.Row]:= DataSet.Fields[i].AsString;
    StringGrid1.Row:= StringGrid1.Row + 1; // nuevo dato
  end
  else  // si no existe mostrar error
    MessageBox(Handle, 'Artículo inexistente', '', MB_ICONERROR + MB_OK)
end;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 22-07-2012 a las 23:20:44. Razón: agregar comentario
Responder Con Cita
  #5  
Antiguo 31-07-2012
disturbednoise disturbednoise is offline
Registrado
NULL
 
Registrado: may 2012
Posts: 7
Poder: 0
disturbednoise Va por buen camino
Hola ecfisa

Gracias por tu respuesta, lo que entendí de tu solución es por ejemplo traer dentro del dataset al crear la forma todos los datos de la tabla y hacer una búsqueda en el data set por el dato ingresado en mi text edit, si por ejemplo mi tabla va creciendo demasiado no existiría alguna manera de contar con dos data set o una tabla temporal en el que pueda ir abriendo y cerrando un data set, para hacer las llamadas a mi stored procedure pero al mismo tiempo ir grabando los datos a una tabla temporal para de ahí colgarlos al grid?

Disculpa la tardanza en contestar, pero me encontraba fuera de la ciudad, saludos!
Responder Con Cita
  #6  
Antiguo 01-08-2012
disturbednoise disturbednoise is offline
Registrado
NULL
 
Registrado: may 2012
Posts: 7
Poder: 0
disturbednoise Va por buen camino
Mas concretamente lo que quiero hacer es un grid que contenga los detalles de Factura o de alguna venta.

Lo llevo a cabo con un datasource y de ahi ligado a mi grid agrego el resultado de la busqueda de un articulo, pero no puedo agregar varios articulos al grid, ya que al querer usar de nuevo el datasource, me dice que esta abierto, si lo cierro entonces mi grid se queda en blanco, espero y me explique un poco mejor, gracias!!
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
dbgrid llenado de datos emenchi34 Conexión con bases de datos 14 16-11-2006 11:34:44
Grid a DataSet robinsongm Varios 2 28-07-2006 14:53:00
Agregar datos a un string grid zvf OOP 2 05-07-2006 18:55:54
Llenado de Base de datos Luis Castillo Firebird e Interbase 1 16-01-2006 20:52:36
Extraer datos de un dataset? Durbed Conexión con bases de datos 5 01-10-2004 16:40:30


La franja horaria es GMT +2. Ahora son las 08:50: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