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)
-   -   MS Access: query para crear tabla igual que otra (https://www.clubdelphi.com/foros/showthread.php?t=50058)

fonx 07-11-2007 09:45:12

MS Access: query para crear tabla igual que otra
 
Hola :), mi caso es el siguiente: tengo una base de datos en access con unas tablas con datos, todas ellas con la misma estructura porque cada tabla está asociada a una instancia de una clase de mi aplicación, tengo x instancias u objetos luego tengo x tablas.

Hasta el momento había creado esas tablas yo personalmente con copiar y pegar pero ahora quería automatizar el proceso, cuando cree un nuevo objeto que se me cree una nueva tabla para ese objeto. Tengo una tabla plantilla que no tiene datos, pero me da igual crear la nueva tabla a partir de la plantilla o crear la nueva tabla copiandola de otra con datos y luego vaciarla.

El caso es que acabo de dar con la query que me permita hacer eso, no se si es un CREATE TABLE con algo más o que.

¿Alguien me puede echar una mano? Gracias de antemano

fonx 07-11-2007 10:59:29

Después de haber buscado ayer por la tarde y hoy se ha cumplido la ley de Murphy q dice que cuando no encuentras algo después de intentarlo un rato largo postealo en un foro, justo después lo encontrarás tu solito por tus propios medios...

Hay mucha gente q pregunta algo en un foro y si después encuentra la solución no pone la respuesta...Como a mi no me gusta eso y para recibir ayudar hay q darla os pongo la solución PARCIAL que encontré. Repito es parcial, no encontré una sentencia SQL que me sirviera para access en mi propósito, lo que hice es lo siguiente:

Código:

Procedure TFNGC3.CrearTablaDatos(nombreTabla:string);
var
  sql:string;
begin
  sql:='CREATE TABLE '+nombreTabla+' AS(SELECT * FROM PlantillaDatos)';
  sql:='SELECT * INTO '+nombreTabla+' FROM PlantillaDatos';
  AComm1.CommandText := sql;
  AComm1.Execute();
  sql:='ALTER TABLE '+nombreTabla+' ADD CONSTRAINT PK_'+nombreTabla+' PRIMARY KEY (NOperacion)';
  AComm1.CommandText := sql;
  AComm1.Execute();
end;

Con el SELECT INTO copio la tabla origen (estructura + datos) en destino. No me hace falta vaciarla porque es una tabla vacía. Lo que pasa q las claves no me las copia así que acto seguido tengo q ponerlas yo con un ALTER TABLE.

Un saludo

fonx 07-11-2007 11:18:32

A ver, q soy un poco torpe, la siguiente instrucción sobra:

Código:

sql:='CREATE TABLE '+nombreTabla+' AS(SELECT * FROM PlantillaDatos)';
que se me pasó quitarla


La franja horaria es GMT +2. Ahora son las 19:35:05.

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