![]() |
Validar celdas de un stringgrid
Hola de nuevo, mi duda es la siguiente, como hacer que el usuario pueda escribir solo en una celda.Lo que quiero es validar la entrada del usuario, y que solo sean numeros, me imagino que debe ser en el evento OnKeyPress del StringGrid. Quiero validar en la columna 8(osea en la 7 ya que cuenta desde 0)que en las celdas de esa columna solo se pueda escribir, en las demas no.Gracias
|
Hola Elite 237, tendrías que preguntar por la columna, validar y si es otra no dejar escribir.
Saluditos |
Gracias caro, quedo resuelto mi duda, muchas gracias por tu tiempo.Tenia rato que no contestabas algunas de mis dudas,ya te extrañaba:D
|
Cita:
Saluditos |
Actualizar y/o Eliminar Filas de un StringGrid
Hola de nuevo caro, una duda, ¿como puedo borrar y/o actulizar una fila completa de un stringgrid desde un boton que tengo en mi formulario?Espero haberme dado a entender.Saluditos
|
Hola Elite237,
Para borrar se puede emplar el método Clear ya sea de la propiedad Cols o Rows, según se necesite. Por ejemplo:
Borrará el contenido de la columna 1. Y para actualizar, no queda otra que recorrer fila a fila, o columna a columna y sustituir el contenido. Por ejemplo algo como esto:
Recuerda que Cols y Rows no corresponden a la normal representación e idea de lo que se entiende por una tabla. Lo que es Cols en StringGrid equivale a las filas, y a la inversa Rows a las columnas. La verdad es que no se porqué programaron de ese modo al TStringGrid. Saludos, |
Hola que tal Delphius, gracias por contestar, tengo una duda acerca del clear. Dices que seria SringGrid.clear....ok..ok, pero lo que quiero hacer es esto: de 4 columnas que tengo nombre, apellidos,direccion,telefono, lo que quiero es que en el propio stringgrid yo pueda modificar los datos de esa fila(ya coloque a true la opcion goEditing) y despues guardarlos en mi base de datos..en si quiero eliminar registros y actualizar registros(filas) del stringgrid. Ya tengo los botones eliminar y actualizar.
|
Cita:
En tiempo de diseño Col corresponde a las Columnas y Row a las Filas, así como en algunas otras propiedades que se manejan ya en el código... Sólo aclarando :o :p ;) :) Para poder insertar los registros mostrados en el StringGrid en la Tabla correspondiente tendrás que hacer un recorrido por las filas del mismo e ir transfiriendo el contenido de cada una de las celdas al campo correspondiente en la Tabla. |
Cita:
Dije que es: StringGrid1.Cols[Numero].Clear; // o bien... StringGrid1.Rows[Numero].Clear; Lo que hace el Clear es borrar TODA la fila o clumna, según sea el caso. Por lo otro, no veo donde está el problema. Si tienes los datos, en el StringGrid y deseas volcarlos a un registro de una tabla, basta con "recorrer" la fila en cuestión columna a columna y componer la instrucción SQL. Por ejemplo:
¿Esa es tu duda?:confused: Saludos, |
Ese codigo seria en el boton de actualizar me imagino..pero seria asi no?
una duda que significa YyyToxxx...te refieres a algo asi como StrToInt verdad
|
Cita:
No me había dado cuenta de que habías posteado. Disculpa. Saludos, |
Cita:
¡Sin la condición actualizas todos los registros! Efectivamente, cuando hablé sobre YyyToXxx, o YyyToZzz me refiero a que debes realizar la conversión en forma adecuada al tipo. ¡PERDON! Cometí un error antes. Es:
Recuerda, mis ejemplos son empleando TADOQuery, si usas otros componentes Querys, Es posible que no sea Parameters, sino Params.ParamByName().AsXxxx y en este caso, no es necesario el DataType. No te olvides indicar que componentes usas. Dependiendo de ello la sintaxis puede variar un poco. Saludos, |
Gracias de nuevo Delphius, este es el codigo que implemente, los componentes que uso son query y un database
Pero me manda un error de sql..la verdad nose que error sera, se que es por que tengo mal mi sentencia, pero exactamente a que se refiere pues no.Ah..otra cosa, le quite lo de la conversiones puesto que me decia incompatibles string and integer. |
Elite237, no te enojes pero cuando uno dice que le da error debe decir que error, y donde... ¡No soy adivino!
¿Leíste mi mensaje anterior? Leelo, tu consulta UPDATE está mal hecha. Por otro lado, ¿que componentes estás empleando? ¿TADOQuery? ¿TQuery? Si es TADOQuery el uso de parámetros es así:
Si es un TQuery, u otro que emplee parametros de la clase TParams (la clase TADOQuery usa parametros de clase TParameters, de allí su diferencia), el uso es así:
¿Me explico? Saludos, |
Disculpame Delphius, estoy metiendo cosas donde no es..el componente que uso es TQuery. El error era por que escribi
y es update evaluacion set
asi deje mi codigo por ultimo
espero np haber hecho otra cosa mal, no te quiero desesperar delphius.Saludos |
Sigo viendo el mismo error en tu consulta Elite237.
Por otro lado, recién ahora me doy cuenta de que metí mal el dedo. Una consulta UPDATE se construye sin esos paréntesis:
Y noto en tu código que tienes un for y dentro de él supuestamente muchas sentencias. Si quieres que se ejecuten todas, debes poner un begin-end entre el for:
Según como lo tienes el FOR lo único que hará es la primera línea. Fíjate bien.... Tomate el tiempo, no te apresures ni arrebates. Como usas TQuery, imagino que empleas componentes DBE. En ese caso, el uso de parámetros es como he indicado antes:
Saludos, |
Holitas
Cita:
Para borrar una fila de un StringGrid debes utilizar el procedimiento DeleteRow donde le pasas como parametro la fila a eliminar, pero como es un metodo protegido, primero defines un nuevo tipo que herede de un TStringGrid.
Sobre actualizar, como te dice Marcelo, esta mal la sintaxis del update, supongo que quieres actualizar la fila actual, si es así no necesitas el ciclo.
Ahora no se si tu quieres actualizar todas las filas de tu StringGrid, de la forma que esta tu ciclo, se va actualizar la cantidad que tienes en ColCount y la fila i. No te olvides poner una condición a tu update, sino la actualización se hara para todos tus registros. Saluditos |
Cita:
Tienes razón, yo estaba entendiendo a que "Borrar" se refiere a limpiar el contenido de la fila o columna.:( Sería oportuno que Elite237 nos haga saber si por borrar se refiere a eliminar, o por el contrario a limpiar el contenido. De ese modo sabré si lo estado aconsejando mal. Saludos, |
Hola delphius y caro...si, lo que quiero es borrar toda la fila. Delphius no es limpiar el contenido sino borrar toda la fila.Y el update lo quiero hacer para una sola fila, osea que el usuario edite en el stringgrid.Gracias por contestar.Saludos
|
Cita:
Saluditos |
Hola caro, quitando el for...en mi update, si lo hago bien?osea se que me falta el where, pero aparte de eso quiero saber si estoy asignando correctamente los valores a los campos de mi BD.En caso de que este mal, me puedes decir donde esta mi error?
|
Cita:
Debes cambiar el i por Row ya que con la propiedad Row del StringGrid obtienes la fila actual y no necesitas el ciclo for, ahora si quieres armar las columnas talvez, pero también puedes acceder directamente a las columnas de la fila actual, como te puse arriba.
Saluditos |
Ok..Gracias Carito..lo hare como me dices mas adelante te digo como voy en mi desarrollo.Gracias por tu tiempo.
|
Elite237, disculpame pero no se de que modo decirte que la consulta SQL está mal hecha, una instrucción SQL de UPDATE no se escribe así.
Es así:
La verdad es que desde la mitad del hilo te estado llamando la atención al respecto del tema. No se de que modo hacerme entender. Por el otro lado, siempre y cuando en esa variable "i" que tienes en tu código referencie a la fila en cuestión no veo problemas. Lo que si veo que está demás son esos paréntesis cuando haces el paso de los valores a los parámetros. Como te mencionaba Caro, la consulta UPDATE debe ir con una cláusula de condición. Sin ella lo que consigues es cambiar EN TODOS LOS REGISTROS DE LA TABLA. Por ello Caro habla de que debes tener de algún modo relacionado a la fila i-ésima con el código del registro al que representa. Es decir que debe haber alguna correspodencia entre las filas y el campo "identificador" en la tabla. Por darte un ejemplo: Fila 1 -> corresponde al registro cuyo ID es 100 Fila 2 -> corresponde al registro cuyo ID es 287 Generalmente este ID no cambia (no debería cambiar) y una manera sencilla para evitar que el usuario lo cambie, es que cuando vuelcas los datos al TStringGrid, a la columna 0 (esa columna gris y fija que no se puede modificar) la emplees para "mostrar" ese ID. De este modo en la celda [0,i] tenés "guardado" el ID y lo puedes emplear para ponerlo en la condición; por ejemplo algo asi:
Saludos, |
Hola Delphius, ya entendi..disculpa mi ignorancia. Ya capte tanto la idea, como la forma de hacer un update.Saludos
|
Te acuerdas de esto que me dijiste,fijate que si aplica cuando tengo por ejemplo 5 filas, si me elimina 1, pero ayer introduje unos 20 registros en el stringgrid y al momento de borrar una fila, me borro todas y solo me dejo una fila. Tu sabras el motivo? Este es el codigo que tengo en mi boton.:
|
| La franja horaria es GMT +2. Ahora son las 11:37:32. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi