[RESUELTO] Consulta con un ABM en Delphi 7
Comenzado por
GUN10
, sep 26 2010 11:01
11 respuestas en este tema
#1
Escrito 26 septiembre 2010 - 11:01
Hola como están? Les quiero realizar la siguiente consulta.
Resulta que tengo un formulario con unos Edit en los cuales se pueden cargar valores para luego almacenarlos en la tabla de una base de datos.
Y tengo 4 botones con las operaciones básicas. Nuevo, Modificar, Borrar, Guardar y Cancelar.
El problema que tengo es con el código para el botón guardar y sobre todo con el manejo de los estados de la tabla.
Lo que quiero es que sirva tanto para la inserción como para la modificación de registros. Y asi evitarme crear otro botón y separar por una parte todo el código para insertar y por otra todo el código para modificar que prácticamente es lo mismo, la unica diferecia es el estado de la tabla.
Es posible realizar esto?
Lo que estuve probando es agregar al botón Nuevo, el código Tabla.insert; despúes de habilitar los Edit, limpiarlos y demás. Hasta ahí bien.
Luego en el botón Guardar, ya no definir el estado de la tabla teniendo en cuenta que ya debería estar en estado de inserción y directamente tomar los valores de los Edit para finalizar con Tabla.post;
Pero cuando lo hago así, Delphi me envía un error de que la tabla no esta es estado de inserción ni de moficación por lo tanto no lo puedo realizar.
Creo que la pregunta es bastante sencilla, pero me tope con esto y lo quiero para asi evitar tener que poner el mismo código en otro botón. Estuve buscando en google pero no encontre mucho. Sería algo similar a lo que hace el botón de Post en el DBNavigator, es solo un botón que sirve para la modificación y la inserción.
Espero haberme explicado.
Saludos!
Resulta que tengo un formulario con unos Edit en los cuales se pueden cargar valores para luego almacenarlos en la tabla de una base de datos.
Y tengo 4 botones con las operaciones básicas. Nuevo, Modificar, Borrar, Guardar y Cancelar.
El problema que tengo es con el código para el botón guardar y sobre todo con el manejo de los estados de la tabla.
Lo que quiero es que sirva tanto para la inserción como para la modificación de registros. Y asi evitarme crear otro botón y separar por una parte todo el código para insertar y por otra todo el código para modificar que prácticamente es lo mismo, la unica diferecia es el estado de la tabla.
Es posible realizar esto?
Lo que estuve probando es agregar al botón Nuevo, el código Tabla.insert; despúes de habilitar los Edit, limpiarlos y demás. Hasta ahí bien.
Luego en el botón Guardar, ya no definir el estado de la tabla teniendo en cuenta que ya debería estar en estado de inserción y directamente tomar los valores de los Edit para finalizar con Tabla.post;
Pero cuando lo hago así, Delphi me envía un error de que la tabla no esta es estado de inserción ni de moficación por lo tanto no lo puedo realizar.
Creo que la pregunta es bastante sencilla, pero me tope con esto y lo quiero para asi evitar tener que poner el mismo código en otro botón. Estuve buscando en google pero no encontre mucho. Sería algo similar a lo que hace el botón de Post en el DBNavigator, es solo un botón que sirve para la modificación y la inserción.
Espero haberme explicado.
Saludos!
#2
Escrito 27 septiembre 2010 - 02:40
Buenas,
Y no te sería más sencillo usar componentes DataAware? (es decir, TDBEdits,....). Estos controles ya se encargan de poner en edición el dataset asociado o de limpiar los campos en caso de inserción de un registro.
Así sólo tienes que controlar el "post" en un botón de "aceptar"
Nos leemos
Y no te sería más sencillo usar componentes DataAware? (es decir, TDBEdits,....). Estos controles ya se encargan de poner en edición el dataset asociado o de limpiar los campos en caso de inserción de un registro.
Así sólo tienes que controlar el "post" en un botón de "aceptar"
Nos leemos
#3
Escrito 27 septiembre 2010 - 09:34
Hola cadetill, gracias por la respuesta!
En el caso de utilizar estos componentes, a donde especifico que quiero hacer una inserción o una modificación? Eso no me quedo muy claro.
Otra cosa, en el boton Guardar es donde debería controlar el "post" como me decis, pero aqui solo iría por ejemplo:
Lo que me falta saber es a donde especifico "Tabla.Insert" o "Tabla.Edit". Teniendo en cuenta que tengo dos botones mas en el formulario "Nuevo y Modificar"
Saludos!
En el caso de utilizar estos componentes, a donde especifico que quiero hacer una inserción o una modificación? Eso no me quedo muy claro.
Otra cosa, en el boton Guardar es donde debería controlar el "post" como me decis, pero aqui solo iría por ejemplo:
delphi
TClientes.FieldByName('nombre').asstring:=Enombre.Text; TClientes.FieldByName('apellido').asstring:=Eapellido.Text; TClientes.FieldByName('direccion').asstring:=Edireccion.Text; TClientes.Post;
Lo que me falta saber es a donde especifico "Tabla.Insert" o "Tabla.Edit". Teniendo en cuenta que tengo dos botones mas en el formulario "Nuevo y Modificar"
Saludos!
#4
Escrito 27 septiembre 2010 - 09:44
Hola amigo GUN10...
De qué manera distinguirás que tu formulario esté en Inserción o Edición ???, es decir, cuándo decides que quieres hacer una inserción de un registro nuevo o una modificación de uno ya ingresado ?
Saludox !
De qué manera distinguirás que tu formulario esté en Inserción o Edición ???, es decir, cuándo decides que quieres hacer una inserción de un registro nuevo o una modificación de uno ya ingresado ?
Saludox !
#5
Escrito 27 septiembre 2010 - 09:46
Hola
Insert:
Edit:
Saludos
Insert:
delphi
TClientes.Last; TClientes.Insert; TClientes.FieldByName('nombre').asstring:=Enombre.Text; TClientes.FieldByName('apellido').asstring:=Eapellido.Text; TClientes.FieldByName('direccion').asstring:=Edireccion.Text; TClientes.Post;
Edit:
delphi
TClientes.edit;
Saludos
#6
Escrito 27 septiembre 2010 - 09:58
Gracias por las respuestas Fenareth y Caral.
Como lo explicaba en la primera parte, tengo 5 botones con los cuales quiero hacer lo siguiente.
Tengo un botón "Nuevo", el que indicaría que la tabla esta en estado de inserción y otro "Modificar" para poner la tabla en estado de edición.
El problema es que quiero poner UN solo botón para realizar el "Post" ya sea para la inserción o modificación y asi evitar tener que poner por ejemplo:
Botón que guarda un registro nuevo:
Botón que guarda cambios:
Que son practicamente lo mismo nada mas que cambia el estado de la tabla.
Como dije anteriormente, trate de poner el estado de la tabla cuando se hace click en el botón "Nuevo" pero despues me da un error cuando hago "post" desde el boton guardar, me dice que la tabla no esta en estado de edición ni de inserción.
Espero haberme explicado mejor. Saludos!
Como lo explicaba en la primera parte, tengo 5 botones con los cuales quiero hacer lo siguiente.
Tengo un botón "Nuevo", el que indicaría que la tabla esta en estado de inserción y otro "Modificar" para poner la tabla en estado de edición.
El problema es que quiero poner UN solo botón para realizar el "Post" ya sea para la inserción o modificación y asi evitar tener que poner por ejemplo:
Botón que guarda un registro nuevo:
delphi
TClientes.Insert; TClientes.FieldByName('nombre').asstring:=Enombre.Text; TClientes.FieldByName('apellido').asstring:=Eapellido.Text; TClientes.FieldByName('direccion').asstring:=Edireccion.Text; TClientes.Post;
Botón que guarda cambios:
delphi
TClientes.Edit; TClientes.FieldByName('nombre').asstring:=Enombre.Text; TClientes.FieldByName('apellido').asstring:=Eapellido.Text; TClientes.FieldByName('direccion').asstring:=Edireccion.Text; TClientes.Post;
Que son practicamente lo mismo nada mas que cambia el estado de la tabla.
Como dije anteriormente, trate de poner el estado de la tabla cuando se hace click en el botón "Nuevo" pero despues me da un error cuando hago "post" desde el boton guardar, me dice que la tabla no esta en estado de edición ni de inserción.
Espero haberme explicado mejor. Saludos!
#7
Escrito 27 septiembre 2010 - 10:03
Y si en el boton de Guardar colocas algo como:
De esta manera controlas el error que te manda el botón
Saludox !
delphi
if DataSet.State in [dsInsert,dsEdit] then DataSet.Post;
De esta manera controlas el error que te manda el botón
Saludox !
#8
Escrito 27 septiembre 2010 - 10:08
O puedes hacer esto también:
Me estoy perdiendo de algo ?
Salud OS
delphi
procedure TForm1.NuevoClick(Sender: TObject); begin TClientes.Insert; end; procedure TForm1.ModificarClick(Sender: TObject); begin TClientes.Edit; end; procedure TForm1.PostClick(Sender: TObject); begin TClientes.FieldByName('nombre').asstring:=Enombre.Text; TClientes.FieldByName('apellido').asstring:=Eapellido.Text; TClientes.FieldByName('direccion').asstring:=Edireccion.Text; TClientes.Post; end;
Me estoy perdiendo de algo ?
Salud OS
#9
Escrito 27 septiembre 2010 - 10:13
Segun lo tienes lo ideal seria asi:
Asi te ahorras tambien el boton nuevo.
delphi
if tCLientes.Locate('MiClave', 'Valor', [locaseinsensitive]) then TClientes.Edit else TClientes.Edit; TClientes.FieldByName('nombre').asstring:=Enombre.Text; TClientes.FieldByName('apellido').asstring:=Eapellido.Text; TClientes.FieldByName('direccion').asstring:=Edireccion.Text; TClientes.Post;
Asi te ahorras tambien el boton nuevo.
#10
Escrito 27 septiembre 2010 - 10:15
Hola
Lo ideal es SQL, pero tambien:
Aqui tienes un ejemplo con access.
Modifica, inserta, elimina y guarda.
Saludos
Lo ideal es SQL, pero tambien:
Aqui tienes un ejemplo con access.
Modifica, inserta, elimina y guarda.
Saludos
Archivos adjuntos
#11
Escrito 27 septiembre 2010 - 10:40
Buenas,
A ver, vayamos por partes. Si suponemos que tenemos 3 botones (añadir, modificar, aceptar), así de entrada te sobra el de modificar. Si usas componentes DataAware, éstos se encargarán de poner en edición el registro seleccionado (o de ponerlo en inserción si es que no hay registros en la tabla).
Entonces tenemos suficiente con 2 botones, añadir y aceptar.
¿Qué código hay que poner en cada uno de ellos? El código es fácil y sencillo
Botón añadir:
Botón aceptar:
Espero te ayude
Nos leemos
A ver, vayamos por partes. Si suponemos que tenemos 3 botones (añadir, modificar, aceptar), así de entrada te sobra el de modificar. Si usas componentes DataAware, éstos se encargarán de poner en edición el registro seleccionado (o de ponerlo en inserción si es que no hay registros en la tabla).
Entonces tenemos suficiente con 2 botones, añadir y aceptar.
¿Qué código hay que poner en cada uno de ellos? El código es fácil y sencillo
Botón añadir:
delphi
MiTabla.Append;
Botón aceptar:
delphi
if MiTabla.State in [dsInsert,dsEdit] then MiTabla.Post;
Espero te ayude
Nos leemos
#12
Escrito 27 septiembre 2010 - 11:19
Gracias a todos por las respuestas y recomendaciones que me dieron. Por suerte ya pude solucionar el problema y lograr que la aplicación realice lo que queria.
Estaba manejando el código que varios de ustedes me mostraron:
Pero parece que se daba el error que antes comentaba porque, en el botón "Guardar", hacia unas validaciones para que no me ingrese por ejemplo el mismo DNI o CUIT por medio de Locate(); Entonces quizás ahi ya se salia del estado de inserción o modificación.
Lo solucione gracias al código que también, varios de ustedes agregaron:
Al terminar de hacer las validaciones y búsquedas, vuelvo a poner la tabla en el estado que corresponde y hago "post"
Si hay algo que hice mal o creen que debo corregir, se los agradecere si me lo indican.
Pero por el momento va bien.
Saludos y nuevamente gracias!!
Estaba manejando el código que varios de ustedes me mostraron:
delphi
procedure TForm1.NuevoClick(Sender: TObject); begin TClientes.Insert; end; procedure TForm1.ModificarClick(Sender: TObject); begin TClientes.Edit; end; procedure TForm1.PostClick(Sender: TObject); begin TClientes.FieldByName('nombre').asstring:=Enombre.Text; TClientes.FieldByName('apellido').asstring:=Eapellido.Text; TClientes.FieldByName('direccion').asstring:=Edireccion.Text; TClientes.Post; end;
Pero parece que se daba el error que antes comentaba porque, en el botón "Guardar", hacia unas validaciones para que no me ingrese por ejemplo el mismo DNI o CUIT por medio de Locate(); Entonces quizás ahi ya se salia del estado de inserción o modificación.
Lo solucione gracias al código que también, varios de ustedes agregaron:
delphi
if Tabla.State in [dsInsert] then begin . . . Tabla.Post; end; else begin if Tabla.State in [dsEdit] then begin . . . Tabla.Post end; end;
Al terminar de hacer las validaciones y búsquedas, vuelvo a poner la tabla en el estado que corresponde y hago "post"
Si hay algo que hice mal o creen que debo corregir, se los agradecere si me lo indican.
Pero por el momento va bien.
Saludos y nuevamente gracias!!