| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
americo_bcb Lt

Registrado: 05 May 2004Mensajes: 84
|
Publicado: Mar 26 Oct, 2004 5:17 pm Asunto: DBGrid |
|
|
Holas a todos, desearia saber si existe la manera de hacer que un TDBGrid solo sea de lectura intente poniendo la propiedad ReadOnly de tabla asociada a true, y todo funciona de maravilla pero cuando hago para insertar datos a esta tabla en el boton agregar registro en mi codigo pongo lo siguiente:
| Código: | ADOTable1->Close();
ADOTable1->ReadOnly = false;
ADOTable->Open();
ADOTable1->Insert() |
como veran cierro la tabla, cambio la propiedad en cuestion y la abro esto es por que no se puede cambiar directamente esta propiedad cuando el dataset esta abierto, El echo es que cuando llega a la linea de la insercion de registro me envia un error con el mensaje de error que dice "mensaje desconocido" me parece sumamente extraño, por eso me preguntaba si es posible hacer que el mismo grid no permita editar ni agregar nuevos registros, cuando la propiedad ReadOnly permanesca en false.
Desde ya gracias por las respuestas
Américo
C++ Builder lo mejor de lo mejor |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 26 Oct, 2004 5:53 pm Asunto: |
|
|
Intenta, con un Book mark para no perderte, puede ser una solucion
TBookMark MiMarca; _________________
 |
|
| Volver arriba |
|
 |
snupoo Lt Cmdr


Registrado: 19 Feb 2004Mensajes: 108Ubicación: Merida yucatan Mexico
|
Publicado: Mar 26 Oct, 2004 7:59 pm Asunto: |
|
|
Hola.
El truco esta en del DataSource.
Pon la propiedad autoedit a false.
Con eso se resuelve el problema y no es necesario tanto rollo.  _________________ [img]http://folding.extremeoverclocking.com/sigs/sigimage.php?un=snupoo&t=86565/sigimage.gif[/img]
A programar se aprende programando |
|
| Volver arriba |
|
 |
americo_bcb Lt

Registrado: 05 May 2004Mensajes: 84
|
Publicado: Mar 26 Oct, 2004 10:48 pm Asunto: |
|
|
Gracias a ambos por las respuestas como dice snupoo
| snupoo escribió: | El truco esta en del DataSource.
Pon la propiedad autoedit a false. |
se logra que no se pueda editar pero aun asi se puede realizar la insercion de datos
alguna idea
Américo
C++Builder lo mejor de lo mejor |
|
| Volver arriba |
|
 |
snupoo Lt Cmdr


Registrado: 19 Feb 2004Mensajes: 108Ubicación: Merida yucatan Mexico
|
Publicado: Mar 26 Oct, 2004 11:17 pm Asunto: |
|
|
Hola americo_bcb.
| Cita: |
desearia saber si existe la manera de hacer que un TDBGrid solo sea de lectuta
|
con esto entiendo de que no se pueda modificar la BD directo en el DBGrid
| Cita: |
pero cuando hago para insertar datos a esta tabla en el boton agregar registro
|
y con esto que solo con el boton agregar puedas insertar datos.
con el truco anerior se cumple esto sin necesidad de abrir o cerrar las tablas.
en este ultimo no entiendo tu duda.
Saludos espero poder ayudarte.  _________________ [img]http://folding.extremeoverclocking.com/sigs/sigimage.php?un=snupoo&t=86565/sigimage.gif[/img]
A programar se aprende programando |
|
| Volver arriba |
|
 |
americo_bcb Lt

Registrado: 05 May 2004Mensajes: 84
|
Publicado: Mie 27 Oct, 2004 12:28 am Asunto: |
|
|
Holas Snupoo
Me referia a que si se puede realizar la insercion de datos directamente desde el Grid.
Américo
C++ Builder lo Mejor de lo Mejor |
|
| Volver arriba |
|
 |
snupoo Lt Cmdr


Registrado: 19 Feb 2004Mensajes: 108Ubicación: Merida yucatan Mexico
|
Publicado: Mie 27 Oct, 2004 12:43 am Asunto: |
|
|
Hola ya se lo que quieres.
Tengo un programita echo fue uno de los primeros que hice pero por desgracia no lo tengo en este momento.
si quieres dame tu direccion de correo y te lo mando.
Ya que tampoco cuento con el builder en este lugar para poder acordarme bien de las propiedades.
Saludos.  _________________ [img]http://folding.extremeoverclocking.com/sigs/sigimage.php?un=snupoo&t=86565/sigimage.gif[/img]
A programar se aprende programando |
|
| Volver arriba |
|
 |
americo_bcb Lt

Registrado: 05 May 2004Mensajes: 84
|
Publicado: Mie 27 Oct, 2004 3:14 pm Asunto: |
|
|
Gracias Snuppo mi correo es americo_fox@hotmail.com
gracias de antemano
Americo
C++ Builder lo mejor de lo mejor |
|
| Volver arriba |
|
 |
snupoo Lt Cmdr


Registrado: 19 Feb 2004Mensajes: 108Ubicación: Merida yucatan Mexico
|
Publicado: Mie 27 Oct, 2004 9:15 pm Asunto: |
|
|
Hola americo_bcb.
Disculpa por no enviarte el archivo a tu correo pues no lo encontre.
Detodos modos te pongo el codigo que hice.
En tiempo de diseño pon AutoEdit=false del DataSource, no hay que cambierlo.
Solo se puede introducir un dato dandole en el boton nuevo o editar y simpre hay que aceptar o desacer para guardar ono los cambios.
Todos las funciones resiben un TTable pero no se porque a mi me marca un error si se lopongo, detodos modos a si funciona bien simpre que le mandes un TTable y funcina con cualquer tabla.
en el .h
| Código: |
private: // User declarations
void nuevo(TObject *Sender);
void editar(TObject *Sender);
void aceptar(TObject *Sender);
void desacer(TObject *Sender);
void eliminar(TObject *Sender);
|
en el .cpp
| Código: |
//---------------------------------------------------------------------------
void TFormPrin::nuevo(TObject *Sender)
{
TTable * tab = (TTable *)Sender;
// Inicia la transacción
tab->Database->StartTransaction();
try
{
tab->Append();
}
catch(Exception&)
{
tab->Cancel();
// Cancelar la transacción
tab->Database->Rollback();
tab->Refresh();
throw;
}
}
//---------------------------------------------------------------------------
void TFormPrin::editar(TObject *Sender)
{
TTable * tab = (TTable *)Sender;
// Inicia la transacción
tab->Database->StartTransaction();
try
{
tab->Edit();
}
catch(Exception&)
{
tab->Cancel();
// Cancelar la transacción
tab->Database->Rollback();
tab->Refresh();
throw;
}
}
//---------------------------------------------------------------------------
void TFormPrin::aceptar(TObject *Sender)
{
TTable * tab = (TTable *)Sender;
try
{
tab->Post();
// Confirmar la transacción
tab->Database->Commit();
}
catch(Exception&)
{
tab->Cancel();
// Canselar la transacción
tab->Database->Rollback();
throw;
}
tab->Refresh();
}
//---------------------------------------------------------------------------
void TFormPrin::desacer(TObject *Sender)
{
TTable * tab = (TTable *)Sender;
tab->Cancel();
// Canselar la transacción
tab->Database->Rollback();
tab->Refresh();
}
//---------------------------------------------------------------------------
void TFormPrin::eliminar(TObject *Sender)
{
TTable * tab = (TTable *)Sender;
if(Application->MessageBox("¿Seguro que quiere eliminar el registro?",
"Atención",MB_ICONQUESTION | MB_YESNO) == IDYES){
tab->Delete();
tab->Refresh();
}
}
|
Una llamada tipica seria
| Código: |
//---------------------------------------------------------------------------
void __fastcall TFormPrin::ToolNueClick(TObject *Sender)
{
nuevo(MiTabla);
}
//---------------------------------------------------------------------------
|
Saludos.  _________________ [img]http://folding.extremeoverclocking.com/sigs/sigimage.php?un=snupoo&t=86565/sigimage.gif[/img]
A programar se aprende programando |
|
| Volver arriba |
|
 |
americo_bcb Lt

Registrado: 05 May 2004Mensajes: 84
|
Publicado: Mie 27 Oct, 2004 9:21 pm Asunto: |
|
|
Holas Snupoo gracias por responder pero creo que no me deje entender como dije en un post anterior, con poner la propiedad autoedit a false se logra que no se pueda editar directamente en el grid, pero no se evita que se ingrese datos directamente en el GRID el codigo que escribiste si es genial y funciona a la perfeccion pero aun asi el grid sigue permitiendo la insercion de datos.
Espero puedan ayudarme.
Américo
C++ Builder lo mejor de lo mejor |
|
| Volver arriba |
|
 |
americo_bcb Lt

Registrado: 05 May 2004Mensajes: 84
|
Publicado: Mie 27 Oct, 2004 9:56 pm Asunto: |
|
|
holas otra ves esta vez digo que era algo sencillo era ver una propiedad del grid que se llama ReadOnly basta con ponerla a true y se logra que no se pueda insertar datos ni nada por el estilo. y pensar que pense que tenia que modificar el comportamiento del grid o del datasource bueno la solucion esta dada
Americo
C++ Builder lo mejor de lo mejor |
|
| Volver arriba |
|
 |
|