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


Registrado: 12 Nov 2005Mensajes: 92
|
Publicado: Lun 31 Mar, 2008 8:02 pm Asunto: casting de componentens |
|
|
Estoy haciendo una funcion para acceder a una base de datos desde varios formularios, el codigo es el siguiente:
| Código: |
void EntradaABaseDatos(TForm *Form, TDataSource *DataSource, TDatabase *Database, TQuery *Query)
{
TDataSource *DS;
TDatabase *DB;
TQuery *QU;
DS = (TDataSource *)Form->Components->FindComponent(DataSource->Name);
DB = (TDatabase *)Form->Components->FindComponent(Database->Name);
QU = (TQuery *)Form->Components->FindComponent(Query->Name);
DS->DataSet = QU;
DB->DatabaseName = "ARESDB";
DB->LoginPrompt = false;
DB->Connected = true;
QU->DatabaseName = "ARESDB";
QU->SQL->Clear();
/* Form->DataSource->DataSet = Form->Query;
Form->Database->DatabaseName = "ARESDB";
Form->Database->LoginPrompt = false; //sense login
Form->Database->Connected = true;
Form->Query->DatabaseName = "ARESDB";
Form->Query->SQL->Clear();
*/
}
|
Me da un error __fastcall TComponent::GetComponent(int). _________________ Be water my friend. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 01 Abr, 2008 11:29 pm Asunto: |
|
|
Cambia las siguientes lineas
| Código: | TDataSource *DS;
TDatabase *DB;
TQuery *QU;
DS = (TDataSource *)Form->Components->FindComponent(DataSource->Name);
DB = (TDatabase *)Form->Components->FindComponent(Database->Name);
QU = (TQuery *)Form->Components->FindComponent(Query->Name); |
por estas otras
| Código: | TDataSource *DS = static_cast<TDatabase*>(DataSource);
TDatabase *DB = static_cast<TDatabase*>(Database);
TQuery *QU = static_cast<TQuery*>(Query); |
Saludos. _________________
 |
|
| Volver arriba |
|
 |
mns Lt

Registrado: 15 Oct 2008Mensajes: 95
|
Publicado: Mie 25 Feb, 2009 6:20 pm Asunto: |
|
|
holaa
la verdad no entiendo mucho el static_cast todavia pero viendo esta funcion que funciona con la rectificacion de cesar perfectamente me surge una duda de pura ignorancia , espero que alguien pueda contestarme
la cosa es que ayer hice algo parecido para unos ComboBox que tienen que hacer las mismas cosas y es tedioso programar cada evento y tal , bien
el tema es este
void EntradaABaseDatos(TForm *Form, TDataSource *DataSource, TDatabase *Database, TQuery *Query)
{
TDataSource *DS = static_cast<TDatabase*>(DataSource);
TDatabase *DB = static_cast<TDatabase*>(Database);
TQuery *QU = static_cast<TQuery*>(Query);
y luego las propiedades o lo que sea
}
funciona perfecto
pero si en vez de poner el stactic_cast no lo pongo y lo dejo asi tal cual
void EntradaABaseDatos(TForm *Form, TDataSource *DataSource, TDatabase *Database, TQuery *Query)
{
las propiedades o lo que sea, o sea:
Form->Caption = "lo que sea";
DataSource->DataSet = DataBase;
Query->Close(); ---->por ejemplo
no lo he probado con componentes de datos pero con un boton un label y un edit para probar desde otro formulario y funciona , imagino que con componentes de bases de datos tambien deberia funcionar.
que diferencia hay entre meter el static_cast o no ponerlo¿?¿?
ya he dicho antes que es una pregunta de ignorante |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
|
| Volver arriba |
|
 |
mns Lt

Registrado: 15 Oct 2008Mensajes: 95
|
Publicado: Mie 25 Feb, 2009 10:01 pm Asunto: |
|
|
algo voy entendiendo , aunque no creo que pudiera explicar lo poco que entendi con palabras jejeje , a parte que sirve como conversor entre otras cosas
gracias |
|
| Volver arriba |
|
 |
|