Ir al contenido


Foto

[RESUELTO] Append y Edit de un campo


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

#1 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 16 marzo 2010 - 05:16

De nuevo yo!

esto me funciona perfectamente



delphi
  1. with dmDatos.dstEntrada do
  2.     begin
  3.       Open;
  4.       Append;
  5.       FieldByName('ESTADOB').Value := 'ENPROCESO';
  6.       Post;
  7.     end;



pero esto no



delphi
  1. with dmDatos.dstEntrada do
  2.     begin
  3.       Open;
  4.       Edit;
  5.       FieldByName('ESTADOB').Value := 'TERMINADO';
  6.       Post;
  7.     end;



no recibo mensaje de error ni nada semejante, el registro no se actualiza al nuevo estado o valor.

¿alguna idea?

  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 16 marzo 2010 - 05:26

¿ Esa tabla solo tiene un registro ? ¿ O es un query que te muestra solo un registro ?

Así a ojos de buen cubero, me parece que no estás modificando el registro adecuado.

Salud OS
  • 0

#3 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 16 marzo 2010 - 05:47

Hola
Pero append no es el equivalente de insert ??.
No debería de ser:


delphi
  1. ith dmDatos.dstEntrada do
  2.     begin
  3.       Open;
  4.       Insert;
  5.       FieldByName('ESTADOB').Value := 'TERMINADO';
  6.       Post;
  7.     end;


Saludos

  • 0

#4 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 16 marzo 2010 - 06:04

De nuevo yo!

esto me funciona perfectamente

[
.
.
.
pero esto no

.
.
.

no recibo mensaje de error ni nada semejante, el registro no se actualiza al nuevo estado o valor.

¿alguna idea?


La idea es:
1.- En tu primer código, estás creando un registro nuevo, no necesitas posicionar el puntero al registro que debería ser.
2.- En tu segundo código, APARENTEMENTE ya estás posicionado en el registro que debería ser, pero al no verse explícitamente infiero que no estás donde debes.

Solución: Antes de darle el EDIT al registro, asegúrate que estás correctamente posicionado en el registro que debe ser actualizado, y entonces y sólo entonces, haces todos tus procesos de actualización.
  • 0

#5 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 16 marzo 2010 - 06:06

¿ Esa tabla solo tiene un registro ? ¿ O es un query que te muestra solo un registro ?

Así a ojos de buen cubero, me parece que no estás modificando el registro adecuado.

Salud OS


Esa Tabla tiene varios registros pero solo quiero modificar este unico registro.

Append o Insert si, son para crear nuevos registros pero no para modificar uno existente.

Jeje ¡si me equivoco me corrijen!

digo, no se... :)
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 16 marzo 2010 - 06:08

Efectivamente ese fué el sentido de mi primer comentario y asumo que el registro que se modifica siempre es el primero.

La otra es que no veo que tengas un close o un commit a la base y el registro nunca existe para ser modificado.

Salud OS

PD, la diferencia entre el insert y el append es que mientras el insert agrega un registro en donde está posicionado el cursor en la tabla el append lo hace al final de la tabla.
  • 0

#7 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 16 marzo 2010 - 06:09

mmmmm....  dejame masticarlo Felipe

creo que por ahi va el asunto... :s

  • 0

#8 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 16 marzo 2010 - 06:11

A pos... quería responder y justo veo que Eliseo me ganó

EDITO:
Además de lo que dice Eliseo, quizá tenga algo que ver el hecho de que en términos prácticos, para un motor SQL no tiene sentido la instrucción "Insert". Los registros no se colocan en la "posición" que se indica, no al menos físicamente. Eso está fuera de nuestro alcance... el motor solito se encarga de guardarlo en el lugar más conveniente del árbol.

Sería oportuno que nos indiques que componentes empleas y que versión de Firebird usas.

Saludos,
  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 16 marzo 2010 - 06:12

A pos... quería responder y justo veo que Eliseo me ganó

Saludos,


:cheesy: :cool:

Salud OS
  • 0

#10 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 16 marzo 2010 - 07:29

A pos... quería responder y justo veo que Eliseo me ganó

EDITO:
Además de lo que dice Eliseo, quizá tenga algo que ver el hecho de que en términos prácticos, para un motor SQL no tiene sentido la instrucción "Insert". Los registros no se colocan en la "posición" que se indica, no al menos físicamente. Eso está fuera de nuestro alcance... el motor solito se encarga de guardarlo en el lugar más conveniente del árbol.

Sería oportuno que nos indiques que componentes empleas y que versión de Firebird usas.

Saludos,


D2010, IBX y FB 2.1
  • 0

#11 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 16 marzo 2010 - 07:38

Bueno, pues continuo con esto. Un poco de teoria (jajajajaja)

Si puedo ver los datos del dbgrid entonces el datsource.dataset.query esta abierto
Cuando selecciono un registro en un DBgrid el registro seleccionado se vuelve el registro activo
Si creo otro form en tiempo de diseño (ahi es donde voy a usar los datos del registro activo) ¿que pasa con la query? ¿se cierra, sus datos dejan de estar disponibles?

Al parecer esto me esta sucediendo, pues los datos que obtengo son los del primer registro de la BD y no los que seleccione en el DBGrid

¡¡¡extraño, no lo entiendo!!!

  • 0

#12 Rolphy Reyes

Rolphy Reyes

    Advanced Member

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

Escrito 16 marzo 2010 - 07:59

Saludos.

Quizás quisiste decir en Run-Time, podrás acceder al mismo cursor siempre y cuando tu componente TDataSet este en un lugar publico para los formularios que necesitan del mismo;  una vez abierto por con solo asociar tu TDataSource se ve los datos.

Una recomendación, verifica antes de abrir si esta activo tu TDataSet.
  • 0

#13 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 20 marzo 2010 - 12:32

Saludos.

Quizás quisiste decir en Run-Time, podrás acceder al mismo cursor siempre y cuando tu componente TDataSet este en un lugar publico para los formularios que necesitan del mismo;  una vez abierto por con solo asociar tu TDataSource se ve los datos.

Una recomendación, verifica antes de abrir si esta activo tu TDataSet.


De nuevo por aqui, andaba en otros asuntos y no habia podido revisar, ¡Efectivamente estoy mal!

Ando con tantas cosas en la cabeza que no se ni que ...

En el grid muestro datos de un Query, selecciono un item y ¡lo quiero usar en otro formulario como registro activo del dataset!

Eso va a funcionar el dia de .............LSV

creo que lo correcto es llamar a una funcion del otro formulario enviando el item seleccionado como parametro, pero aqui me encuentro con algo que nunca he hecho o intentado: ¿Si creo el form en run-time seria posible llamar a esa funcion?

bueno es sabado (b) (b) (b)

  • 0

#14 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 22 marzo 2010 - 01:31

¿Pueden revisar esto y decirme si la sintaxys esta correcta?



delphi
  1. with dmDatos.qyBoletos do
  2.     begin
  3.         close;
  4.         sql.Clear ;
  5.         sql.Add('UPDATE dmDatos.dstEntradas SET ');
  6.         sql.Add('EstadoB = ' + QuotedStr('TERMINADO') + ''','); //Este seria el unico campo a actualizar
  7.         .
  8. .
  9. .
  10. .
  11.         sql.Add('TRANSITO=''' + be.Transito + ''',');
  12.         sql.Add('TRANSPORTE= ''' + be.Transporte + ''''); //Este y los anteriores son los campos y valores que ya existen y se conservan
  13.         sql.Add(' WHERE ID = ''' + IntToStr(be.ID) + '''');
  14.         ExecSQL;
  15.     end;



Gracias!

Cuando ejecuto la SQL me devuelve:

SQL Parse Error: EOF in String


  • 0

#15 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 22 marzo 2010 - 01:45

Hola
No entiendo lo de que los registros ya estan y se mantienen?.


delphi
  1. with dmDatos.qyBoletos do
  2.     begin
  3.         close;
  4.         sql.Clear ;
  5.         sql.Text:= 'UPDATE dmDatos.dstEntradas SET '+
  6.                   'EstadoB = TERMINADO'+ //Este seria el unico campo a actualizar
  7.                   ',TRANSITO = '+QuotedStr(be.Transito)+
  8.                   ',TRANSPORTE = '+QuotedStr(be.Transporte)+
  9.                   'WHERE ID = '+IntToStr(be.ID);
  10.         ExecSQL;
  11.     end;


Saludos
  • 0

#16 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 22 marzo 2010 - 01:48

Pues por lo que entiendo dmDatos es el datamodule y dstEntradas sería un Dataset, lo qué no sé si es válido dentro de una consulta SQL, ya que no lo he probado.
  • 0

#17 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 22 marzo 2010 - 01:49

hola, solo pasa el dato que deseas modificar, no es necesario que envíes los que no vas a modificar.



delphi
  1. with dmDatos.qyBoletos do
  2.     begin
  3.         close;
  4.         sql.Clear ;
  5.         sql.Text:= 'UPDATE Entradas '+
  6.                   ' SET EstadoB = "TERMINADO" '+ //Este seria el unico campo a actualizar
  7.                   ' WHERE ID = '+IntToStr(be.ID);
  8.         ExecSQL;
  9.     end;



Salud OS

Edito, ahora que lo veo, yo creo que solo es el nombre de la tabla, para que estas enviado el datamodule y el dataset, buen punto Fernando.
  • 0

#18 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 22 marzo 2010 - 01:51

Hola
Pues si, ademas creo que es repetitivo lo del datamodule:
dmDatos ya se usa con el with:


delphi
  1. with dmDatos.qyBoletos do
  2.     begin
  3.         close;
  4.         sql.Clear ;
  5.         sql.Text:= 'UPDATE dstEntradas SET '+
  6.                   'EstadoB = TERMINADO'+ //Este seria el unico campo a actualizar
  7.                   'WHERE ID = '+IntToStr(be.ID);
  8.         ExecSQL;
  9.     end;


saludos
  • 0

#19 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 23 marzo 2010 - 01:08

Parece que lo que necesitaba era un reset pues ando con varias cosas que no se ni que carajos. Al final esto quedo asi y ya funciona adecuadamente



delphi
  1. with dmDatos.dstEntradas do
  2.     begin
  3.       Close;
  4.       Modifysql.Clear ;
  5.       Modifysql.Add('update ENTRADAS SET ');
  6.       Modifysql.Add('EstadoB = ' + QuotedStr('TERMINADO'));
  7.       Modifysql.Add(' WHERE ID = ' + QuotedStr(IntToStr(be.ID)));
  8.       Open;
  9.       Edit;
  10.       Post;
  11.     end;



Por mi parte podemos dar este hilo por cerrado pero si alguien quiere aportar algo mas pues bienvenido.
  • 0

#20 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 23 marzo 2010 - 01:13

Hola


delphi
  1. with dmDatos.dstEntradas do
  2.     begin
  3.       Close;
  4.       Modifysql.Text:=
  5.       'update ENTRADAS SET '+
  6.       'EstadoB = ' + QuotedStr('TERMINADO')+
  7.       'WHERE ID = ' + QuotedStr(IntToStr(be.ID));
  8.       Open;
  9.       Edit;
  10.       Post;
  11.     end;


Asi me gusta mas jejejeje :D :D :D :p
Saludos
  • 0




IP.Board spam blocked by CleanTalk.