![]() |
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. |
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. |
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. |
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:
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. |
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. |
Bueno yo utilizo Absolute DataBase y es muy facil, si te sirve aquí esta.
|
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. |
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. |
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. |
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. |
Holaa AdrianMex...
Agregar 40 campos string a una tabla:
Me cuentas... |
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. |
Cita:
Saluditos |
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. |
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.. |
La franja horaria es GMT +2. Ahora son las 07:34:23. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi