Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Como insertar datos (https://www.clubdelphi.com/foros/showthread.php?t=75645)

javier.m866 09-09-2011 18:41:01

Como insertar datos
 
Hola a todos, mi problema es el siguiente. Tengo una base de datos hecha en Access 'Visitantes.mdb' con una tabla llamada 'Visitantes1' en mi form he puesto un Adoconnection, un Adotable, un Datasource y un DBGrird. Logro conectarlos todos perfectamente y se me visualizan los datos en el DBGrid, ahora me gustaría saber como puedo mediante un button insertar en la base de datos (en un campo determinado)
1-el texto de un edit.
2-Borrar un campo
3-modificar los datos de un campo
Muchas gracias de antemano por la atención prestada.

oscarac 09-09-2011 18:42:57

al decir borrar un campo es eliminar el campo de la tabla o borrar el contenido del campo?

tblvisitante.append (adicionar registro)

tblvisitante.edit (modificar registro)

oscarac 09-09-2011 18:44:37

si en lugar de usar en EDIT utilizas un DBEDIT, los cambios que hagan se grabaran automaticamente a tu base de datos cuando se hace

tblvisitante.post

javier.m866 09-09-2011 18:47:12

borrar sólo los datos
 
solamente los datos del campo

javier.m866 09-09-2011 18:53:36

por favor ponme un ejemplo
 
Disculpa es que soy nuevo en esto. No pudieras ponerme un ejemplo de como quedaría? porque utilicé 'tblvisitante.append (adicionar registro)' pero me da error

ecfisa 09-09-2011 18:55:32

Hola.

Como te aconsjea oscarac, usar TDBEdits es la opción más simple. Pero si aún decidis usar TEdits, sería:
Código Delphi [-]
{ Insertar }
procedure TForm1.btInsertarClick(Sender: TObject);
begin
  with ADOTable1 do
  begin
    Insert;  // o Append;
    FieldByName('Campo').AsString:= Edit1.Text;
    ...
    Post;
  end;
end;

{ Modificar }
procedure TForm1.btModificarClick(Sender: TObject);
begin
  with ADOTable1 do
  begin
    Edit;
    FieldByName('Campo').AsString:= Edit1.Text;
    ...
    Post;
  end;
end;

{ Borrar un registro }
procedure TForm1.btBorrarClick(Sender: TObject);
begin
  ADOTable1.Delete;
end;

Saludos.

microbiano 09-09-2011 18:59:29

pues mira yo siempre uso adoquery para insertar, modificar y eliminar, si te interesa pues puedo pasarte algunos codigo jejeje que tu implementarias o ajustarias, por ejemplo para modificar un campo

imagines un boton evento click y teniendo un adoquery conectado a la base de datos en el form

podria ser:

Código Delphi [-]
with adoquery do
begin
 sql.clear;
sql.add('update tabla set campo=:Pcampo');
sql.add('where campo=:Pclave');
parameter.parambyname('Pcampo').value:=valor a cambiaro o pasar la variable con el valos a modificar;
parameter.parambyname('Pclave').value:=algun valor para identificar el registro que quieres modificar;
execsql;

end

javier.m866 09-09-2011 19:01:50

Muchisimas gracias a todos.
 
Muchísimas gracias a todos, han sido de gran ayuda. Gracias de verdad.

borisf 22-10-2011 01:19:18

un problema con este codigo
 
Cita:

Empezado por ecfisa (Mensaje 411564)
Hola.
{ Insertar }
procedure TForm1.btInsertarClick(Sender: TObject);
begin
with ADOTable1 do
begin
Insert; // o Append;
FieldByName('Campo').AsString:= Edit1.Text;
...
Post;
end;
end;

Saludos.

Hola yo también soy nuevo en este lenguaje y me pasa un problema, mira este código arriba me funciona bien, pero tengo un problema y es que cuando estoy en un registro de mi tabla y uso el comando insert, se supone que me inserte la información en una posición por delante de la que estoy parado pero cuando corre el comando post para salvar los cambios el registro nuevo se adiciona al final de la tabla y no en la posición que deseaba, en verdad no se qué me está faltando?? Gracias por adelantado

Casimiro Notevi 22-10-2011 01:24:15

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración.

bulc 22-10-2011 15:51:23

¿Usar moldeador de TField?
 
Aunque tal vez no venga a cuento, apunto lo siguiente, pidiendo excusas si me salgo de cauce.
Es un punto que a me dio bastante la lata.
Veo que se usa la asignacion Tablax.(punto)Campo para apuntar a los campos. ¿No sería mejor usar la concatenación TablaxCampoY sin el punto por el medio? La única diferencia es que se tienen que cargar los campos durante el diseño, pero parece más propio, ¿no?
¿O hay alguna diferencia en usar uno u otro?

Table1.FieldByName('Campo').asString := Edit1.Text;
Table1Campox.Assign (o lo que sea)

ecfisa 22-10-2011 23:36:08

Cita:

Empezado por bulc (Mensaje 416476)
Aunque tal vez no venga a cuento, apunto lo siguiente, pidiendo excusas si me salgo de cauce.
Es un punto que a me dio bastante la lata.
Veo que se usa la asignacion Tablax.(punto)Campo para apuntar a los campos. ¿No sería mejor usar la concatenación TablaxCampoY sin el punto por el medio? La única diferencia es que se tienen que cargar los campos durante el diseño, pero parece más propio, ¿no?
¿O hay alguna diferencia en usar uno u otro?
Table1.FieldByName('Campo').asString := Edit1.Text;
Table1Campox.Assign (o lo que sea)

Hola bulc.

Hay varias formas para acceder a un campo:

Asignándolo directamente al nombre del campo persistente que hayamos creado:
Código Delphi [-]
  DataSetNombre.Value:= 'Juan';

Conociendo su posición, mediante la propiedad Fields:
Código Delphi [-]
  DataSet.Fields[0].Value:= 'Juan';

Conociendo su nombre, mediante la función FieldByName:
Código Delphi [-]
  DataSet.FieldByName('Nombre').Value:= 'Juan';


Mediante la propiedad FieldValues:
Código Delphi [-]
  DataSet.FieldValues['Nombre']:= 'Juan';
al ser esta la propiedad vectorial por defecto se puede simplificar a:
Código Delphi [-]
  DataSet['Nombre']:= 'Juan';
El resultado obtenido es el mismo, sea cual fuere el método que elijamos utilizar , pero:

Acceder mediante la propiedad Fields puede traer problemas si se reestructura la tabla y se cambia su posición, problema que no existe con el uso de FieldByName.

La asignación directa al nombre del campo es la más directa y eficiente, pero es la menos flexible. No podríamos por ejemplo, elegir un campo por nombre o posición en tiempo de ejecución.

Por último la opción más flexible es la propiedad vectorial por defecto ya que también permite cosas como:
Código Delphi [-]
var
  FV: Variant;
begin
  FV:= DataSet['Nombre;Domicilio;Telefono'];
  Label1.Caption:= FV[0]+' '+FV[1]+' '+FV[2]; 
  ...
Aunque esta flexibilidad paga un costo en eficiencia...

Saludos.

bulc 23-10-2011 15:16:23

Gracias, Ecfisa, por tu aclaración.

CHECHE81 25-10-2011 19:50:10

Saludos¡¡¡
Una cosa que yo utilizo es directamente el Grid junto con un Navigator asociado al DataSource y con ese objeto puedes hacer operaciones (Modificaciones, Agregar nuevo, Eliminar,Actualizar, Cancelar operación) que necesites sobre el registro seleccionado en tu Grid, directamente a los datos que te muestra, yo lo utilizo para catálogos pequeños, ok espero te sirva este dato.:cool:


(Navegador...):D


La franja horaria es GMT +2. Ahora son las 17:43:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi