Ir al contenido


Foto

Consulta Sobre modificar datos de dos tablas en Delphi


  • Por favor identifícate para responder
7 respuestas en este tema

#1 Char01

Char01

    Newbie

  • Miembros
  • Pip
  • 7 mensajes
  • Locationcolombia

Escrito 10 septiembre 2013 - 08:44

Muy Buenos  Días quien me podría colaborar con este problema en delphi6 quiero igualar dos tablas en delphi6 y que se modifiquen los datos así:
tengo una tabla llamada suscriptor en esta tabla esta todo actualizado porque esta se genera automáticamente en la base de datos  lo que quiero es traer un dato de esta tabla suscriptor e  igualarla con otra que se llama suicopia y si  suicopia no esta esa fila o campo actualizado me lo actualice mediante la tabla suscriptor esto tiene que ser mediante un botón que se llama igualar
agradezco quien me pueda colaborar con esto la verdad soy novato en delphi y no se como hacer esto y pues la verdad lo necesito un poco urgente



Bueno estoy realizando lo siguiente Tengo Tres DBGrid  los cuales tengo de la siguiente manera Conectados mediante  ADOConnection1 para la base de datos  en el primer DBGrid1 realizo lo siguiente traigo mediante un ADOQuery1 y ADOQuery2 los datos de la tabla suicopia y otra que se llama barreal mediante Cuando doy clic en un DBCombox ay es donde me trae los datos de la tabla barreal y este a su vez me recoge los datos de suicopia y me muestra todos los datos en la DBgri1.

En la siguiente DBGrid2 es lo mismo traigo los datos mediante ADOQuery Y me los Muestra en La DBGrid2 Pero mediante DBEdit pero estos son los campos de la tabla suscriptor este es el código de como traigo los datos para que se muestren en las DBGrid bueno lo que quiero es mediante un botón cuando se seleccione una fila de la DBGrid2 me actualice o me iguale  los datos de la DBGrid1 que Tenga el mismo código o si le faltan datos a esta fila me los cambie. cabe anotar que la tabla que yo llamo suscriptor es la que esta actualizada y suicopia es la que tengo que actualizar.
muchas gracias por su colaboración.


aca coloco el codigo de como llamo los datos de las dos tablas:



delphi
  1. unit Unit3;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, ExtCtrls, StdCtrls, Menus, DB, ADODB, DBCtrls, Buttons, Grids,
  8.   DBGrids, DBTables, Provider, Mask, FMTBcd, SqlExpr, jpeg;
  9.  
  10. type
  11.   TForm3 = class(TForm)
  12.     Shape1: TShape;
  13.     Label1: TLabel;
  14.     Image1: TImage;
  15.     MainMenu1: TMainMenu;
  16.     Archivo1: TMenuItem;
  17.     Salir1: TMenuItem;
  18.     DBGrid1: TDBGrid;
  19.     ADOConnection1: TADOConnection;
  20.     DBNavigator1: TDBNavigator;
  21.     DBGrid2: TDBGrid;
  22.     DBLookupComboBox1: TDBLookupComboBox;
  23.     DBNavigator2: TDBNavigator;
  24.     Label2: TLabel;
  25.     Label3: TLabel;
  26.     Label4: TLabel;
  27.     DBEdit4: TDBEdit;
  28.     DBEdit5: TDBEdit;
  29.     DBEdit6: TDBEdit;
  30.     DBEdit7: TDBEdit;
  31.     DBEdit8: TDBEdit;
  32.     Label5: TLabel;
  33.     Label6: TLabel;
  34.     Label7: TLabel;
  35.     Label8: TLabel;
  36.     Label9: TLabel;
  37.     ADOQuery5: TADOQuery;
  38.     DataSource5: TDataSource;
  39.     DBGrid3: TDBGrid;
  40.     DBNavigator3: TDBNavigator;
  41.     ADOQuery6: TADOQuery;
  42.     DataSource6: TDataSource;
  43.     Panel1: TPanel;
  44.     Panel4: TPanel;
  45.     SpeedButton3: TSpeedButton;
  46.     SpeedButton1: TSpeedButton;
  47.     Label10: TLabel;
  48.     Label11: TLabel;
  49.     Label12: TLabel;
  50.     DBEdit2: TDBEdit;
  51.     DBEdit3: TDBEdit;
  52.     ADOQuery3: TADOQuery;
  53.     DataSource3: TDataSource;
  54.     DataSource4: TDataSource;
  55.     ADOQuery4: TADOQuery;
  56.     ADOQuery1: TADOQuery;
  57.     DataSource1: TDataSource;
  58.     DataSource2: TDataSource;
  59.     ADOQuery2: TADOQuery;
  60.     DBEdit1: TDBEdit;
  61.     Panel2: TPanel;
  62.     SpeedButton4: TSpeedButton;
  63.     Panel3: TPanel;
  64.     SpeedButton2: TSpeedButton;
  65.  
  66.     procedure Salir1Click(Sender: TObject);
  67.     procedure DBLookupComboBox1Click(Sender: TObject);
  68.     procedure DBEdit1Change(Sender: TObject);
  69.     procedure DBEdit2Change(Sender: TObject);
  70.     procedure DBEdit3Change(Sender: TObject);
  71.     procedure DBEdit4Change(Sender: TObject);
  72.     procedure DBEdit5Change(Sender: TObject);
  73.     procedure DBEdit6Change(Sender: TObject);
  74.     procedure DBEdit7Change(Sender: TObject);
  75.     procedure DBEdit8Change(Sender: TObject);
  76.     procedure SpeedButton1Click(Sender: TObject);
  77.     procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  78.       DataCol: Integer; Column: TColumn; State: TGridDrawState);
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.    
  87.  
  88.     private
  89.     { Private declarations }
  90.   public
  91.     { Public declarations }
  92.   end;
  93.  
  94. var
  95.   Form3: TForm3;
  96.   Filtro : String;
  97. implementation
  98.  
  99. uses Unit1, Unit2;
  100.   const
  101.   SQLOriginal ='select * from BARREAL';
  102.  
  103. {$R *.dfm}
  104.             //Se ejecuta el codigo para salir del formulario con el comando close.
  105. procedure TForm3.Salir1Click(Sender: TObject);
  106. begin
  107. close
  108. end;
  109. // Este es el procedimiento para llamar los datos de suicopia
  110.  
  111. procedure TForm3.DBLookupComboBox1Click(Sender: TObject);
  112.  
  113. begin
  114.   ADOQuery2.Close;
  115.           ADOQuery2.SQL.Text :='select * from suicopia where nom_barrio='+ QuotedStr(DBLookupComboBox1.Text);;
  116.  
  117.  
  118.       ADOQuery2.Open;
  119.  
  120.  
  121.   end;
  122.  
  123. // Este procedimiento es para llamar los campos ala segunda DBGrid2
  124.  
  125. procedure TForm3.DBEdit1Change(Sender: TObject);
  126. begin
  127.   ADOQuery3.Close;
  128.           ADOQuery3.SQL.Text :='select * from SUSCRIPTOR where primera='+ QuotedStr(DBEdit1.Text);;
  129.  
  130.  
  131.       ADOQuery3.Open;
  132. end;
  133.  
  134. procedure TForm3.DBEdit2Change(Sender: TObject);
  135. begin
  136.   ADOQuery3.Close;
  137.           ADOQuery3.SQL.Text :='select * from SUSCRIPTOR where  segunda='+ QuotedStr(DBEdit2.Text) + ' and primera='+ QuotedStr(DBEdit1.Text);;
  138.  
  139.  
  140.       ADOQuery3.Open;
  141. end;
  142.  
  143. procedure TForm3.DBEdit3Change(Sender: TObject);
  144. begin
  145.   ADOQuery3.Close;
  146.           ADOQuery3.SQL.Text :='select * from SUSCRIPTOR where tercera='+ QuotedStr(DBEdit3.Text) +' and primera='+ QuotedStr(DBEdit1.Text) + ' and segunda='+ QuotedStr(DBEdit2.Text);;
  147.  
  148.  
  149.       ADOQuery3.Open;
  150. end;
  151.  
  152. procedure TForm3.DBEdit4Change(Sender: TObject);
  153. begin
  154. ADOQuery6.Close;
  155.           ADOQuery6.SQL.Text :='select * from suicopia where sector='+ QuotedStr(DBEdit4.Text);;
  156.  
  157.  
  158.       ADOQuery6.Open;
  159. end;
  160.  
  161. procedure TForm3.DBEdit5Change(Sender: TObject);
  162. begin
  163. ADOQuery6.Close;
  164.           ADOQuery6.SQL.Text :='select * from suicopia where seccion='+ QuotedStr(DBEdit5.Text) +' and sector='+ QuotedStr(DBEdit4.Text);;
  165.  
  166.  
  167.       ADOQuery6.Open;
  168. end;
  169.  
  170. procedure TForm3.DBEdit6Change(Sender: TObject);
  171. begin
  172. ADOQuery6.Close;
  173.           ADOQuery6.SQL.Text :='select * from suicopia where manzana='+ QuotedStr(DBEdit6.Text) +' and sector='+ QuotedStr(DBEdit4.Text) + ' and seccion='+ QuotedStr(DBEdit5.Text);;
  174.  
  175.  
  176.       ADOQuery6.Open;
  177. end;
  178.  
  179. procedure TForm3.DBEdit7Change(Sender: TObject);
  180. begin
  181. ADOQuery6.Close;
  182.           ADOQuery6.SQL.Text :='select * from suicopia where lote='+ QuotedStr(DBEdit7.Text) +' and sector='+ QuotedStr(DBEdit4.Text) + ' and seccion='+ QuotedStr(DBEdit5.Text) + ' and manzana='+ QuotedStr(DBEdit6.Text);;
  183.  
  184.  
  185.       ADOQuery6.Open;
  186. end;
  187.  
  188. procedure TForm3.DBEdit8Change(Sender: TObject);
  189. begin
  190.   ADOQuery6.Close;
  191.           ADOQuery6.SQL.Text :='select * from suicopia where mejora='+ QuotedStr(DBEdit8.Text) +' and sector='+ QuotedStr(DBEdit4.Text) + ' and seccion='+ QuotedStr(DBEdit5.Text) + ' and manzana='+ QuotedStr(DBEdit6.Text) + ' and lote='+ QuotedStr(DBEdit7.Text);;
  192.  
  193.  
  194.       ADOQuery6.Open;
  195. end;
  196.    
  197.     //Procedimiento para colocarle
  198.     //color ala fila de la DBGrid
  199.  
  200.  
  201. procedure TForm3.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  202.   DataCol: Integer; Column: TColumn; State: TGridDrawState);
  203. begin
  204. if gdSelected in State then
  205. with DBGrid1 do
  206. begin
  207.   Canvas.Brush.Color:=clRed;
  208.   Canvas.Font.Color:=clWhite;
  209.   DefaultDrawColumnCell(Rect, DataCol, Column, State);
  210. end;
  211.  
  212. end;
  213.  
  214. end.
  215.  
  216. end.


Agradezco su colaboración es que necesito un poco urgente:



  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 10 septiembre 2013 - 10:47

Puedes darnos un poco  más de información?. Cual es la estructura de las tablas, que componentes usas para conectarte, cómo estás mostrando los datos, en que contexto, etc. Entre más detalles aportes, más fácil encontrarás ayuda, de lo contrario será muy difícil.

Saludos.
  • 0

#3 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 334 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 10 septiembre 2013 - 11:09

Yo haría lo siguiente:

Delete From suicopia
Where ...

Y ahora actualizo todo como me lo indica suscriptor

Insert into suicopia (...)
Select * From suscriptores
Where ...


Pongo en un botón de Delphi una llamada a us SP o con algún componente, tipo IBX y listo.

¿Es lo que quieres?

Santiago.

  • 0

#4 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 334 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 10 septiembre 2013 - 11:21

Leyendo un poco el manual de Firebird 2.1, pág. 50 veo que podría usarse la sentencia UPDATE OR INSERT. Esto permite, si no me equivoco, insertar una tupla si es que no se ha actualizado antes, por no existir claro.


Update or Insert into suicopia s (campo1, campo2, ...)
Values (:campo1, :campo2, ...)
matching (campo1)


Esto puede ser mejor y evita tener que estar borrando todo cada vez que quiero actualizar.
Santiago.
  • 0

#5 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 11 septiembre 2013 - 03:25

Leyendo un poco el manual de Firebird 2.1, pág. 50 veo que podría usarse la sentencia UPDATE OR INSERT. Esto permite, si no me equivoco, insertar una tupla si es que no se ha actualizado antes, por no existir claro.


Update or Insert into suicopia s (campo1, campo2, ...)
Values (:campo1, :campo2, ...)
matching (campo1)


Esto puede ser mejor y evita tener que estar borrando todo cada vez que quiero actualizar.
Santiago.


Pero es que no dice que esté usando FireBird...
  • 0

#6 Char01

Char01

    Newbie

  • Miembros
  • Pip
  • 7 mensajes
  • Locationcolombia

Escrito 11 septiembre 2013 - 08:31

Muy Buenos  Días quien me podría colaborar con este problema en delphi6 quiero igualar dos tablas en delphi6 y que se modifiquen los datos así:
tengo una tabla llamada suscriptor en esta tabla esta todo actualizado porque esta se genera automáticamente en la base de datos  lo que quiero es traer un dato de esta tabla suscriptor e  igualarla con otra que se llama suicopia y si  suicopia no esta esa fila o campo actualizado me lo actualice mediante la tabla suscriptor esto tiene que ser mediante un botón que se llama igualar
agradezco quien me pueda colaborar con esto la verdad soy novato en delphi y no se como hacer esto y pues la verdad lo necesito un poco urgente




Bueno estoy realizando lo siguiente Tengo Tres DBGrid  los cuales tengo de la siguiente manera Conectados mediante  ADOConnection1 para la base de datos  en el primer DBGrid1 realizo lo siguiente traigo mediante un ADOQuery1 y ADOQuery2 los datos de la tabla suicopia y otra que se llama barreal mediante Cuando doy clic en un DBCombox hay es donde me trae los datos de la tabla barreal y este a su vez me recoge los datos de suicopia y me muestra todos los datos en la DBgri1.

En la siguiente DBGrid2 es lo mismo traigo los datos mediante ADOQuery Y me los Muestra en La DBGrid2 Pero mediante DBEdit pero estos son los campos de la tabla suscriptor este es el código de como traigo los datos para que se muestren en las DBGrid bueno lo que quiero es mediante un botón cuando se seleccione una fila de la DBGrid2 me actualice o me iguale  los datos de la DBGrid1 que Tenga el mismo código o si le faltan datos a esta fila me los cambie. cabe anotar que la tabla que yo llamo suscriptor es la que esta actualizada y suicopia es la que tengo que actualizar.
muchas gracias por su colaboración.


aca coloco el codigo de como llamo los datos de las dos tablas:


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;
  Filtro : String;
implementation

uses Unit1, Unit2;
  const
  SQLOriginal ='select * from BARREAL';
 
{$R *.dfm}
            //Se ejecuta el codigo para salir del formulario con el comando close.
procedure TForm3.Salir1Click(Sender: TObject);
begin
close
end;
// Este es el procedimiento para llamar los datos de suicopia

procedure TForm3.DBLookupComboBox1Click(Sender: TObject);

begin
  ADOQuery2.Close;
          ADOQuery2.SQL.Text :='select * from suicopia where nom_barrio='+ QuotedStr(DBLookupComboBox1.Text);;


      ADOQuery2.Open;


  end;

// Este procedimiento es para llamar los campos ala segunda DBGrid2

procedure TForm3.DBEdit1Change(Sender: TObject);
begin
  ADOQuery3.Close;
          ADOQuery3.SQL.Text :='select * from SUSCRIPTOR where primera='+ QuotedStr(DBEdit1.Text);;


      ADOQuery3.Open;
end;

procedure TForm3.DBEdit2Change(Sender: TObject);
begin
  ADOQuery3.Close;
          ADOQuery3.SQL.Text :='select * from SUSCRIPTOR where  segunda='+ QuotedStr(DBEdit2.Text) + ' and primera='+ QuotedStr(DBEdit1.Text);;


      ADOQuery3.Open;
end;

procedure TForm3.DBEdit3Change(Sender: TObject);
begin
  ADOQuery3.Close;
          ADOQuery3.SQL.Text :='select * from SUSCRIPTOR where tercera='+ QuotedStr(DBEdit3.Text) +' and primera='+ QuotedStr(DBEdit1.Text) + ' and segunda='+ QuotedStr(DBEdit2.Text);;


      ADOQuery3.Open;
end;

procedure TForm3.DBEdit4Change(Sender: TObject);
begin
ADOQuery6.Close;
          ADOQuery6.SQL.Text :='select * from suicopia where sector='+ QuotedStr(DBEdit4.Text);;


      ADOQuery6.Open;
end;

procedure TForm3.DBEdit5Change(Sender: TObject);
begin
ADOQuery6.Close;
          ADOQuery6.SQL.Text :='select * from suicopia where seccion='+ QuotedStr(DBEdit5.Text) +' and sector='+ QuotedStr(DBEdit4.Text);;


      ADOQuery6.Open;
end;

procedure TForm3.DBEdit6Change(Sender: TObject);
begin
ADOQuery6.Close;
          ADOQuery6.SQL.Text :='select * from suicopia where manzana='+ QuotedStr(DBEdit6.Text) +' and sector='+ QuotedStr(DBEdit4.Text) + ' and seccion='+ QuotedStr(DBEdit5.Text);;


      ADOQuery6.Open;
end;

procedure TForm3.DBEdit7Change(Sender: TObject);
begin
ADOQuery6.Close;
          ADOQuery6.SQL.Text :='select * from suicopia where lote='+ QuotedStr(DBEdit7.Text) +' and sector='+ QuotedStr(DBEdit4.Text) + ' and seccion='+ QuotedStr(DBEdit5.Text) + ' and manzana='+ QuotedStr(DBEdit6.Text);;


      ADOQuery6.Open;
end;

procedure TForm3.DBEdit8Change(Sender: TObject);
begin
  ADOQuery6.Close;
          ADOQuery6.SQL.Text :='select * from suicopia where mejora='+ QuotedStr(DBEdit8.Text) +' and sector='+ QuotedStr(DBEdit4.Text) + ' and seccion='+ QuotedStr(DBEdit5.Text) + ' and manzana='+ QuotedStr(DBEdit6.Text) + ' and lote='+ QuotedStr(DBEdit7.Text);;


      ADOQuery6.Open;
end;
   
    //Procedimiento para colocarle
    //color ala fila de la DBGrid


procedure TForm3.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if gdSelected in State then
with DBGrid1 do
begin
  Canvas.Brush.Color:=clRed;
  Canvas.Font.Color:=clWhite;
  DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

end;

end.

end.


Agradezco su colaboración.



  • 0

#7 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 11 septiembre 2013 - 08:53

Agradezco su colaboración.




Varios compañeros colocaron propuestas. ¿Ninguna te sirvió? por que colocaste exactamente lo mismo que en el primer mensaje amigo mio.
  • 0

#8 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 334 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 11 septiembre 2013 - 10:46

Pero es que no dice que esté usando FireBird...


:wink:, cierto. La verdad es que ni me dí cuenta de ello.
Bueno, pero la parte del Delete y luego Insert no tiene nada que ver con Firebird, es mas bien genérico y podría usarse sin problemas.

Gracias. Santiago.
  • 0




IP.Board spam blocked by CleanTalk.