FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Detectar si una tabla existe
Pues tengo una base de datos access a la que accedo mediante delphi.
La idea que tengo es crear una tabla para cada año contable, asi que necesito saber si la tabla (por ejemplo) facturas2004 existe y, si no existe, hace una copia de una tabla de facturas maestra para empezar a trabar con ella en el periodo 2004, y asi con el año 2005, 2006, etc. Si alguien sabe como detectar si la tabla existe y, si no existe, crearla a partir de una copia de la maestra le estaria muy agradecido. Por suspuesto, tambien se aceptan sugerencias de cualquier otra forma de hacerlo, pero teniendo en cuenta que la tabla facturas tiene un campo ID autonumerico que debe ponerse a 0 cada vez que empiece el año, para que las facturas sean del tipo 1-04, 2-04, 1-05, etc. Un saludo. |
#2
|
||||
|
||||
Puedes hacerlo de dos maneras, o a lo borrico o de forma algo pulida
1.- Forma borrico: lanzas una query sobre esa tabla capturando errores 2.- A lo pulido Creo que todo componente Database tiene el método GetTableName que te pone en un TStrings las tablas que tiene el sistema Espero que te sirva
__________________
Si no tienes algo que decir más importante que el silencio, cállate |
#3
|
||||
|
||||
También puedes hacer los siguiente
Código:
with Query.SQL do begin Add( 'CREATE TABLE IF NOT EXISTS facturas'+FormatDateTime('yyyy', Now)+'( ' ); Add( 'aqui insertas los campos que quieras' ); Add( 'y aqui insertas las claves que utilices' ); Add( '); '; end; Query.ExecSQL; Saludos |
#4
|
||||
|
||||
¿No prefieres tener una sola tabla con un campo que identifique el año contable?
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#5
|
|||
|
|||
Pues no, prefiero tener cada año contable por separado.
Gracias las respuestas anteriores puedo detectar si la tabla existe o no y, si no existe crearla (muchas gracias a los dos por las respuestas), pero ahora me surge una duda, y es la manera de crear mediante la sentencia sql el campo Id de las facturas, que es un campo autonumerico que se incrementa automaticamente con cada nuevo registro, que creo que es lo unico que me falta. El resto de campos no son problema, pero nunca antes habia tratado con campos autonumericos en SQL, asi que no se si existe algun tipo de datos definido para estos casos. Un saludo. |
#6
|
||||
|
||||
Ok, no es una práctica que recomiende. Por otro lado, si se puede averiguar, por ejemplo el Jet tiene métodos para recuperar una colección con los objetos de la base de datos... ¿Cómo te conectas a la base de datos?
PD: Accediendo directamente al diccionario de datos, podrías hacer algo así:
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#7
|
|||
|
|||
La conexion la hago mediante Tquery y ADOQuery en cada momento, todos ellos configurados para que accedan mediante un alias creado en el sistema que apunta a la base de datos.
Ademas, todo esto viene a raiz de que trabajo sobre una base de datos ya creada que tenia un colega y a la que estoy haciendo una pequeña interfaz, pero se empeña en que no quiere variar NINGUN campo de la base de datos, ni añadir, ni eliminar ni modificar, asi que por eso trabajo con una tabla para cada año contable en lugar de añadir un campo que sea dicho año (esto no se lo cuentes a nadie, que es secreto ). En cuanto a lo que me comentas del diccionario de datos, no te entiendo bien (se nota que no soy precisamente una maquina de bases de datos en delphi xD). Si pudieses ser un poco mas explicito te lo agradeceria mucho. Un saludo. |
#8
|
||||
|
||||
Cita:
Cita:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. Última edición por delphi.com.ar fecha: 18-06-2004 a las 20:40:54. Razón: Corrección de las Etiquetas |
#9
|
||||
|
||||
Cita:
Código:
with Query.SQL do begin Add( 'CREATE TABLE IF NOT EXISTS facturas'+FormatDateTime('yyyy', Now)+'( ' ); Add( ' `id_registro` INT NOT NULL AUTO_INCREMENT, ' ); Add( ' ... resto de campos separador por comas ...' ); Add( ' PRIMARY KEY (`id_registro`)' ); Add( '); '); //----> final del añadir clausulas SQL end; Query.ExecSQL; |
#10
|
|||
|
|||
Pues la clausula AUTO_INCREMENT no me la acepta como sintaxis valida de SQL para Create Table (recordemos que trabajamos con una base de datos access) en el query.
Un saludo |
|
|
|