PDA

Ver la Versión Completa : Con delphi Insert en Firebird varios registros desde otra tabla


lasweb
04-04-2005, 16:00:53
Tengo que insertar varios registros de una tabla en otra que tiene los mismos campos, he probado con varios modos y solo me inserta el ultimo
with dei do
begin
Close;
sql.Clear;
SQL.Add('insert into dei (item,nupd,preco,quant) values '#39+veiitem.Value+#39+','+#39+veinupd.Value+#39+','+#39+veipreco.asstring+#39+','+#39+veiquant.asst ring+#39+')');
Open;
end;

Tambien intente de esta manera ya que el anterior me ingresa el ultimo

with dei do
begin
Close;
sql.Clear;
SQL.Add('insert into dei select * from vei WHERE' +#39+veinupd.Value+#39+ '='+#39+nroboleta.Caption+#39);
Open;
end;
Como puedo hacer desde ya gracias

jachguate
04-04-2005, 18:25:25
Hola lasweb, veo que es tu primer mensaje, asi que bienvenido al cub delphi.

Si lo que queres es "voltear" todos los registros de un dataset a otro, entre otras formas, podes hacer un "ciclo" que pase los registros uno por uno de un lado a otro... algo como:


Procedure TForm1.CopiarRegistros;

Begin
Tabla1.Open;
while not Tabla1.eof do
Begin
Tabla2.Insert;
Tabla2Campo1.Value := Tabla1Campo1.Value;
Tabla2Campo2.Value := Tabla1Campo2.Value;
Tabla2.Post;
Tabla1.Next;
end;
end;


Hay también otras formas de lograr el mismo resultado, quizas mas rápidas o eficientes, pero depende de si las tablas están en la misma base de datos, de que motor uses y algunas otras variables.

Hasta luego.

pd. ¿Notas la diferencia entre el código de delphi que yo he publicado y el tuyo?. Te recomiendo buscar al principio de cada foro el tema que habla sobre las etiquetas [ code ], [ delphi ] y [ sql ] especiales para publicar código.

;)

lasweb
04-04-2005, 20:29:31
Hola y gracias por la bienvenida al Grupo:

Mi idea es usar TIBquery por que son mas rapidas . Con TIBTable sabria como hacerlo. Las tablas estan en una misma base de datos Firebir 1.5 y contienen los mismos campos en nombre, tipo y longitud. Pero cuando actualizo las tablas con un una condicion toros los registros que sean igual a un determinado numero, solo me actualiza el ultimo si son 4 me actualiza el ultimo item. Y esa era mi pregunta como cargar efectivamente los registros de una tabla a otra.
con un comando where o algo similar.


Un abarzo y dese ya gracias

jachguate
04-04-2005, 20:58:26
El código que te di perfectamente puede ser usado sobre un TIBQuery.

El problema (que creí que seria evidente) es que vos no haces un ciclo, por lo que solamente se almacenará un registro (el que sea el registro actual del dataset fuente).

Si todo está en un firebird, lo que si será mas óptimo es hacer la inserción de los registros via SQL, entre mas registros sean, mas óptimo será, pues se evita todo el tráfico de red.

La instrucción para dos tablas de estructura identíca será asi:


Insert into TablaDestino
Select *
from TablaFuente
where condiciones;


Que podes enviar a ejecutar desde un TIBSQL o un TIBQuery.

Hasta luego.

;)