Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Duplicar una tabla con otro nombre dentro de una base de datos de access desde delphi (https://www.clubdelphi.com/foros/showthread.php?t=82899)

feliz-58 23-04-2013 05:00:33

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 :)

:D

ecfisa 23-04-2013 07:37:11

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. :)

olbeup 23-04-2013 08:53:13

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.

feliz-58 23-04-2013 15:27:15

Gacias...
 
Cita:

Empezado por ecfisa (Mensaje 459096)
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.

feliz-58 23-04-2013 15:40:17

Ya lo resolvi.
 
Gracias, ya pude resolverlo, simplemtente coloque el Primer codigo despues de implementation :), no sabes cuanto te agradesco.

Saludos. :D:D:D:D

feliz-58 26-04-2013 17:09:45

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 :)

ecfisa 26-04-2013 18:38:50

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. :)

feliz-58 26-04-2013 19:37:14

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.

feliz-58 26-04-2013 19:49:37

Llamada
 
Cita:

Empezado por ecfisa (Mensaje 459363)
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?

ecfisa 26-04-2013 19:57:32

Hola feliz-58.
Cita:

Empezado por feliz-58 (Mensaje 459370)
...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 (Mensaje 459371)
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. :)

feliz-58 26-04-2013 20:16:39

Problema
 
1 Archivos Adjunto(s)
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

TOPX 26-04-2013 20:27:16

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;
-

ecfisa 26-04-2013 20:30:36

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.

feliz-58 26-04-2013 20:49:32

Gracias Amigos y perdonen las molestias, era que tenia que entregar ese trabajo hoy jeje.

Todo funciono perfectamente.

Saludos :D;)


La franja horaria es GMT +2. Ahora son las 00:43:47.

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