georginos1989 Δημοσ. 22 Απριλίου 2011 Δημοσ. 22 Απριλίου 2011 Έχω ενα προγραμμα στη c++ με φορμες/units... και σύνδεση με βάση, εκτελεση ερωτημάτων... Μέσα στις συναρτησεις που κανουν συνδεση και εκτελουν τα ερωτηματα σκεφτομαι να βαλω try catch αλλά στο catch τι θα βάλω; κάτι σαν μνμ δεν πρέπει να μπει πχ αποτυχής σύνδεση; Αν δεν θέλεις να κάνει τπτ το catch αλλά μόνο να πιάνει τα exceptions και να μην χτυπάει το πρόγραμμα τι κάνεις;
παπι Δημοσ. 22 Απριλίου 2011 Δημοσ. 22 Απριλίου 2011 Βαζεις ellipses (catch(...)) αν δε ξερεις τι θα σου πεταξει, αν ξερεις τοτε βαζεις ενα instance του object που μπορει να σου πεταξει πχ catch(const char* e) ΥΓ: Αν πεταξει κανα exception τοτε οτι ειναι μεσα στη try καταστρεφεται
georginos1989 Δημοσ. 22 Απριλίου 2011 Μέλος Δημοσ. 22 Απριλίου 2011 Οταν λες καταστρέφετε? Δλδ τρέχει ο κωδικας μεσα στο try και πεταει exception ωραία.. και το πιάνει το catch.. μετα τι γίνετε;
παπι Δημοσ. 22 Απριλίου 2011 Δημοσ. 22 Απριλίου 2011 >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;}
georginos1989 Δημοσ. 22 Απριλίου 2011 Μέλος Δημοσ. 22 Απριλίου 2011 Το παραπανω πεταει ενα exception στην boom και σταματαει
georginos1989 Δημοσ. 24 Απριλίου 2011 Μέλος Δημοσ. 24 Απριλίου 2011 Για να μην ανοιγω καινουργιο θεμα Εχω κανει την παρακατω συναρτηση η οποια φτιάχνει ένα 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 για να δω μηπως δεν παιρνει καλα τις τιμες αλλα μια χαρα τις παιρνει τις τιμες Καμια ιδέα?
παπι Δημοσ. 25 Απριλίου 2011 Δημοσ. 25 Απριλίου 2011 μεσα στο string εχεις κατι τετιο "'' καντο "\'" ("\'")
georginos1989 Δημοσ. 25 Απριλίου 2011 Μέλος Δημοσ. 25 Απριλίου 2011 Δε ξέρω αν εννοουσες κάτι τετοιο αλλα ουτε ετσι δουλευει 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')";
παπι Δημοσ. 25 Απριλίου 2011 Δημοσ. 25 Απριλίου 2011 Καντο ετσι > 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
georginos1989 Δημοσ. 25 Απριλίου 2011 Μέλος Δημοσ. 25 Απριλίου 2011 Εντάξυ το βρήκα το λάθος τελικά... thanks παντως!!!!
georginos1989 Δημοσ. 27 Απριλίου 2011 Μέλος Δημοσ. 27 Απριλίου 2011 Πως μπορούμε να μετατρέψουμε καποιες τιμες απο ενα vector<string> σε INT? Οχι ολο το vector αλλά κάποιες τιμές από το vector intReturn = atoi(strConvert.c_str()); βρηκα αυτο... ειναι σωστο?
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.