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