PDA

Ver la Versión Completa : insert que no funciona


kryna
22-04-2005, 16:30:40
hola!!!

mi problema consiste en que esoy insertando registros en tablas paradox(son 3)
y en la tabla no me lo esta insertando como deberia me esta sbreescribiendo el registro anterior.. me explico

cuando inserto el registro 1 me lo copia en la fila cuyo indice numero1
cuando inserto el registro 2 me lo copia en la fila cuyo indice es numero 2 pero tambien el la fila anterior (osea la fila 1)..
cuando inserto el registro 3 me lo copia en la fila cuyo indice es numero 3 pero tambien el la fila anterior (osea la fila 2)...
osea me lo copia en la fila ql corresponde y tambien el la fila anterior..
if not Tbconcepto.active then Tbconcepto.open;
Tbconcepto.Insert;
Tbconcepto.FieldByName('cod_concepto').AsString := clave5;
Tbconcepto.FieldByName('cod_especialidad').AsString := clave;
Tbconcepto.FieldByName('descripcion_concepto').AsString := clave3;
try
Tbconcepto.Post;
except
Showmessage('Error insertando registro');
end;
Tbconcepto.FlushBuffers;
Tbconcepto.Close;
if not Tbcostos.active then Tbcostos.open;
Tbcostos.Insert;
Tbcostos.FieldByName('cod_concepto').AsString := clave5;
Tbcostos.FieldByName('costo').AsString := clavem;
Tbcostos.FieldByName('fecha').AsString := clavef;
try
Tbcostos.Post;
except
Showmessage('Error insertando registro');
end;
Tbcostos.FlushBuffers;
Tbcostos.Close;
if not Tbespecialidad.active then Tbespecialidad.open;
Tbespecialidad.Insert;
Tbespecialidad.FieldByName('cod_especialidad').AsString := clave;
Tbespecialidad.FieldByName('descripcion_especialidad').AsString := clave4;
Tbespecialidad.FieldByName('orden').AsString := claveo;
Tbespecialidad.FieldByName('nota').AsString := claven;
try
Tbespecialidad.Post;
except
Showmessage('Error insertando registro');
end;
Tbespecialidad.FlushBuffers;
Tbespecialidad.Close;

A otra cosa estoy usando entes de la insercion un Tquery para verificar si existe o no el registro..

kryna

Nelson Polanco
22-04-2005, 17:27:49
No se que consulta en tu query y esos valores que le pasas a los campos no se si los tendra claro pero esto que sigue debe funcionar.

if not Tbconcepto.active then
Begin
Tbconcepto.open;
Tbconcepto.Insert;
Tbconcepto.FieldByName('cod_concepto').AsString := "A5";
Tbconcepto.FieldByName('cod_especialidad').AsString := "Esp. A5";
Tbconcepto.FieldByName('descripcion_concepto').AsString := "Esta es la Especialidad";
Tbconcepto.Post;
End;
Debes usar Begin ... End; para una mejor logica de tus codigos.

Suerte.
Nelson Polanco
Rep. Dom.

kryna
22-04-2005, 17:51:46
hola nelson

ya probe como me sugeristes y tampoco me funciona...
matiene el mismo error..

no se que debo hacer tengo ya algunos dias con este problema

marcoszorrilla
22-04-2005, 19:19:17
Por qué no creas la tabla de nuevo, el código de Nelson es perfecto y el tuyo también debiera de funcionar.

Sino te da ningún error tendría que añadir un registro sin más problema.

Un Saludo.

migvaz5
22-04-2005, 20:27:20
Antes de poner el insert utiliza la funcion last de la tabla par que antes de insertar en ella se pocisione en el ultimo registro y asi inserte en ese.

O tambien puedes utilizar la funcion append

marcoszorrilla
22-04-2005, 21:13:44
No es necesario utilizar, Last, precisamente en algunas tablas esta instrucción es distinta a Append, porque lo que hace es eso insertar entre la fila quen os encontramos y la siguiente.

Un Saludo.

Dimanu
22-04-2005, 21:17:29
:cool: Hola Amigo delphiniano, te cuento que no debes utilizar la sentencia Insert sino la sentencia Append ya que el Insert debe averiguar primero la posicion a insertar la nueva tupla entre otras cosas y eso es tiempo...te recomiendo lo siguiente:

ntabla.open; //cuando abro la tabla se posiciona el 1er. registro
ntabla.append; //habilito nuevo al final
ntabla.fieldbyName('xfield1').asString := xValor1; //dato nro1.
ntabla.fieldbyName('xfield2').asString := xValor2;
ntabla.fieldbyName('xfield3').asString := xValor3;
ntabla.post; //luego de que grabo la tabla vuelve al estado dsBrowse

A estas sentencias la puede llamar desde un bucle o hacer un proc y pasarle parametros, etc..

kryna
22-04-2005, 21:28:27
Hola!!

Ya cree de nuevo las tablas...

Le coloce tb.last a cada una de las tablas.. y si me graba el registro en la ultima fila.. pero alguno valores (mejor dicho todos menos los campos comunes en las tabla) se graban tambien en la primera fila de las tablas..

porfa yo se que no debiera estar haciendo eso pero si lo hace

estoy desesperada