Ver Mensaje Individual
  #20  
Antiguo 12-01-2008
Avatar de grandmasterdari
grandmasterdari grandmasterdari is offline
Miembro
 
Registrado: ene 2008
Posts: 46
Reputación: 0
grandmasterdari Va por buen camino
Thumbs up Solucionado

antes que nada sepan disculpar mi estupidez, y gracias por su tiempo.

la idea era esta:
1) que el programa (al iniciar) compruebe la conexion con el motor de base de datos
2) que compruebe (al iniciar) si existe la base de datos con la que vamos a trabajar
3) que compruebe si estan todas las tablas que vamos a utilizar

este es una parte del codigo para comprobar, conexion, base de datos y tablas,

Código:
void __fastcall TForm1::FormCreate(TObject *Sender)//se ejecuta cuando se crea el formulario principal
{

	//comprobacion de conexion
	SQLConnection1->Connected=true;
	if(SQLConnection1->Connected==false){
		MessageBox(NULL,"No se puede establecer la conexion con la base de datos","Error",MB_OK);

		//bloquear botones
		Button8->Enabled=false;  //boton login

	}
	else{
		//comprobacion de base de datos
		SQLQuery1->SQL->Clear();
		SQLQuery1->SQL->Add(codec("show databases");
		SQLQuery1->Open();
		while((!SQLQuery1->Eof)&&((SQLQuery1->FieldByName("Database")->AsString)!="sircdb"))
			SQLQuery1->Next();
		if(SQLQuery1->Eof==true){
			MessageBox(NULL,"No se encuentra la base de datos sircdb","Error",MB_OK);

			//bloquear botones del formulario principal, por ahora tengo 1 nomas
			Button8->Enabled=false;  //boton login
			SQLQuery1->Close();//cierro por las dudas, no se si hace falta ya que el programa solo da la opcion para cerrarse
		}
		else{
			//uso de la base de datos, que ya se que existe
			SQLQuery1->Close();
			SQLQuery1->Open();
			SQLQuery1->SQL->Clear();
			SQLQuery1->SQL->Add("use sircdb;");
			SQLQuery1->ExecSQL(true);//para poder ejecutar el comando
                        //en esta parte empiezo a contralar si estan todas las tablas
			SQLQuery1->SQL->Clear();
			SQLQuery1->SQL->Add("show tables;");
			SQLQuery1->Open();//jejeje. no hay error.
                        //y aqui deberiamos hacer el mismo recorrido anterior (while(!SQLQuery1->Eof  bla bla))
                        //con los condicionales necesarios para la comprobacion de todas las tablas


		}//cierro el else de db
	}//cierro el else de conexion
	SQLQuery1->Close();
}
encontre el error gracias a jachguate porque dijo esto
"Bueno... la verdad desconozco si en mySQL es un query válido eso de use basededatos;, pero si lo es, dudo que devuelva un cursor"
y es verdad, realice un "use basededatos" (en mi codigo "use sircdb"), y esto no devuelve un cursor por eso no se puede realizar el metodo "SQLQuery1->Open()", solo se puede el "SQLQuery1->ExecSQL()"


gracias a jachguate, caral, keyboy y egostar por ayudar

Última edición por grandmasterdari fecha: 12-01-2008 a las 03:58:34.
Responder Con Cita