Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-03-2009
Adrianmex Adrianmex is offline
Miembro
 
Registrado: mar 2009
Posts: 12
Poder: 0
Adrianmex Va por buen camino
Campo nuevo en tiempo de ejecución

Hola, soy nuevo en el foro y también nuevo en esto de la programación con Delphi, pero de antemano les agradezco la lectura de mi cuestión.

Resulta que tengo una ventana con una Ttable que ya contiene campos creados con el Database Desktop y registros en esos campos; tengo además dos edit y un botón.

Lo que quiero (y no he podido hacer ) es que con el botón se agregue un campo tipo string nuevo y permanente a la Ttable sin que se elimine nada de la información que ya contiene dicha tabla para enseguida, por medio del segundo edit, agregar información al campo recién creado.

He probado con FieldDefs.Add (porque no sé nada de Alter Table ni cosas de ésas) pero no me marca error al agregarlo, sino hasta cuando quiero adicionar registros al campo recién creado me dice que el campo no existe, es decir, que al corroborar con el Database Desktop, efectivamente no me creo nada de campo.

Espero haberme dado a entender.

Saludos.
Responder Con Cita
  #2  
Antiguo 13-03-2009
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola,
mediante el fielddef que hablas, lo unico que estaras modificando es el componente TTable, y no la base de datos que representa. La manera mas comoda que conozco es la que comentas, usando alter table mediante un query SQL. Si no quieres hacerlo asi, y supongo que estas usando ODBC, la cosa se complicaria un poco.
Responder Con Cita
  #3  
Antiguo 13-03-2009
Adrianmex Adrianmex is offline
Miembro
 
Registrado: mar 2009
Posts: 12
Poder: 0
Adrianmex Va por buen camino
Gracias, Coso, por tu diligente respuesta.

Bueno, tendré que aprender más eso de Alter Table si es la única manera para solucionar mi problema.

Ahora, si no es mucha molestia, ¿me podrías indicar tú u otro que esté más instruído que yo en eso de SQL cómo puedo agregar el contenido de un edit a la instrucción Alter Table para que el nuevo campo se llame como el texto que muestra el Edit?

De antemano y de nuevo, gracias por tu ayuda.
Responder Con Cita
  #4  
Antiguo 13-03-2009
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Te dejo aqui un manual de sql basico : http://sql.1keydata.com/es/sql-alter-table.php

en cuanto a lo q me has dicho, deberias usar un componente query (y mas adelante, te aconsejo que usases los componentes ADO). Seria algo asi, quiza tenga algun fallo de sintaxis, comillas o parecido:

Código Delphi [-]
 
datasource1.Dataset := query1;
query1.Active := false;
query1.SQL.Text := 'alter table ' + nombretabla + ' add ' + edit1.text + ' varchar(50)';
query1.ExecSQL;

como ves, la sentencia sql no es mas que una string. No recuerdo si son necesarias las comillas, entonces debes usar QuotedStr(Edit1.Text). Tambien, si te da excepcion, prueba query1.Active := true: estoy habituado a usar los componentes ADO para estas cosas, y creo que son algo diferentes, a ver si salta alguien que use los nativos de delphi y te lo explica mejor. un saludo.

Última edición por coso fecha: 13-03-2009 a las 17:40:48.
Responder Con Cita
  #5  
Antiguo 13-03-2009
Adrianmex Adrianmex is offline
Miembro
 
Registrado: mar 2009
Posts: 12
Poder: 0
Adrianmex Va por buen camino
De nuevo gracias, Coso, por tu ayuda.

Estaré revisando ese vínculo que me has dado. Espero poderlo hacer así como me indicas.

Nos leemos en otro tema y que estés bien.

Saludos.
Responder Con Cita
  #6  
Antiguo 13-03-2009
NeoNew NeoNew is offline
Miembro
 
Registrado: mar 2009
Ubicación: Bogotá
Posts: 49
Poder: 0
NeoNew Va por buen camino
Bueno yo utilizo Absolute DataBase y es muy facil, si te sirve aquí esta.
Responder Con Cita
  #7  
Antiguo 13-03-2009
Adrianmex Adrianmex is offline
Miembro
 
Registrado: mar 2009
Posts: 12
Poder: 0
Adrianmex Va por buen camino
Hola, NeoNew, he instalado y probado el componente que me indicas, pero al correr la aplicación me dice: "Undeclared identifier: 'aftString'" cuando quiero agregar un campo de tipo String, y realmente no sé qué está mal.

Si me pudieras auxiliar con eso, te lo agradecería mucho.
Responder Con Cita
  #8  
Antiguo 14-03-2009
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Adrian, no has comentado que tipo de tablas estas usando, el post corresponde a tablas Planas por lo que de ser así va a estar canijo que lo puedas hacer. Los motores de BD "grandes" si incorporan el soport para alter table completito como te dijeron, pero bueno...no te hemos preguntado para que quieres agregar un campo cada vez que presiones el botón, teóricamente podrías hacerlo muchas veces agregando un campo cada vez, cosa que no se me hace muy lógica.

Por que no nos platicas de que se trata lo que estás haciendo y te podemos ayudar además con la lógica del problema, recuerda que a veces uno piensa que la solución que escogimos es la mejor y sin embargo alguién mas puede pensar de otra forma mas sencilla.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #9  
Antiguo 14-03-2009
NeoNew NeoNew is offline
Miembro
 
Registrado: mar 2009
Ubicación: Bogotá
Posts: 49
Poder: 0
NeoNew Va por buen camino
Adrianmex: Debes incluir Uses ABSTypes; que son los tipos de datos de Absolute.
Mira mas aquí.
AzidRain: Yo los utilizo cuando pido en tiempo de ejecución un rango y quiero llenar una tabla con ese rango.
Responder Con Cita
  #10  
Antiguo 16-03-2009
Adrianmex Adrianmex is offline
Miembro
 
Registrado: mar 2009
Posts: 12
Poder: 0
Adrianmex Va por buen camino
Hola NeoNew, aquí molestando una vez más.

He agregado ABSTypes al uses y me funcionó de maravilla, el único detalle es que al crear el campo nuevo se elimina toda la información que ya contenía anteriormente la tabla y me deja únicamente con el campo recién creado. Como se ve, no estoy experimentado con eso y no sé si algo esté haciendo mal, pero lo he hecho tal y como indica el ejemplo de la página.
Responder Con Cita
  #11  
Antiguo 16-03-2009
NeoNew NeoNew is offline
Miembro
 
Registrado: mar 2009
Ubicación: Bogotá
Posts: 49
Poder: 0
NeoNew Va por buen camino
Holaa AdrianMex...
Agregar 40 campos string a una tabla:
Código Delphi [-]
  ABSTable1.Close;
  intHasta := 40;
  for i := 1 to intHasta do
  begin
    strCampo := IntToStr(i);
    ABSTable1.RestructureFieldDefs.Add(strCampo,aftString,10,False);
  end;
  ABSTable1.RestructureTable(absLog);
  ABSTable1.Open;

Me cuentas...
Responder Con Cita
  #12  
Antiguo 17-03-2009
Adrianmex Adrianmex is offline
Miembro
 
Registrado: mar 2009
Posts: 12
Poder: 0
Adrianmex Va por buen camino
Disculpa, pero aquí otra vez con lo mismo, NeoNew.

Entendí lo que me indicaste en el código Delphi que me dices que pruebe, pero el problema es que, digamos que ya agregué esos 40 campos que agrega el código ese, pero si esos campos los lleno de información y dentro de una semana más necesito agregar otros dos campos, al utilizar la función que me indicas, me elimina los campos y por lo mismo, la información existente para crearme los nuevos y eso es precisamente lo que no quiero, perder información almacenada anteriormente

Ya no quiero ser molesto con tanto, pero quisiera saber si se puede hacer eso que deseo o es sólo idea mía.
Responder Con Cita
  #13  
Antiguo 17-03-2009
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por Adrianmex Ver Mensaje
Ya no quiero ser molesto con tanto, pero quisiera saber si se puede hacer eso que deseo o es sólo idea mía.
Hola, si se puede con Alter Table como te ha indicado Coso, ¿has probado hacerlo de esa forma?. No he utilizado el componente Absolute DataBase, pero talvez tengas que tocar alguna de las propiedades para no perder los campos que tenías ni la información.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #14  
Antiguo 17-03-2009
Adrianmex Adrianmex is offline
Miembro
 
Registrado: mar 2009
Posts: 12
Poder: 0
Adrianmex Va por buen camino
Hola, Caro, al final probé con los componentes ABSTable, ABSQuery y ABSDatabase y me resultó, así como lo indicó Coso y como bien decías tú. Tan fácil como eso.

Muchas gracias a todos por la ayuda.

Saludos a Cochabamba, tierra de mi amor.
Responder Con Cita
  #15  
Antiguo 17-03-2009
NeoNew NeoNew is offline
Miembro
 
Registrado: mar 2009
Ubicación: Bogotá
Posts: 49
Poder: 0
NeoNew Va por buen camino
AndrianMex: Yo lo tengo trabajando bien y me funciona perfectamente.
No se borra la información, lo único que hace es adicionar nuevos campos a la tabla para luego llenarlos, lógicamente que si se adiciona el campo con el mismo nombre se borra el contenido anterior y lo deja sin info.
Por otro lado como dice Caro puedes usar SQL Alter Table.
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
Crear campo calculado en tiempo de ejecucion-Ibquery andresenlared Varios 12 19-06-2014 06:44:39
Debugear en tiempo de ejecucion ? ingel Varios 23 12-05-2006 19:23:13
Obtener el Nombre de un Campo en Tiempo Ejecucion Jvilomar Conexión con bases de datos 2 02-08-2004 23:05:22
Tiempo de ejecucion? st7 Varios 3 11-05-2004 22:03:28
Controles en tiempo de ejecución JCA OOP 4 13-02-2004 21:29:21


La franja horaria es GMT +2. Ahora son las 10:31:12.


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