Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-04-2013
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Post Duplicar una tabla con otro nombre dentro de una base de datos de access desde delphi

Saludos, Esto es lo que quiero hacer.

tengo una base de datos de access donde tiene 2 tablas, 1-empleado1, 2-empleado2.

en delphi tengo un ADOconection, ADOtable y un DBGrid para ver la data.
Como puedo hacer que con un boton copiar la tabla que dice empleado1,con un nuevo nombre que yo ponga en el edit (Ejemplo empleado3) con solo dar clic en el boton, y asi cada vez que quiera copiar la misma tabla "Empleado1" pueda guardarla con nombres diferentes dentro de la misma base de datos?


Gracias, si no es mucho pedir, me podrian ayudar?

no soy muy pro en delphi

Responder Con Cita
  #2  
Antiguo 23-04-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola feliz-58.

Agregar un TADOQuery y proba de este modo:
Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  ADOTable1.Connection := ADOConnection1;
  ADOQuery1.Connection := ADOConnection1
end;

procedure CloneTable(aTable: TADOTable; aQuery: TADOQuery;
  const NewTableName: string);
var
  i   : Integer;
  Str : string;
begin
  Str := 'SELECT ';
  for i := 0 to aTable.FieldCount-1 do
    Str := Str + aTable.Fields[i].FieldName + ', ';
  SetLength(Str, Length(Str)-2); 
  Str := Str + ' INTO ' + NewTableName + ' FROM '+ aTable.TableName;
  with aQuery do
  begin
    Close;
    SQL.Text := Str;
    ExecSQL;
  end;
end;

Llamada ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  CloneTable(ADOTable1, ADOQuery1, Edit1.Text);
end;
No uso mucho ADO así que tal vez exista un modo mas simple o mejor de realizarlo. De ser así, seguro los compañeros mas experimentados con esos componentes te darán una mejor alternativa.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 23-04-2013
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Modificando la función de ecfisa, podemos copiar cualquier base de datos Origen o Destino
Código Delphi [-]
procedure CloneTable(TableSource, TableTarget: String);
begin
  with TADOQuery.Create(Self) do
  begin
    ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' + 
                        'Data Source=Unidad:\Ruta\BaseDeDatos.mdb;' + 
                        'Persist Security Info=False';

    SQL.Add('SELECT *');
    SQL.Add('  INTO ' + TableTarget);
    SQL.Add('  FROM ' + TableSource);

    ExecSQL;

    Free;
  end;
end;

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #4  
Antiguo 23-04-2013
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Gacias...

Cita:
Empezado por ecfisa Ver Mensaje
Hola feliz-58.

Agregar un TADOQuery y proba de este modo:
Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  ADOTable1.Connection := ADOConnection1;
  ADOQuery1.Connection := ADOConnection1
end;

procedure CloneTable(aTable: TADOTable; aQuery: TADOQuery;
  const NewTableName: string);
var
  i   : Integer;
  Str : string;
begin
  Str := 'SELECT ';
  for i := 0 to aTable.FieldCount-1 do
    Str := Str + aTable.Fields[i].FieldName + ', ';
  SetLength(Str, Length(Str)-2); 
  Str := Str + ' INTO ' + NewTableName + ' FROM '+ aTable.TableName;
  with aQuery do
  begin
    Close;
    SQL.Text := Str;
    ExecSQL;
  end;
end;

Llamada ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  CloneTable(ADOTable1, ADOQuery1, Edit1.Text);
end;
No uso mucho ADO así que tal vez exista un modo mas simple o mejor de realizarlo. De ser así, seguro los compañeros mas experimentados con esos componentes te darán una mejor alternativa.

Saludos.
Me sale este error:
Código Delphi [-]
[Error] Unit6.pas(33): Undeclared identifier: 'CloneTable'

como resolvemos este error?
Y gracias por la ayuda.
Responder Con Cita
  #5  
Antiguo 23-04-2013
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Ya lo resolvi.

Gracias, ya pude resolverlo, simplemtente coloque el Primer codigo despues de implementation , no sabes cuanto te agradesco.

Saludos.
Responder Con Cita
  #6  
Antiguo 26-04-2013
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Copiar una tabla con otro nombre dentro de la misma Base de datos access desde delphi

tengo este codigo para copiar una tabla con otro nombre diferente dentro de una misma base de datos:

Código Delphi [-]
...
implementation
procedure CloneTable(aTable: TADOTable; aQuery: TADOQuery;
  const NewTableName: string);
var
  i   : Integer;
  Str : string;
begin
  Str := 'SELECT ';
  for i := 0 to aTable.FieldCount-1 do
    Str := Str + aTable.Fields[i].FieldName + ', ';
  SetLength(Str, Length(Str)-2); 
  Str := Str + ' INTO ' + NewTableName + ' FROM '+ aTable.TableName;
  with aQuery do
  begin
    Close;
    SQL.Text := Str;
    ExecSQL;
  end;
end;


{$R *.dfm}

y la llamada:

Código Delphi [-]
procedure TNuevo_empleado.Button1Click(Sender: TObject);
begin
CloneTable(ADOTable1, ADOQuery1, Edit1.Text);
showmessage ('Su Nuevo Empleado a sido agregado');
edit1.Clear;
end;

La pregunta es, como copiar una tabla en espesifico, por el nombre, es decir, siempre tener como modelo la tabla llamada "original"?

Base de datos en Access, ADOconection, ADOtable, ADOquery.

gracias
Responder Con Cita
  #7  
Antiguo 26-04-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola feliz-58

Combiné tu último mensaje por que está en relación directa con este hilo.

Cita:
La pregunta es, como copiar una tabla en espesifico, por el nombre, es decir, siempre tener como modelo la tabla llamada "original"?
No entiendo bién lo que buscas, ¿ Podrías explicar con mas detalle la consulta ?

Por otro lado, fijate que es mucho mas simple y eficiente el modo que nos mostró olbeup.

Una variante del mismo puede ser:
Código Delphi [-]
procedure CloneTable(const OldTableName, NewTableName: string;
  Connection: TADOConnection);
begin
  with TADOQuery.Create(nil) do
  try
    Connection := Connection;
    Close;
    SQL.Text := 'SELECT * INTO ' + NewTableName + ' FROM '+ OldTableName;
    ExecSQL
  finally
    Free
  end
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 26-04-2013
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
La pregunta es la siguiente

tengo una tabla en la base de datos que esta sin ningun registro, el codigo que coloque, copia la primera tabla de la base de datos (Clona) y la copia la pega en la misma base de datos con el nombre que yo le indique en el edit, lo que quiero hacer es lo siguiente:
con el boton cada vez que quiera clonar la tabla que sea de una en especifico que si yo pongo en el codigo que la tabla original sea "Base" que siempre clone de esa, y las clonadas le defina el nombre con el edit que ya tengo.
Responder Con Cita
  #9  
Antiguo 26-04-2013
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Llamada

Cita:
Empezado por ecfisa Ver Mensaje
Hola feliz-58

Combiné tu último mensaje por que está en relación directa con este hilo.


No entiendo bién lo que buscas, ¿ Podrías explicar con mas detalle la consulta ?

Por otro lado, fijate que es mucho mas simple y eficiente el modo que nos mostró olbeup.

Una variante del mismo puede ser:
Código Delphi [-]
procedure CloneTable(const OldTableName, NewTableName: string;
  Connection: TADOConnection);
begin
  with TADOQuery.Create(nil) do
  try
    Connection := Connection;
    Close;
    SQL.Text := 'SELECT * INTO ' + NewTableName + ' FROM '+ OldTableName;
    ExecSQL
  finally
    Free
  end
end;

Saludos.
Como seria la llamada?
Responder Con Cita
  #10  
Antiguo 26-04-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola feliz-58.
Cita:
Empezado por feliz-58 Ver Mensaje
...lo que quiero hacer es lo siguiente:
con el boton cada vez que quiera clonar la tabla que sea de una en especifico que si yo pongo en el codigo que la tabla original sea "Base" que siempre clone de esa, y las clonadas le defina el nombre con el edit que ya tengo.
Si no te entendí mal basta con hacer:
Código Delphi [-]
procedure CloneTable(const NewTableName: string; Connection: TADOConnection);
begin
  with TADOQuery.Create(nil) do
  try
    Connection := Connection;
    Close;
    SQL.Text := 'SELECT * INTO ' + NewTableName + ' FROM nombre_de_la_tabla_base';
    ExecSQL
  finally
    Free
  end
end;

Cita:
Empezado por feliz-58 Ver Mensaje
Como seria la llamada?
Ejemplo de llamada para el código del mensaje #7:
Código Delphi [-]
  CloneTable('TABLA1', 'TABLA2', ADOConnection1);

Para el código de este mensaje:
Código Delphi [-]
  CloneTable('TABLA1', ADOConnection1);

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 26-04-2013
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Problema

Código Delphi [-]
procedure CloneTable(const NewTableName: string; Connection: TADOConnection);
begin
  with TADOQuery.Create(nil) do
  try
    Connection := Connection;
    Close;
    SQL.Text := 'SELECT * INTO ' + NewTableName + ' FROM llllllllll';
    ExecSQL <------------------- me resalta el delphi el problema
  finally
    Free
  end
end;

y la ventana de error es esta
Imágenes Adjuntas
Tipo de Archivo: jpg 1.jpg (9,0 KB, 3 visitas)
Responder Con Cita
  #12  
Antiguo 26-04-2013
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
Por favor cambie las siguientes dos líneas:

Código Delphi [-]
procedure CloneTable(const NewTableName: string; Connection: TADOConnection);
por
Código Delphi [-]
procedure CloneTable(const NewTableName: string; aConnection: TADOConnection);
y
Código Delphi [-]
Connection := Connection;
por
Código Delphi [-]
Connection := aConnection;
-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #13  
Antiguo 26-04-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Perdón, cambiá el nombre del parámetro 'Connection' por 'aConnection'.
Código Delphi [-]
procedure CloneTable(const NewTableName: string; aConnection: TADOConnection);
begin
  with TADOQuery.Create(nil) do
  try
    Connection := aConnection;
    Close;
    SQL.Text := 'SELECT * INTO ' + NewTableName + ' FROM llllllllll';
    ExecSQL
  finally
    Free
  end
end;

Saludos.


Edito: No había visto el mensaje de TOPX, que ya aclaraba el problema.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #14  
Antiguo 26-04-2013
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Gracias Amigos y perdonen las molestias, era que tenia que entregar ese trabajo hoy jeje.

Todo funciono perfectamente.

Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Como crear un formulario de iniciar sesion desde base de datos access?(Delphi 7) feliz-58 Varios 3 27-12-2012 16:38:26
Importar tablas Dbf a base de datos Access desde delphi yusnerqui Tablas planas 6 25-08-2010 23:10:02
Compactar Base d Datos Access desde Delphi. Drakyto Conexión con bases de datos 6 22-02-2010 22:23:29
Compactar Base d Datos Access desde Delphi. Drakyto Conexión con bases de datos 3 19-02-2008 02:57:07


La franja horaria es GMT +2. Ahora son las 04:45:24.


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
Copyright 1996-2007 Club Delphi