Προς το περιεχόμενο

try-catch ερώτηση


georginos1989

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω ενα προγραμμα στη c++ με φορμες/units... και σύνδεση με βάση, εκτελεση ερωτημάτων... Μέσα στις συναρτησεις που κανουν συνδεση και εκτελουν τα ερωτηματα σκεφτομαι να βαλω try catch αλλά στο catch τι θα βάλω; κάτι σαν μνμ δεν πρέπει να μπει πχ αποτυχής σύνδεση; Αν δεν θέλεις να κάνει τπτ το catch αλλά μόνο να πιάνει τα exceptions και να μην χτυπάει το πρόγραμμα τι κάνεις;

Δημοσ.

Βαζεις ellipses (catch(...)) αν δε ξερεις τι θα σου πεταξει, αν ξερεις τοτε βαζεις ενα instance του object που μπορει να σου πεταξει πχ catch(const char* e)

 

ΥΓ: Αν πεταξει κανα exception τοτε οτι ειναι μεσα στη try καταστρεφεται

Δημοσ.
>class exception_foo
{
private:
std::string errorMsg;
public:
exception_foo(const char* what)
	: errorMsg(what)
{
}
const char* what()
{
	return this->errorMsg.c_str();
}
};
class foo
{
public:
foo()
{
	printf("created\n");
}
~foo()
{
	printf("deleted\n");
}
void boom()
{
	throw exception_foo("error");
}
};
int main(int,char**)
{
try
{
	foo f;
	f.boom();
}
catch(exception_foo e)
{
	printf("some error catched! Message:%s\n",e.what());
}
return 0;}

Δημοσ.

Για να μην ανοιγω καινουργιο θεμα

 

Εχω κανει την παρακατω συναρτηση η οποια φτιάχνει ένα string το οποιο περιέχει ένα ερώτημα sql

 

bool ControlAdmin::createSecretary(Secretary sec)

{

string query;

bool isOk;

string name=sec.getName(),surname=sec.getSurname(),username=sec.getUsername(),passwd=sec.getPassword();

string city=sec.getCity(), address=sec.getAddress(), phone=sec.getPhone(), mobile=sec.getMobileNumber();

string email=sec.getEmail(), section=sec.getSection();

 

 

query="insert into secretary (name, surname, username, password, city, address,";

query+="phone_number, mobile_number, email, section, KA) values('"+name+"',";

query+="'"+surname+"','"+username+"','"+passwd+"',";

query+="'"+city+"','"+address+"','"+phone+"'," ;

query+="'"+mobile+"','"+section+"','11')";

 

/*

query="insert into secretary (name, surname, username, password, city, address,";

query+="phone_number, mobile_number, email, section, KA) values('"+sec.getName()+"',";

query+="'"+sec.getSurname()+"','"+sec.getUsername()+"','"+sec.getPassword()+"',";

query+="'"+sec.getCity()+"','"+sec.getAddress()+"','"+sec.getPhone()+"'," ;

query+="'"+sec.getMobileNumber()+"','"+sec.getSection()+"','11')"; */

/*

 

query="insert into secretary (name, surname, username, password, city, address,";

query+="phone_number, mobile_number, email, section, KA) values('aaa','bbbb','cccc',";

query+="'dddd','eeee','fffff','ggggg','hhhhh','iiiii','1','22')";

*/

isOk=db.testinsertUpdateDeleteQuery(query);

if(isOk)

{

return true;

}

else

{

return false;

}

 

}

 

Η συνάρτηση αυτή βρίσκετε μεσα σε μια κλαση. Μετά αφου φτιαχτει το ερώτημα καλείτε η παρακατω συνάρτηση η οποία παίρνει ως όρισμα αυτο το string και εκτελει το ερώτημα

 

bool DBControl::testinsertUpdateDeleteQuery(std::string qry)

{

const char *qr;

int queryState;

 

qr=qry.c_str();

 

queryState=mysql_query(pconn,qr);

if (!queryState)

{

return true;

}

else

{

return false;

}

}

και αυτη η συνάρτηση βρίσκετε σε άλλη κλάση..

το θέμα είναι ότι το ερώτημα εκτελείτε σωστά μόνο αν το string query το δώσω έτσι

query="insert into secretary (name, surname, username, password, city, address,";

query+="phone_number, mobile_number, email, section, KA) values('aaa','bbbb','cccc',";

query+="'dddd','eeee','fffff','ggggg','hhhhh','iiiii','1','22')";

 

Αν δοκιμάσω καποια από τις 2 πρώτες επιλογές που έχω κάνει δεν εκτελέιτε σωστά και δεν μπορώ να βρώ γιατι συμβαίνει

Ενώ το δοκιμασα και με step run για να δω μηπως δεν παιρνει καλα τις τιμες αλλα μια χαρα τις παιρνει τις τιμες

 

Καμια ιδέα?

Δημοσ.

Δε ξέρω αν εννοουσες κάτι τετοιο αλλα ουτε ετσι δουλευει

 

query="insert into secretary (name, surname, username, password, city, address,";

query+="phone_number, mobile_number, email, section, KA) values('"+name+"',";

query+="\'"+surname+"','"+username+"','"+passwd+"',";

query+="\'"+city+"','"+address+"','"+phone+"'," ;

query+="\'"+mobile+"','"+section+"','11')";

Δημοσ.

Καντο ετσι

>	std::string
	name("name1"),
	surname("surname1"),
	username("username"),
	passwd("pass1"),
	city("athens"),
	address("address1"),
	mobile("2312231231"),
	phone("2131231"),
	section("section1");

std::string query(
	"INSERT INTO secretary"
	"(name,surname,username,password,city,address,phone_number,mobile_number,email,section,KA)"
	"VALUES(");
query+= '\'';
query+= name;
query+= "\',";

query+= '\'';
query+= surname;
query+= '\'';

query+= '\'';
query+= username;
query+= "\',";

query+= '\'';
query+= passwd;
query+= "\',";

query+= '\'';
query+= city;
query+= "\',";

query+= '\'';
query+= address;
query+= "\',";
printf("%s",query.c_str());
//etc...

 

 

ΥΓ: Φυσικα ειναι καλυτερο να χρησιμοποιησεις το απι της εσκιουελ

ΥΓ1 ενα tutorial

Δημοσ.

Πως μπορούμε να μετατρέψουμε καποιες τιμες απο ενα vector<string> σε INT?

Οχι ολο το vector αλλά κάποιες τιμές από το vector

 

intReturn = atoi(strConvert.c_str());

 

βρηκα αυτο... ειναι σωστο?

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...