Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Como isertar datos sin usar DBedit (https://www.clubdelphi.com/foros/showthread.php?t=47494)

juangabriel1786 29-08-2007 21:01:18

Como isertar datos sin usar DBedit
 
Me gustaria saber como isertar datos sin usar DBedit en la base de datos, intente con esto

Código Delphi [-]
Tunidades.FieldByName('fecha_registro').Value:=DateToStr(Date);
   Tunidades.FieldByName('fecha_modificacion').Value:=DateToStr(Date);
   Tunidades.FieldByName('usuario_registro').Value:=usuario;
   Tunidades.FieldByName('usuario_modificacion').Value:=usuario;

pero me da un error al tratar de guardar los datos con esto

Código Delphi [-]
Tunidades.Edit;
  Tunidades.Post;
  Tunidades.Insert;
  Tunidades.Edit;

row cannot be located for updating, some values may have been changed since it was last read


La base de datos es Mysql usando ADO

este es el procedure de mi boton: que a la vez guarda y actualiza


Código Delphi [-]
procedure TFunidades.Button1Click(Sender: TObject);
var
   s:String;
begin
  s:='';
  //seleccionamos el campo activo o inactivo
  if RadioGroup1.ItemIndex = 0 then
       s:= 'A'
  else
       s:= 'I';
  DBactivo.Text:=s;
  
//aqui se guarda en la base de datos
  Tunidades.Edit;
  Tunidades.Post;
  Tunidades.Insert;
  Tunidades.Edit;

   //aqui estoy tratando de usignar datos a la base de datos, a parte de los datos que se asignan en el form
  
   Tunidades.FieldByName('fecha_registro').Value:=DateToStr(Date);
   Tunidades.FieldByName('fecha_modificacion').Value:=DateToStr(Date);
   Tunidades.FieldByName('usuario_registro').Value:=usuario;
   Tunidades.FieldByName('usuario_modificacion').Value:=usuario;}


  //conteo para llevar el codigo de la unidades contabilizado
  conteo:=conteo + 1;
  Tunidades.FieldByName('cod_unidad').Value:=conteo;

   DBedit2.SetFocus;

  showmessage('El registro se guardo satisfactoriamente');

end;

egostar 29-08-2007 21:07:42

Hola

¿Podrías colocar el código exacto de como es que realizas los procesos?

Así como lo pones, no se puede identificar nada.

PD, trata de utilizar las etiquetas delphi para que el código se vea mejor

No es lo mismo esto:

Tunidades.FieldByName('fecha_registro').Value:=DateToStr(Date);
Tunidades.FieldByName('fecha_modificacion').Value:=DateToStr(Date);
Tunidades.FieldByName('usuario_registro').Value:=usuario;
Tunidades.FieldByName('usuario_modificacion').Value:=usuario;

que esto:

Código Delphi [-]
 
   Tunidades.FieldByName('fecha_registro').Value:=DateToStr(Date);
   Tunidades.FieldByName('fecha_modificacion').Value:=DateToStr(Date);
   Tunidades.FieldByName('usuario_registro').Value:=usuario;
   Tunidades.FieldByName('usuario_modificacion').Value:=usuario;

Salud OS

Chris 29-08-2007 21:08:25

El código debe ser así
Código Delphi [-]
TUnidades.Edit;

    Tunidades.FieldByName('fecha_registro').Value:=DateToStr(Date);
   Tunidades.FieldByName('fecha_modificacion').Value:=DateToStr(Date);
   Tunidades.FieldByName('usuario_registro').Value:=usuario;
   Tunidades.FieldByName('usuario_modificacion').Value:=usuario;

TUnidades.Post; // aquí se guardan los registros

Si lo que quieres es agregar un nuevo registros, entonces cambia la primera línea "TUnidades.Edit;" por "TUnidades.Insert"

El procedimiento "Edit" es para editar un registro ya existente, y el "Insert" es para agregar un nuevo registro en blanco.

BlueSteel 29-08-2007 21:13:37

Hola...

primero que nada... podrias echarte un vistaso por guia de estilo

podrias aclarar que base de datos utilizas.. y que programa

si quieres almacenar datos en una tabla.. sin usar un DBEdit, te sugiero que realices una sentencia Query

por Ejm, quieres insertar una registro a la tabla Ciuda, la cual tiene los sgtes campos, Ciu_Codigo, Ciu_Nombre, Ciu_Region, todos estos campos son de tipo Varchar, y estan definidos pos TEdit

ponemos un componente de tipo Query (depende del tipo de base, será el que necesites), llamano QCiudad
el query para esto seria algo así

Código Delphi [-]
QCiudad.Close;
QCiudad.Sql.Clear;
QCiudad.Sql.Add('Insert Into Ciudad(Ciu_Codigo, Ciu_Nombre, Ciu_Region)');
QCiudad.Sql.Add('Values (:Var1, :Var2, Var3, Var4)');
QCiudad.Params[0].AsString := sCiu_Codigo.Text;
QCiudad.Params[1].AsString := sCiu_Nombre.Text;
QCiudad.Params[2].AsString := sCiu_Region.Text;
QCiudad.ExecSQl;

Con esto deberias tener como ejemplo.. si tiene un error, es por que lo hice así de memoria.. (y como la mia es fragil...)....

pero como te dije.. necesitas dar más información... espero que te sirva

juangabriel1786 29-08-2007 21:21:14

Realmente las unidades se registran en un form, y hay un boton que llama
a un formulario de busquedas de unidades,y si es necesario actualizar los registros
se actulizan, anteriormente en mi proyecto, asignaba datos, de la siguiente manera


Código Delphi [-]
DBfecha.Text:=DateToStr(Date);
   DBedit3.Text:=DateToStr(Date);
   DBusuario.Text:=usuario;
   DBedit4.Text:=usuario;

estos datos estaban asignados a los DBEDIT que tenian la opcion VISIBLE:=false, porque son
datos que los usuarios no pueden ver,pero es algo poco profecional, y por eso necesito una
forma de insertar datos a la tabla sin usar DBEDIT

Este codigo no es factible, ya que genera otro error.

Código Delphi [-]
TUnidades.Edit;

   Tunidades.FieldByName('fecha_registro').Value:=DateToStr(Date);
   Tunidades.FieldByName('fecha_modificacion').Value:=DateToStr(Date);
   Tunidades.FieldByName('usuario_registro').Value:=usuario;
   Tunidades.FieldByName('usuario_modificacion').Value:=usuario;

TUnidades.Post;

Por cierto uso mysql utilizando ADO

Caral 29-08-2007 21:21:47

Hola
viendo las respuestas que te han dado, coincido con egostar, es muy dificil analizar lo que quieres sin los datos necesarios.
Hay muchas maneras de hacer esto, tambien depende de la base de datos, ejemplos:
Código Delphi [-]
 Tunidades.FieldByName('fecha_registro').AsDate:=DateTimePicker1.Date;
   Tunidades.FieldByName('fecha_modificacion').AsDate:=DateTimePicker1.Date;
   Tunidades.FieldByName('usuario_registro').AsString:=Edti1.Text;
   Tunidades.FieldByName('usuario_modificacion').AsString:=Edtit2.Text;
Otra:
Código Delphi [-]
Tunidades.Fields[0].AsDate:=DateTimePicker1.Date;
Tunidades.Fields[1].AsDate:=DateTimePicker1.Date;
Tunidades.Fields[2].AsString:=Edti1.Text;
Tunidades.Fields[3].AsString:=Edtit2.Text;
Otra y la mas adecuada, con sql:
Código Delphi [-]
 AdoQuery1.SQL.Text := 'Insert into TuTabla Values ( '+Edit1.Text+ ', '+QuotedStr(Edti2.Text)+', '+QuotedStr(Edti3.Text)+', '+                                        DateToStr(DateTimePicker1.Date)+')';
AdoQuery1.ExecSQL;
Bueno son ideas.
Saludos

Chris 29-08-2007 21:56:09

Que tipo de error te da el código que te he dado?

Chris 29-08-2007 22:05:24

El código que has colocado está mal,
Código Delphi [-]
procedure TFunidades.Button1Click(Sender: TObject);
var
   s:String;
begin
  s:='';
  //seleccionamos el campo activo o inactivo
  if RadioGroup1.ItemIndex = 0 then
       s:= 'A'
  else
       s:= 'I';
  DBactivo.Text:=s;
  
//aqui se guarda en la base de datos
  Tunidades.Edit;
  Tunidades.Post;
  Tunidades.Insert;
  Tunidades.Edit;

   //aqui estoy tratando de usignar datos a la base de datos, a parte de los datos que se asignan en el form
  
   Tunidades.FieldByName('fecha_registro').Value:=DateToStr(Date);
   Tunidades.FieldByName('fecha_modificacion').Value:=DateToStr(Date);
   Tunidades.FieldByName('usuario_registro').Value:=usuario;
   Tunidades.FieldByName('usuario_modificacion').Value:=usuario;}


  //conteo para llevar el codigo de la unidades contabilizado
  conteo:=conteo + 1;
  Tunidades.FieldByName('cod_unidad').Value:=conteo;

   DBedit2.SetFocus;

  showmessage('El registro se guardo satisfactoriamente');

end;

Antes de mostrar el mensaje que "los registros se han guardado satisfactoriamente"
primero debes de llamar a POST.

debería de quedarte algo así
Código Delphi [-]
procedure TFunidades.Button1Click(Sender: TObject);
var
   s:String;
begin
  s:='';
  //seleccionamos el campo activo o inactivo
  if RadioGroup1.ItemIndex = 0 then
       s:= 'A'
  else
       s:= 'I';
  DBactivo.Text:=s;
  
//aqui se guarda en la base de datos
{Primero, debes de saber lo que quieres hacer, si es
MODIFICAR o AGREGAR un registro}

// si quieres modificar un registro, con esto es suficiente.
  Tunidades.Edit;

// si quieres agregar un nuevo registro, este sería el código:
  TUnidades.Insert;

   //aqui estoy tratando de usignar datos a la base de datos, a parte de los datos que se asignan en el form
  
   Tunidades.FieldByName('fecha_registro').Value:=DateToStr(Date);
   Tunidades.FieldByName('fecha_modificacion').Value:=DateToStr(Date);
   Tunidades.FieldByName('usuario_registro').Value:=usuario;
   Tunidades.FieldByName('usuario_modificacion').Value:=usuario;}


  //conteo para llevar el codigo de la unidades contabilizado
  conteo:=conteo + 1;
  Tunidades.FieldByName('cod_unidad').Value:=conteo;

  // con está línea guardas los cambios realizados
  TUnidades.Post;
  // si no pones la última línea, los cambios simplemente no serán guardados.
DBedit2.SetFocus;

  showmessage('El registro se guardo satisfactoriamente');

end;


La franja horaria es GMT +2. Ahora son las 21:23:26.

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