Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   dbGrid insertar en fila y columna deseada un dato (https://www.clubdelphi.com/foros/showthread.php?t=46765)

jesusvp 08-08-2007 06:20:44

dbGrid insertar en fila y columna deseada un dato
 
Bueno me gustaria que me resolvieran una duda que tengo es que tengo un combox del cual selecciono uno de sus elementos y despues le presiono al boton para agregarlo a un dbgrid conectado a un query, pero no he podido insertar ningun elemento manual mas lo que inserta cuando muestro lo que obtiene el query, es decir, tengo tres columna en el dbgrid el usuario selecciona algo del combox y al presionar el boton que se agrege en la fila y columna deseada, no se si me explique bien en caso contrario diganmelo para tratar de expresarlo de otra manera, de ante mano les agradezco la molestia que se toman al tan solo leer;)

egostar 08-08-2007 06:29:21

Seria bueno que colocaras el código que utilizas para que se te pueda ayudar.

Salud OS

Neftali [Germán.Estévez] 08-08-2007 10:11:32

Normalmente debes pensar no en insertar en el DBGrid, sino en la fuente de Datos a la que está conectado el DBGrid.
En tu caso debes hacer el (APPEND..POST) en la Query o tabla que suministra los datos al DBGrid.

PabloTech 08-08-2007 13:59:54

La inserción de filas en la tabla
 
Si tu componente de consulta (query) no tiene posibilidad de agregar registros o filas a la tabla sería algo así:
Código Delphi [-]
 
  // Primero se ingresa en la tabla de datos
  with QueryInsert do
  begin
    SQL.Close;
    SQL.Text := 'INSERT Tabla (Clave, Datos) VALUES(:clave, :datos);';
    ParamByName('clave').AsString := Edit1.Text;
    ParamByName('datos').AsString := ComboBox.Text;
    Prepare; // Opcional.
    ExecSQL;
  end;
  
  // Luego actualizas el Query que consulta esa tabla de datos
  Query.Refresh; // En algunos componentes no se usa Refresh, asi 
                 // es que se debe hacer Close y luego Open para
                 // actualizar la consulta.

En cambio, en otros componentes se puede incorporar la sentencia INSERT como una propiedad. De este modo se trabaja con APPEND... POST. como asi sugiere Neftali.
Código Delphi [-]
  // Actualiza la tabla de datos y refresca la consulta en la pantalla.
  with Query do
  begin
    Append;
    FieldByName('clave').AsString := Edit1.Text;
    FieldByName('datos').AsString := ComboBox.Text;
    Post;
  end;
También conviene que busques acerca de la propiedad RequestLive; y las instrucciones try... except, StartTransaction... Commit... Rollback.

jesusvp 08-08-2007 16:54:08

creo que no me explique bien, gracias por molestase
 
tengo:
DBGridventadetalle: TDBGrid;
CBProductoID: TComboBox;
CBnombre: TComboBox;
CBprecio: TComboBox;
BtnAgregarProducto: TButton;
txtcantidaddeproducto: TEdit;


y en el DBGridventadetalle tengo las columnas una para el ProductoID, cantidaddeproducto, precio, y total

al momento que le doy click al boton btnagregarproducto quiero q me inserte lo que tengo seleccionado en el CBnombre , CBprecio, txtcantidaddeproducto y el ultimo campo obtenerlo mediante la multiplicacion de precio por cantidad


procedure TfrmVenta0.BtnAgregarProductoClick(Sender: TObject);
var
text : string;
lst : string;
begin
inherited;
//DBGridventadetalle.Columns[1].DisplayName :='1aq12';
//DBGridventadetalle.Columns[1].PickList.add('0')//:='23s2';
//DBGridventadetalle.Columns[1].FieldName ('venta_id') := 'ksd';
//DBGridventadetalle.Columns.Items[0].Title.Caption := 'ksd';
//e estado haciendo esto pero no me ha insertado nada
dbgridventadetalle.columns[1]. pienso que a de haber una opcion para agregar la fila ya q la columna ya esta seleccionada y ponerla en la propiedad de q sea una cadena de caracteres (asstring) o algun artificio = CBNombre.Items.ValueFromIndex[1];
end;

de hecho al verlo muy detenidamente creo que sale sobrando el query por q solo requiro que lo que inserte en el dbgridventadetalle lo guarde en la base de datos al darle click a un boton

si tendran unos tips para arreglar o utilizar otros componentes se los agradecere, pd soy algo nuevo en porgramacion en delphi y les pido que entre mas especificos en sus respuestas. Gracias a todos;)

PabloTech 08-08-2007 17:37:56

Paso a paso
 
Un TDBGrid muestra los datos obtenidos con una consulta TQuery o TTable asociada con un TDataSource. El TDataSource tiene una propiedad TDataSet donde va el nombre del TQuery o TTable. El TDBGrid tiene una propiedad TDataSource donde va el nombre del TDataSource asociado a la consulta. Por eso es que vale lo que escribí anteriormente. Pero ahora lo haré más específico.

Por otro lado, no se cómo piensas operar los datos obtenidos de los combos pues deberían ser numéricos. Yo trataré de obtenerlos de todos modos.
Código Delphi [-]
 
  // Primero se ingresa en la tabla de datos
  with QueryInsert do 
  begin
    SQL.Close;
    SQL.Clear;
    SQL.Add('INSERT Tabla (ProductoID, cantidaddeproducto, precio, total)');
    SQL.Add('VALUES(:w_productoID, :w_cantidaddeproducto, :w_precio, :w_total);';
    ParamByName('w_ProductoID').AsString := CBProductoID.Text;
    ParamByName('w_CantidadDeProducto').AsInteger := StrToInt(CBCantidadDeProducto.Text);
    ParamByName('w_Precio').AsCurrency := StrToCurr(CBPrecio.Text);
    ParamByName('w_Total').AsCurrency := StrToCurr(CBPrecio.Text) * StrToInt(CBCantidadDeProducto.Text);
    Prepare; // Opcional. 
    ExecSQL; 
  end; 
  // Luego actualizas el Query que consulta esa tabla de datos 
  Query.Refresh; // En algunos componentes no se usa Refresh, asi 
                 // es que se debe hacer Close y luego Open para 
                 // actualizar la consulta.
:)

Neftali [Germán.Estévez] 08-08-2007 18:08:03

Por favor, utiliza TGA's cuando escribas código delphi.
Revisa la Guía de estilo.


La franja horaria es GMT +2. Ahora son las 19:16:02.

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