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)
-   -   insert que no funciona (https://www.clubdelphi.com/foros/showthread.php?t=20696)

kryna 22-04-2005 16:30:40

insert que no funciona
 
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..
Código:

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

La tabla necesita estar pocisionada en el ultimo registro
 
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

Solución a sentencia Insert.
 
: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


La franja horaria es GMT +2. Ahora son las 22:10:10.

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