PDA

Ver la Versión Completa : MS Access: query para crear tabla igual que otra


fonx
07-11-2007, 09:45:12
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:


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:


sql:='CREATE TABLE '+nombreTabla+' AS(SELECT * FROM PlantillaDatos)';


que se me pasó quitarla