Ir al contenido


Foto

Realizar en un form un Update


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

#1 mariarosina1984

mariarosina1984

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 215 mensajes

Escrito 01 marzo 2010 - 10:01

TENGO OTRO FORM QUE SELECCIONO LOS DATOS Y LOS MANDO AL OTRO FORM PARA PODER ACTUALIZAR. EL PROBLEMA ES

1.- QUE SI ACTUALIZO UNO SE ACTUALIZAN TODOS CON ESE TEMA PERO NO SE COMO HACER EL WHERE

2.- qUE CUANDO LE PINCHO EN EL BOTON GUARDAR SALE EL SIGUIENTE ERROR
QUERY1: CANNOT PERFORM THIS OPERATION ON A CLOSED DATA SET

Y AQUI ESTA MI CODIGO


delphi
  1. procedure TForm5.Button1Click(Sender: TObject);
  2. begin
  3.   query1.Close;
  4.   query1.SQL.text:='update BLIBROS set AREA = :area, FOLIO = :FOLIO, TITULO = :titulo WHERE TITULO and EDICION';
  5.   query1.Parambyname('area').AsString:=edit1.Text;
  6.   query1.Parambyname('FOLIO').AsString:=edit2.text;
  7.   QUERY1.ParamBYNAME('titulo').AsString:=edit3.Text;
  8.   query1.Refresh;
  9.   query1.ExecSQL;
  10. end;


  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 01 marzo 2010 - 10:09

Saludos.

Por favor, cuando vayas a postear un mensaje trata de que no sea en mayúscula.

El procedimiento Refresh se utiliza cuando esta Abierto el DataSet con una sentencia de Select.

En tu caso lo que andas buscando es una actualización no debes de llamar al Refresh, elimina esa línea y debería de funcionarte el Update.

Para actualizar un solo registro debes de tener un campo único que lo diferencie de los demás (valga la redundancia).  Mientras tus campos contengan el mismo valor siempre se actualizaran los que coincidan con esos criterios.
  • 0

#3 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 01 marzo 2010 - 10:39

Saludos.

Mariarosina1984, acá en el foro tenemos etiquetas para poner "lindo" los códigos tanto de Delphi como de SQL y de otras herramientas, aparte de ponerlos "lindo" también ayuda a su comprensión, así te pido, por favor, cuando postees algún tema y contenga códigos usa las etiquetas correspondientes.

Otra cosa adicional, si con los comentarios que te proporcionamos ayudamos a resolver el problema, es conveniente que marques el hilo como resuelto; con esto ayudaras a futuras búsquedas y miembros de nuestra comunidad.

Perdona que te pida realizar estos pequeños clic adicionales.
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 01 marzo 2010 - 10:54

la consulta está mal pues no estás especificando nada en el where, debería ser así:



delphi
  1. procedure TForm5.Button1Click(Sender: TObject);
  2. begin
  3.   query1.Close;
  4.   query1.SQL.text:='update BLIBROS set AREA = :area, FOLIO = :FOLIO, TITULO = :titulo WHERE libro_id = 150'; //el id del libro que tiene asignado en la tabla
  5.   query1.Parambyname('area').AsString:=edit1.Text;
  6.   query1.Parambyname('FOLIO').AsString:=edit2.text;
  7.   QUERY1.ParamBYNAME('titulo').AsString:=edit3.Text;
  8.   query1.ExecSQL;
  9. end;



Saludos.
  • 0

#5 mariarosina1984

mariarosina1984

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 215 mensajes

Escrito 01 marzo 2010 - 11:32

la consulta está mal pues no estás especificando nada en el where, debería ser así:



delphi
  1. procedure TForm5.Button1Click(Sender: TObject);
  2. begin
  3.   query1.Close;
  4.   query1.SQL.text:='update BLIBROS set AREA = :area, FOLIO = :FOLIO, TITULO = :titulo WHERE libro_id = 150'; //el id del libro que tiene asignado en la tabla
  5.   query1.Parambyname('area').AsString:=edit1.Text;
  6.   query1.Parambyname('FOLIO').AsString:=edit2.text;
  7.   QUERY1.ParamBYNAME('titulo').AsString:=edit3.Text;
  8.   query1.ExecSQL;
  9. end;



Saludos.

el SQL TE DEJA COMPARAR TITULO = EDICION ES LO KE KERIA HACER PARA QUE NO SE DUPLICARAN
  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 01 marzo 2010 - 11:35

Por favor, trata de escribir en minúsculas, aún así está mal, porque ni Titulo ni Edicion son iguales, es mas recomendable referirse al ID de dicho libro en el WHERE.

Saludos.
  • 0

#7 mariarosina1984

mariarosina1984

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 215 mensajes

Escrito 01 marzo 2010 - 11:45

Por favor, trata de escribir en minúsculas, aún así está mal, porque ni Titulo ni Edicion son iguales, es mas recomendable referirse al ID de dicho libro en el WHERE.

Saludos.

no entiendo `por que me pasa eso si titulo se repite y edicion no se repite no se por que se duplican el numero de folio
  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 01 marzo 2010 - 11:53

no entiendo `por que me pasa eso si titulo se repite y edicion no se repite no se por que se duplican el numero de folio


Precisamente por eso es que te recomiendo trabajar con el ID del libro en la clausula WHERE ya que es único, porque si trabajas con Titulo y Edicion existe la posibilidad en un 50% de que haya varios registros iguales, en cambio como el ID es único sólo atacará uno sólo en específico: el que quieres actualizar.

Saludos.
  • 0

#9 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 01 marzo 2010 - 12:34

Hola
Le tengo unas ganas a este programa :D :D :D
Saludos
  • 0

#10 mariarosina1984

mariarosina1984

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 215 mensajes

Escrito 02 marzo 2010 - 09:13

ya no hacen los cambios no se como hacer el guardar para que confirme la transsaccion y cual seria su sintaxis :huh: ?
  • 0

#11 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 02 marzo 2010 - 11:03



delphi
  1. procedure TForm5.Button1Click(Sender: TObject);
  2. begin
  3. query1.Close;
  4. query1.SQL.text:='update BLIBROS set AREA = :area, FOLIO = :FOLIO, TITULO = :titulo WHERE libro_id = 150'; //el id del libro que tiene asignado en la tabla
  5. query1.Parambyname('area').AsString:=edit1.Text;
  6. query1.Parambyname('FOLIO').AsString:=edit2.text;
  7. QUERY1.ParamBYNAME('titulo').AsString:=edit3.Text;
  8. query1.ExecSQL;
  9.  
  10. Query1.close;
  11. Query1.SQL.text:='select  * from blibros';
  12. Query1.Open;
  13. end;



La idea es que despues de hacer el update, lanzas una consulta al mismo query y con ello obtienes la actualizacion.

Esa idea creo me la dijo fenareth hace ya un tiempo y me ha funcionado bien.

Por otro lado puede usar el evento after insert del query y hacer un 

delphi
  1. blibros.refresh 



Lo del refresh si la tabla no es grande te funciona bien. 

Eduarcol me ha indicado siempre que las consultas debes limitarlas a los registros que vas a utilizar o ver. Por lo tanto si solo quieres ver en el otro form el registro que actualizaste. La consulta que puse arriba deberias hacerla

delphi
  1. query1.text:='select * from b libros where id='150'

o algo similar.

La idea es que solo busques lo que necesitas ver y todo funcionara mas rapido
  • 0

#12 mariarosina1984

mariarosina1984

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 215 mensajes

Escrito 05 marzo 2010 - 10:04



delphi
  1. procedure TForm5.Button1Click(Sender: TObject);
  2. begin
  3. query1.Close;
  4. query1.SQL.text:='update BLIBROS set AREA = :area, FOLIO = :FOLIO, TITULO = :titulo WHERE libro_id = 150'; //el id del libro que tiene asignado en la tabla
  5. query1.Parambyname('area').AsString:=edit1.Text;
  6. query1.Parambyname('FOLIO').AsString:=edit2.text;
  7. QUERY1.ParamBYNAME('titulo').AsString:=edit3.Text;
  8. query1.ExecSQL;
  9.  
  10. Query1.close;
  11. Query1.SQL.text:='select  * from blibros';
  12. Query1.Open;
  13. end;



La idea es que despues de hacer el update, lanzas una consulta al mismo query y con ello obtienes la actualizacion.

Esa idea creo me la dijo fenareth hace ya un tiempo y me ha funcionado bien.

Por otro lado puede usar el evento after insert del query y hacer un 

delphi
  1. blibros.refresh 



Lo del refresh si la tabla no es grande te funciona bien. 

Eduarcol me ha indicado siempre que las consultas debes limitarlas a los registros que vas a utilizar o ver. Por lo tanto si solo quieres ver en el otro form el registro que actualizaste. La consulta que puse arriba deberias hacerla

delphi
  1. query1.text:='select * from b libros where id='150'

o algo similar.

La idea es que solo busques lo que necesitas ver y todo funcionara mas rapido


pero como mando a llamar con el select el form de otro lado para ke se vean los datos modificado puede ser ke sea form3.query1.sql.text:='select * from blibros';
  • 0

#13 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 05 marzo 2010 - 10:26




delphi
  1. procedure TForm5.Button1Click(Sender: TObject);
  2. .
  3. .
  4. .
  5.   query1.Refresh;
  6. .
  7. .



Ésta línea está de más, tanto para el trabajo de SQL como para utilizarla en un cambio de forms.
  • 0

#14 mariarosina1984

mariarosina1984

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 215 mensajes

Escrito 09 marzo 2010 - 10:12

TODAVIA NO KEDA


delphi
  1. unit Unit5;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids, ExtCtrls, DBCtrls, Buttons,
  8.   ComCtrls, DBCGrids;
  9.  
  10.  
  11. type
  12.   TForm5 = class(TForm)
  13.     Button2: TButton;
  14.     Label1: TLabel;
  15.     Label2: TLabel;
  16.     Label3: TLabel;
  17.     Label4: TLabel;
  18.     Label5: TLabel;
  19.     Label6: TLabel;
  20.     Label7: TLabel;
  21.     Label8: TLabel;
  22.     Label9: TLabel;
  23.     Label10: TLabel;
  24.     Edit1: TEdit;
  25.     Edit2: TEdit;
  26.     Edit3: TEdit;
  27.     Edit4: TEdit;
  28.     Edit5: TEdit;
  29.     Edit6: TEdit;
  30.     Edit7: TEdit;
  31.     Edit8: TEdit;
  32.     Edit9: TEdit;
  33.     Edit10: TEdit;
  34.     Button1: TButton;
  35.     Query1: TQuery;
  36.     DataSource1: TDataSource;
  37.     procedure Button2Click(Sender: TObject);
  38.     procedure Button1Click(Sender: TObject);
  39.  
  40.  
  41. private
  42.     { Private declarations }
  43.   public
  44.     { Public declarations }
  45.   end;
  46.  
  47. var
  48.   Form5: TForm5;
  49.  
  50. implementation
  51.  
  52. uses Unit3;
  53.  
  54. {$R *.dfm}
  55.  
  56.  
  57.  
  58. procedure TForm5.Button1Click(Sender: TObject);
  59. begin
  60.   query1.Close;
  61.   query1.SQL.ADD('update BLIBROS set AREA= :area,FOLIO= :FOLIO, TITULO = :titulo WHERE ISBN = :ISBN');
  62.   query1.Parambyname('area').AsString:=edit1.Text;
  63.   query1.Parambyname('FOLIO').AsString:=edit2.text;
  64.   QUERY1.ParamBYNAME('titulo').AsString:=edit3.Text;
  65.   query1.ParamByName('ISBN').AsString:=edit6.Text;
  66.   query1.ExecSQL;
  67.  
  68.   query1.Close;
  69.   form3.Query1.SQL.Text:='select * from blibros';
  70.   query1.Open;
  71. end;
  72.  
  73. procedure TForm5.Button2Click(Sender: TObject);
  74. begin
  75.     CLOSE;
  76. end;
  77.  
  78.  
  79.  
  80. end.


ME SALE EL ERROR PROJECT1.EXE RAISED EXCEPTION CLASS ENOTRESULTSET WITH MESSAGE 'error creating cursor handle' cuando le doy guardar los cambios
  • 0

#15 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 09 marzo 2010 - 12:50

¿En que línea te arroja el error?
Lo único que veo de mal en la sentencia SQL es que no pones los espacios entre el campo y el igual en el campo AREA y FOLIO y que nombras a los parámetros exactamente con el mismo nombre del campo. Yo para evitar problemas le antepongo una P, de modo que quede algo como:

Moneda = PMoneda

Es posible que el error se deba a eso.

Saludos,
  • 0

#16 mariarosina1984

mariarosina1984

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 215 mensajes

Escrito 09 marzo 2010 - 12:53

no es por que no tenia actualizado puse query1.datasource.dataset.refresh;
  • 0

#17 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 09 marzo 2010 - 01:02

Hola
No se si te actualiza bien o no, pero no puedes abrir un query o table de un form que no esta abierto:


delphi
  1. procedure TForm5.Button1Click(Sender: TObject);
  2. begin
  3.   query1.Close;
  4.   query1.SQL.ADD('update BLIBROS set AREA= :area,FOLIO= :FOLIO, TITULO = :titulo WHERE ISBN = :ISBN');
  5.   query1.Parambyname('area').AsString:=edit1.Text;
  6.   query1.Parambyname('FOLIO').AsString:=edit2.text;
  7.   QUERY1.ParamBYNAME('titulo').AsString:=edit3.Text;
  8.   query1.ParamByName('ISBN').AsString:=edit6.Text;
  9.   query1.ExecSQL;
  10.  
  11.   query1.Close;
  12. //  form3.Query1.SQL.Text:='select * from blibros';
  13.   query1.Open;
  14. end;


Saludos
  • 0

#18 mariarosina1984

mariarosina1984

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 215 mensajes

Escrito 09 marzo 2010 - 01:31



delphi
  1. begin
  2.   query1.OPEN;
  3.   query1.SQL.text:='update BLIBROS set AREA= :area,FOLIO= :FOLIO, TITULO = :titulo WHERE ISBN = :ISBN';
  4.   query1.Parambyname('area').AsString:=edit1.Text;
  5.   query1.Parambyname('FOLIO').AsString:=edit2.text;
  6.   QUERY1.ParamBYNAME('titulo').AsString:=edit3.Text;
  7.   query1.ParamByName('ISBN').AsString:=edit6.Text;
  8.   query1.ExecSQL;
  9.   query1.DataSource.DataSet.Refresh;
  10. end;


  • 0

#19 mariarosina1984

mariarosina1984

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 215 mensajes

Escrito 10 marzo 2010 - 08:50

tengo otra duda en el form3 pase los datos por cada campo como hago eso para abir o cerrar o mejor no pongo nada por que ahi esta bien por que en el boton guardar no me lo hace
  • 0

#20 mariarosina1984

mariarosina1984

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 215 mensajes

Escrito 10 marzo 2010 - 09:43



delphi
  1. procedure TForm5.Button1Click(Sender: TObject);
  2. begin
  3.   query1.datasource.dataset.edit;
  4.   query1.SQL.text:='update BLIBROS set AREA= :area,FOLIO= :FOLIO, TITULO = :titulo WHERE ISBN = :ISBN';
  5.   query1.Parambyname('area').AsString:=edit1.Text;
  6.   query1.Parambyname('FOLIO').AsString:=edit2.text;
  7.   QUERY1.ParamBYNAME('titulo').AsString:=edit3.Text;
  8.   query1.ParamByName('ISBN').AsString:=edit6.Text;
  9.   query1.ExecSQL;
  10.   query1.post;
  11.  
  12. end;



ahora el query1: cannot modify a read-only dataset ¿Como corrijo ese error? mas bien como lo pongo en codigo en delphi 5.0
  • 0




IP.Board spam blocked by CleanTalk.