PDA

Ver la Versión Completa : Insertar datos en tabla recorriendo un dbgrid


Iniciante22
23-11-2013, 20:31:37
Hola a todos soy nueva en club delphi y es la primera ves que consulto de antemano disculpas por si hago cosas que no esten correctas...
estoy trabajando con delphi XE y con el motor de base de datos firerbird....
mi consulta es la siguiente estoy desarrollando el modulo de crear usuarios para un sistema de control de inventario...y me han solicitado que un usuario tenga varios perfiles el cual comprende asociar el departamento mas el area = perfil...ya tengo eso mi problema es que no se como ingresar esa relacion que la hago en un dbgrid a la tabla...osea tengo que recorrer todas las lineas del dbgri e irlas insertando en la tabla pero no se como hacerlo...
mi codigo que utilizo para insertar los datos en la base es:
with dmConecta.qAreaporRol do
begin
Close;
sql.Clear;
sql.Add('insert into AREAPORROL (IDAREAROL, ID_PERFILES, ID_ROLES, ID_USUARIO, ID_DEPTO)');
sql.Add('values (:IDAREAROL, :pID_PERFILES,:pID_ROLES, :pID_USUARIO, :pID_DEPTO)');
parambyname('IDAREAROL').AsInteger := CapturaAreaRol;
parambyname('pID_PERFILES').AsInteger := Id_AgregaPerfil;
parambyname('pID_ROLES').AsInteger := CapturaId_rol;
parambyname('pID_USUARIO').AsInteger := capId_tUsuarios;
parambyname('pID_DEPTO').AsInteger := Captura_idDeptos;
execsql;
end;


de Antemano gracias porque su foro me ha halldado demasiado...

ecfisa
24-11-2013, 09:58:10
Hola Iniciante22, bienvenida a Club Delphi :)

Como es costumbre cuando se inician te invitamos a que leas nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php).

También te aconsejo que cuando incluyas código en tus mensaje utilices TAG's para darle más legibilidad:

http://img403.imageshack.us/img403/3461/75416396.jpg

...o sea tengo que recorrer todas las lineas del dbgri e irlas insertando en la tabla pero no se como hacerlo...
mi codigo que utilizo para insertar los datos en la base es:
with dmConecta.qAreaporRol do
begin
Close;
sql.Clear;
sql.Add('insert into AREAPORROL (IDAREAROL, ID_PERFILES, ID_ROLES, ID_USUARIO, ID_DEPTO)');
sql.Add('values (:IDAREAROL, :pID_PERFILES,:pID_ROLES, :pID_USUARIO, :pID_DEPTO)');
parambyname('IDAREAROL').AsInteger := CapturaAreaRol;
parambyname('pID_PERFILES').AsInteger := Id_AgregaPerfil;
parambyname('pID_ROLES').AsInteger := CapturaId_rol;
parambyname('pID_USUARIO').AsInteger := capId_tUsuarios;
parambyname('pID_DEPTO').AsInteger := Captura_idDeptos;
execsql;
end;
...

Podrías hacer:

...
begin
dmConecta.qAreaporRol.Close;
dmConecta.qAreaporRol.SQL.Clear;
dmConecta.qAreaporRol.SQL.Add('INSERT INTO AREAPORROL (IDAREAROL, ID_PERFILES, ID_ROLES, ID_USUARIO, ID_DEPTO)');
dmConecta.qAreaporRol.SQL.Add('VALUES (:IDAREAROL, :ID_PERFILES, :ID_ROLES, :ID_USUARIO, :ID_DEPTO)');
dmConecta.qAreaporRol.Prepare;
with DBGrid1.DataSource.DataSet do
begin
DisableControls;
try
First;
while not Eof do
begin
dmConecta.qAreaporRol.ParamByName(':IDAREAROL').Value := FieldByName('IDAREAROL').Value;
dmConecta.qAreaporRol.ParamByName(':ID_PERFILES').Value:= FieldByName('ID_PERFILES').Value;
dmConecta.qAreaporRol.ParamByName(':ID_ROLES').Value := FieldByName('ID_ROLES').Value;
dmConecta.qAreaporRol.ParamByName(':ID_USUARIO').Value := FieldByName('ID_USUARIO').Value;
dmConecta.qAreaporRol.ParamByName(':ID_DEPTO').Value := FieldByName('ID_DEPTO').Value;
dmConecta.qAreaporRol.ExecSQL;
Next;
end;
finally
EnableControls;
end;
end;
end;


Saludos :)

AzidRain
26-11-2013, 02:46:37
Como ya te pusieron en el ejemplo lo que se recorre es el dataset al que está ligado el dbgrid. El dbgrid no es mas que la representación visual de los datos pero no los contiene, eso lo tiene el dataset. La manera correcta de manipular datos es usando directamente los datasets, todo los controls asociados a él se actualizarán para reflejar cualquier cambio.