PDA

Ver la Versión Completa : Como isertar datos sin usar DBedit


juangabriel1786
29-08-2007, 21:01:18
Me gustaria saber como isertar datos sin usar DBedit en la base de datos, intente con 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;

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

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


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:


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í

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 (http://www.clubdelphi.com/foros/guiaestilo.php)

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í


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


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.

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:

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:

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:

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,

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í

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;