PDA

Ver la Versión Completa : Pasar una tabla o base de dato a otra


maxzama
08-01-2015, 16:46:30
-Hola, necesito pasar unos datos de una tabla a otra tabla, que octiene los mismo campos.

-Me pueden decir, que me hace falta o que ecolocado demas...


Error que muestra el sistema:

access violation at address 006D3BE5 in module Asistencia.exe write of address 0000000.

utilizo:

Delphi xe2, IBDataset. Firebird...

-IBDataset: ASISTENCIA_MADRE1.

El Codigo que se esta utilizando:

procedure TForm4.BitBtn1Click(Sender: TObject);
begin
if application.MessageBox('DESEA GUARDAR?','guardar un Registro',
MB_ICONQUESTION OR MB_YESNO) = ID_YES then
begin
Dmodulo.ASISTENCIA_MADRE1.Close;
Dmodulo.ASISTENCIA_MADRE1.SelectSQL.Text:=Dmodulo.ASISTENCIA_MADRE1.InsertSQL.Text;
DMODULO.ASISTENCIA_MADRE1.Open;
Dmodulo.ASISTENCIA_MADRE1.First;
while not Dmodulo.ASISTENCIA_MADRE1.Eof do
begin
Dmodulo.ASISTENCIA_MADRE1.ParamByName('TIPO_DOCUMENTO').Value:=Dmodulo.Asistencia.FieldByName('TIPO_ DOCUMENTO').Value;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('CEDULA').Value:=Dmodulo.Asistencia.FieldByName('CEDULA').Valu e;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('NOMBRE').Value:=Dmodulo.Asistencia.FieldByName('NOMBRE').Valu e;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('APELLIDO').Value:=Dmodulo.Asistencia.FieldByName('APELLIDO'). Value;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('CODIGO_COLEGUIO').Value:=Dmodulo.Asistencia.FieldByName('CODI GO_COLEGUIO').Value;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('COLEGUIO').Value:=Dmodulo.Asistencia.FieldByName('COLEGUIO'). Value;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('DIAS_TRABAJADO').Value:=Dmodulo.Asistencia.FieldByName('DIAS_ TRABAJADO').Value;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('TLF_FIJO').Value:=Dmodulo.Asistencia.FieldByName('TLF_FIJO'). Value;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('TLF_CELULAR').Value:=Dmodulo.Asistencia.FieldByName('TLF_CELU LAR').Value;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('CORREO').Value:=Dmodulo.Asistencia.FieldByName('CORREO').Valu e;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('MUNICIPIO').Value:=Dmodulo.Asistencia.FieldByName('MUNICIPIO' ).Value;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('PARROQUIA').Value:=Dmodulo.Asistencia.FieldByName('PARROQUIA' ).Value;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('DIAS_TRABAJADO1').Value:=Dmodulo.Asistencia.FieldByName('DIAS _TRABAJADO1').Value;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('DIAS_TRABAJADO2').Value:=Dmodulo.Asistencia.FieldByName('DIAS _TRABAJADO2').Value;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('DIAS_TRABAJADO3').Value:=Dmodulo.Asistencia.FieldByName('DIAS _TRABAJADO3').Value;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('DIAS_TRABAJADO4').Value:=Dmodulo.Asistencia.FieldByName('DIAS _TRABAJADO4').Value;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('DIAS_TRABAJADO5').Value:=Dmodulo.Asistencia.FieldByName('DIAS _TRABAJADO5').Value;
Dmodulo.ASISTENCIA_MADRE1.ParamByName('Monto').Value:=Dmodulo.Asistencia.FieldByName('Monto').Value;

Dmodulo.ASISTENCIA_MADRE1.Next;

Dmodulo.ASISTENCIA_MADRE1.ExecSQL;
Dmodulo.ibt.Commit; // ibt ibtrasaction
Dmodulo.ASISTENCIA_MADRE1.selectSQL.Clear ;
Dmodulo.ASISTENCIA_MADRE1.selectSQL.Add('select * from ASISTENCIA_MADRE ');
Dmodulo.ASISTENCIA_MADRE1.Open;

SHOWMESSAGE('El Monto a sido Insertado');
END;
end;
end;


Espero sus respuesta, Por favor y gracias...

Casimiro Notevi
08-01-2015, 16:49:18
Como ya supongo que lo sabes, pero aquí lo vuelvo a poner:
insert into tabladestino select * from tablaorigen

Pregunta si tienes alguna duda :)

maxzama
08-01-2015, 17:05:10
tambien ise esta modificación, en el codigo que tengo en el IBDataset.(y hago llamado en el codigo) Y me da el siguiente error.

Error que muestra el sistema:

Dynamic SQL error
SQL error code=-104
Token unknown - line 5, column 1
values.


Codigo en el IBDataset:

insert into ASISTENCIA_MADRE select * from DIASMADRE
(CEDULA,APELLIDO, CODIGO_COLEGUIO, COLEGUIO, CORREO, DIAS_TRABAJADO, DIAS_TRABAJADO1,
DIAS_TRABAJADO2, DIAS_TRABAJADO3, DIAS_TRABAJADO4, DIAS_TRABAJADO5,
MONTO, MUNICIPIO, NOMBRE, PARROQUIA, TIPO_DOCUMENTO, TLF_CELULAR, TLF_FIJO)
values
(:CEDULA,:APELLIDO, :CODIGO_COLEGUIO, :COLEGUIO, :CORREO, :DIAS_TRABAJADO, :DIAS_TRABAJADO1,
:DIAS_TRABAJADO2, :DIAS_TRABAJADO3, :DIAS_TRABAJADO4, :DIAS_TRABAJADO5,
:MONTO, :MUNICIPIO, :NOMBRE, :PARROQUIA, :TIPO_DOCUMENTO, :TLF_CELULAR,
:TLF_FIJO)

Casimiro Notevi
08-01-2015, 17:07:32
Claro, es una sentencia sql no válida.
Pero ¿eso tiene algo que ver con lo anterior?

maxzama
08-01-2015, 17:38:59
Si tiene que ver. estoy asiendo el llamado aqui:

IBdataset:ASISTENCIA_MADRE1.

// Dmodulo.ASISTENCIA_MADRE1.InsertSQL.Text;

Dmodulo.ASISTENCIA_MADRE1.Close;
Dmodulo.ASISTENCIA_MADRE1.SelectSQL.Text:=Dmodulo.ASISTENCIA_MADRE1.InsertSQL.Text;
DMODULO.ASISTENCIA_MADRE1.Open;

___________________________________________________

este es mi nuevo codigo, y tambien me da error:

insert into ASISTENCIA_MADRE
(CEDULA,APELLIDO, APELLIDO, CODIGO_COLEGUIO, CODIGO_COLEGUIO, COLEGUIO, COLEGUIO,
CORREO, CORREO, DIAS_TRABAJADO, DIAS_TRABAJADO1, DIAS_TRABAJADO1,
DIAS_TRABAJADO2, DIAS_TRABAJADO2, DIAS_TRABAJADO3, DIAS_TRABAJADO3,
DIAS_TRABAJADO4, DIAS_TRABAJADO4, DIAS_TRABAJADO5, DIAS_TRABAJADO5,
DIAS_TRABAJADO, MONTO, MONTO, MUNICIPIO, MUNICIPIO, NOMBRE, NOMBRE,
PARROQUIA, PARROQUIA, TIPO_DOCUMENTO, TIPO_DOCUMENTO, TLF_CELULAR,
TLF_CELULAR, TLF_FIJO, TLF_FIJO)
values
(:CEDULA,:APELLIDO, :APELLIDO, :CODIGO_COLEGUIO, :CODIGO_COLEGUIO, :COLEGUIO,
:COLEGUIO, :CORREO, :CORREO, : DIAS_TRABAJADO, : DIAS_TRABAJADO1, : DIAS_TRABAJADO1,
: DIAS_TRABAJADO2, : DIAS_TRABAJADO2, : DIAS_TRABAJADO3, : DIAS_TRABAJADO3,
: DIAS_TRABAJADO4, : DIAS_TRABAJADO4, : DIAS_TRABAJADO5, : DIAS_TRABAJADO5,
: DIAS_TRABAJADO, :MONTO, :MONTO1, :MUNICIPIO, :MUNICIPIO1, :NOMBRE,
:NOMBRE, :PARROQUIA, :PARROQUIA, :TIPO_DOCUMENTO, :TIPO_DOCUMENTO,
:TLF_CELULAR, :TLF_CELULAR, :TLF_FIJO, :TLF_FIJO)

Casimiro Notevi
08-01-2015, 17:42:19
Creo que no nos estamos entendiendo :D

Tú quieres pasar todos los registros de una tabla a otra tabla que tiene los mismo campos, ¿es eso?

maxzama
08-01-2015, 17:43:34
Si, quiero pasar una tabla a otra, con los mismo campos...

Casimiro Notevi
08-01-2015, 17:49:29
Si, quiero pasar una tabla a otra, con los mismo campos...
Bien, pues entonces solamente tienes que hacer lo que te he indicado al principio.
Te sobra todo ese código que has puesto.
Unicamente:
insert into tabladestino select * from tablafuente
Pon ese código en un ibquery y lo ejecutas, nada más.

maxzama
08-01-2015, 18:31:10
Aver si te entiendo ese codigo lo coloco Donde:

En el IBQuery(donde hago el llamado a la tabla): insert into tabladestino select * from tablafuente

y

En el boton donde le Doy la Acción. De pasar de una tabla a otra:

Dmodulo.ASISTENCIA_MADRE.Close;
Dmodulo.ASISTENCIA_MADRE.SQL.Text:='insert into ASISTENCIA_MADRE Select * from DiasMadres (APELLIDO, APELLIDO, CEDULA, CEDULA,CODIGO_COLEGUIO,CODIGO_COLEGUIO,COLEGUIO, COLEGUIO, CORREO, CORREO, DIAS_TRABAJADO, DIAS_TRABAJADO1,DIAS_TRABAJADO1, DIAS_TRABAJADO2, DIAS_TRABAJADO2, DIAS_TRABAJADO3,DIAS_TRABAJADO3, DIAS_TRABAJADO4, DIAS_TRABAJADO4, DIAS_TRABAJADO5, DIAS_TRABAJADO5, DIAS_TRABAJADO, MONTO, MONTO, MUNICIPIO, MUNICIPIO, NOMBRE, NOMBRE, PARROQUIA, PARROQUIA, TIPO_DOCUMENTO, TIPO_DOCUMENTO, TLF_CELULAR, TLF_CELULAR, TLF_FIJO, TLF_FIJO) values (:APELLIDO, :APELLIDO, :CEDULA, :CEDULA, :CODIGO_COLEGUIO, :CODIGO_COLEGUIO, :COLEGUIO, :COLEGUIO,:CORREO, :CORREO, : DIAS_TRABAJADO, : DIAS_TRABAJADO1, : DIAS_TRABAJADO1, : DIAS_TRABAJADO2, : DIAS_TRABAJADO2, : DIAS_TRABAJADO3,
: DIAS_TRABAJADO3, : DIAS_TRABAJADO4, : DIAS_TRABAJADO4, : DIAS_TRABAJADO5, : DIAS_TRABAJADO5, : DIAS_TRABAJADO, :MONTO, :MONTO, :MUNICIPIO, :MUNICIPIO,:NOMBRE, :NOMBRE, :PARROQUIA, :PARROQUIA, :TIPO_DOCUMENTO, :TIPO_DOCUMENTO, :TLF_CELULAR, :TLF_CELULAR, :TLF_FIJO, :TLF_FIJO)';

DMODULO.ASISTENCIA_MADRE.Open;


O no es asi en ninguna de las dos?...

Casimiro Notevi
08-01-2015, 18:37:35
Si quieres pasar todos los registros de una tabla a otra tabla.insert into tabladestino select * from tablafuenteNada más.

Pero si quieres hacer otra cosa, entonces no te has explicado bien.

maxzama
08-01-2015, 18:51:26
No quiero hacer otra funcion, solo quiero pasar los datos de una tabla a otra.

Por eso te preguntaba en el comentario anterior, si era asi. como lo tengo que hacer.

Ya que tengo un IBQuery donde llamo la base de dato.

Y un boton Donde le doy la Acción o le digo que haga. // que al precionarlo me pasa los datos de una tabla a otra.

Disculpas las molestias. Pero no se, si es que me hago entender...

Casimiro Notevi
08-01-2015, 19:01:30
Pues no sé, creo que está bastante claro. Tú dices que quieres pasar TODOS los registros de una tabla o otra tabla.
Yo te contesto que solamente has de ejecutar la siguiente sentencia: insert into tabladestino select * from tablaorigen
Eso es todo, no tienes nada más que hacer, sobra todo tu código, bórralo, elimínalo, no sirve para nada, no hace falta. Así de simple.

maxzama
08-01-2015, 19:07:15
Disculpa que moleste nuevamente.

Bueno creo que no me hecho entender ese codigo, Que me estas dando.

Lo tengo que colocar en el boton donde estoy dando la accion o en el IBQUERY(donde hago el llamado de la base de dato).

Casimiro Notevi
08-01-2015, 19:20:13
Si tienes un botón, al pulsarlo, por ejemplo
ibquery.close;
ibquery.selectsql.text := "insert into tabledestino select * from tablafuente";
ibquery.execsql;

maxzama
08-01-2015, 19:49:04
Aun me sigue dando error:

Error del sistema:

access violation at address 006D3BE5 in module Asistencia.exe write of address 0000000.

Este es el codigo que se tiene en el boton:

if application.MessageBox('DESEA GUARDAR?','guardar un Registro',
MB_ICONQUESTION OR MB_YESNO) = ID_YES then
begin
Dmodulo.ASISTENCIA_MADRE.Close;
Dmodulo.ASISTENCIA_MADRE.SQL.Text:='insert into ASISTENCIA_MADRE select * from DiasMadre';
DMODULO.ASISTENCIA_MADRE.Open;
Dmodulo.ASISTENCIA_MADRE.First;

Dmodulo.ASISTENCIA_MADRE.ExecSQL;
Dmodulo.ibt.Commit; // ibt ibtrasaction
Dmodulo.ASISTENCIA_MADRE.SQL.Clear ;
Dmodulo.ASISTENCIA_MADRE.SQL.Add('select * from ASISTENCIA_MADRE ');
Dmodulo.ASISTENCIA_MADRE.Open;

SHOWMESSAGE('El Monto a sido Insertado');
end;


Y en el IBQuery tengo el siguiente codigo:

Select * from ASISTENCIA_MADRE

Casimiro Notevi
08-01-2015, 20:05:04
¿Y eso qué tiene que ver con lo que te he escrito una cuantas veces? :confused:

Casimiro Notevi
08-01-2015, 20:07:26
En ese Data Module llamado Dmodulo, pon un ibquery.
Luego copias este código al pulsar el botón (y borra todo lo que tienes escrito)
ibquery.close;
ibquery.selectsql.text := "insert into tabledestino select * from tablafuente";
ibquery.execsql;

maxzama
08-01-2015, 20:32:46
El Error que tenia en todo el codigo era:

DMODULO.ASISTENCIA_MADRE.Open;

if application.MessageBox('DESEA GUARDAR?','guardar un Registro',
MB_ICONQUESTION OR MB_YESNO) = ID_YES then
begin
Dmodulo.ASISTENCIA_MADRE.Close;
Dmodulo.ASISTENCIA_MADRE.SQL.Text:='insert into ASISTENCIA_MADRE select * from DiasMadre';
DMODULO.ASISTENCIA_MADRE.Open;

Dmodulo.ASISTENCIA_MADRE.ExecSQL;
Dmodulo.ibt.Commit; // ibt ibtrasaction
Dmodulo.ASISTENCIA_MADRE.SQL.Clear ;
Dmodulo.ASISTENCIA_MADRE.SQL.Add('select * from ASISTENCIA_MADRE ');
Dmodulo.ASISTENCIA_MADRE.Open;

SHOWMESSAGE('El Monto a sido Insertado');
end;

// era por algo tonto(que no corria), y lo tenia en mis narices y no lo vi.

Gracias por la Ayuda panal. y la pasiencia...