void login_dialog::db_connect() { QString errstr; QString qcs=connect_string(); if (!ConnectDb(qcs.toLocal8Bit(), &errstr)) { QMessageBox::critical(NULL, QObject::tr("Fatal database error"), QObject::tr("Error while connecting to the database:\n")+errstr); } else { QSettings settings("Manitou-Mail", "manitou-ui"); settings.setValue("login", login()); settings.setValue("dbname", dbnames()); // stringlist settings.setValue("host", host()); settings.setValue("params", params()); accept(); } }
int main (int argc, char *argv[]) { if(argc<2) Fl::fatal("Usage: %s \"Connect String\"", argv[0]); Fl_String connect_string(argv[1]); try { //"DSN=odbc_demo;UID=username;PWD=password"; Fl_ODBC_Database db(connect_string); printf("Connect string: %s", connect_string.c_str()); printStepName ("Openning the database"); fflush (stdout); db.open (); printf ("Ok"); printStepName ("Creating the temp table"); Fl_Query query (&db, "CREATE TEMP TABLE _test_ (id int,name char(40))"); query.exec (); printf ("Ok"); printStepName ("Filling in the temp table"); query.sql ("INSERT INTO _test_ (id,name) VALUES (:var_id,:var_name)"); query.param ("var_id") = 1; query.param ("var_name") = "Alex"; query.exec (); query.param ("var_id") = 2; query.param ("var_name") = "Dejan"; query.exec (); query.param ("var_id") = 3; query.param ("var_name") = "Mikko"; query.exec (); printf ("Ok"); printStepName ("Openning the dataset"); query.sql ("SELECT * FROM _test_"); query.open (); printf ("Ok"); printStepName ("Reading all the rows from the table"); int rows = 0; while (!query.eof ()) { printf ("\n Row %i: ", rows); for (unsigned i = 0; i < query.field_count (); i++) { printf ("%s ", query.field (i).as_string ().c_str ()); } query.fetch (); rows++; } printf ("\nLooks good? Ok"); printStepName ("Closing the dataset"); query.close (); printf ("Ok"); printStepName ("Removing temp table"); query.sql ("DROP TABLE _test_"); query.exec (); printf ("Ok"); printStepName ("Closing the database"); fflush (stdout); db.close (); printf ("Ok"); } catch (Fl_Exception &exception) { fprintf(stderr, "Exception! %s\n", exception.text ().c_str ()); return -1; } printf("\n\nTest completed.\n"); return EXIT_SUCCESS; }
static bool execute_calculation_express(string& express) { long next_calculation_flag=get_next_calculation_flag(express); if ('+'==express[next_calculation_flag]) { string left_express(express.substr(0,next_calculation_flag)); trim(left_express); express_type left_express_type=get_express_type(left_express); unsigned long left_express_calcu_value=0; support_javascript_variant_type left_express_calcu_value_type=NONE; if (EXPRESSION_UNKNOW==left_express_type) // 12kk4+321 or +321 return false; if (EXPRESSION_VARIANT==left_express_type) { get_variant(left_express,(void*)&left_express_calcu_value,&left_express_calcu_value_type); } else if (EXPRESSION_EXPRESS==left_express_type) { // (123+321)+1 if (!execute_calculation_express(left_express)) return false; get_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)&left_express_calcu_value,&left_express_calcu_value_type); } else if (EXPRESSION_STRING==left_express_type) { // 'AAA'+'A' left_express=left_express.substr(1,left_express.length()-2); } if (NUMBER==left_express_calcu_value_type || EXPRESSION_NUMBER_DECIMAL==left_express_type || EXPRESSION_NUMBER_HEX==left_express_type) { left_express_type=EXPRESSION_NUMBER_DECIMAL; } else { left_express_type=EXPRESSION_STRING; } string right_express(express.substr(next_calculation_flag+1)); trim(right_express); express_type right_express_type=get_express_type(right_express); unsigned long right_express_calcu_value=0; support_javascript_variant_type right_express_calcu_value_type=NONE; if (EXPRESSION_UNKNOW==right_express_type) // 321+12kk4 or 321+ return false; if (EXPRESSION_VARIANT==right_express_type) { get_variant(right_express,(void*)&right_express_calcu_value,&right_express_calcu_value_type); } else if (EXPRESSION_EXPRESS==right_express_type) { // 123+123+123 if (!execute_calculation_express(right_express)) return false; get_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)&right_express_calcu_value,&right_express_calcu_value_type); } else if (EXPRESSION_STRING==right_express_type) { // 'AAA'+'A' right_express=right_express.substr(1,right_express.length()-2); } if (NUMBER==right_express_calcu_value_type || EXPRESSION_NUMBER_DECIMAL==right_express_type || EXPRESSION_NUMBER_HEX==right_express_type) { right_express_type=EXPRESSION_NUMBER_DECIMAL; } else { right_express_type=EXPRESSION_STRING; } // 123+123 or (123+321)+123+123 or '123'+'123' or '123'+123 if (EXPRESSION_STRING==left_express_type && EXPRESSION_STRING!=right_express_type) { if (NONE!=right_express_calcu_value_type) { string connect_string(left_express); connect_string+=right_express; set_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)connect_string.c_str(),STRING); } else { char conver_buffer[0x20]={0}; sprintf(conver_buffer,"%d",right_express_calcu_value); string connect_string(left_express); connect_string+=conver_buffer; set_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)connect_string.c_str(),STRING); } } else if (EXPRESSION_STRING!=left_express_type && EXPRESSION_STRING==right_express_type) { if (NONE==left_express_calcu_value_type) { string connect_string(left_express); connect_string+=right_express; set_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)connect_string.c_str(),STRING); } else { char conver_buffer[0x20]={0}; sprintf(conver_buffer,"%d",left_express_calcu_value); string connect_string(conver_buffer); connect_string+=right_express; set_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)connect_string.c_str(),STRING); } } else if (EXPRESSION_STRING==left_express_type && EXPRESSION_STRING==right_express_type) { // alloc in heap .. //string connect_string; unsigned long connect_string_length=0; if (NONE!=left_express_calcu_value_type) connect_string_length=strlen((char*)left_express_calcu_value); else connect_string_length=left_express.length(); if (NONE!=right_express_calcu_value_type) connect_string_length+=strlen((char*)right_express_calcu_value); else connect_string_length+=right_express.length(); char* connect_string=(char*)alloc_memory(connect_string_length+1); unsigned long copy_offset=0; if (NONE!=left_express_calcu_value_type) { copy_offset=strlen((char*)left_express_calcu_value); memcpy(connect_string,(const void*)left_express_calcu_value,copy_offset); } else { copy_offset=left_express.length(); memcpy(connect_string,left_express.c_str(),copy_offset); } if (NONE!=right_express_calcu_value_type) memcpy((void*)((unsigned long)connect_string+copy_offset),(const void*)right_express_calcu_value,strlen((char*)right_express_calcu_value)); else memcpy((void*)((unsigned long)connect_string+copy_offset),right_express.c_str(),right_express.length()); set_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)connect_string,STRING); } else { long left_express_value=0; if (NONE!=left_express_calcu_value_type) { left_express_value=left_express_calcu_value; } else { if (EXPRESSION_NUMBER_HEX==left_express_calcu_value_type) left_express_value=hex_string_to_number(left_express); else left_express_value=atoi(left_express.c_str()); } long right_express_value=0; if (NONE!=right_express_calcu_value_type) { right_express_value=right_express_calcu_value; } else { if (EXPRESSION_NUMBER_HEX==right_express_calcu_value_type) right_express_value=hex_string_to_number(right_express); else right_express_value=atoi(right_express.c_str()); } left_express_value+=right_express_value; set_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)left_express_value,NUMBER); } return true; } else if ('-'==express[next_calculation_flag]) { string left_express(express.substr(0,next_calculation_flag)); trim(left_express); express_type left_express_type=get_express_type(left_express); unsigned long left_express_calcu_value=0; support_javascript_variant_type left_express_calcu_value_type=NONE; if (EXPRESSION_UNKNOW==left_express_type) return false; if (EXPRESSION_EXPRESS==left_express_type || EXPRESSION_VARIANT==left_express_type) { if (!execute_calculation_express(left_express)) return false; get_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)&left_express_calcu_value,&left_express_calcu_value_type); if (NUMBER==left_express_calcu_value_type) left_express_type=EXPRESSION_NUMBER_DECIMAL; } else if (EXPRESSION_NUMBER_HEX==left_express_type) { left_express_calcu_value=hex_string_to_number(left_express); } else if (EXPRESSION_NUMBER_DECIMAL==left_express_type) { left_express_calcu_value=atoi(left_express.c_str()); } string right_express(express.substr(next_calculation_flag+1)); trim(right_express); express_type right_express_type=get_express_type(right_express); unsigned long right_express_calcu_value=0; support_javascript_variant_type right_express_calcu_value_type=NONE; if (EXPRESSION_UNKNOW==right_express_type) return false; if (EXPRESSION_EXPRESS==right_express_type || EXPRESSION_VARIANT==right_express_type) { if (!execute_calculation_express(right_express)) return false; get_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)&right_express_calcu_value,&right_express_calcu_value_type); if (NUMBER==right_express_calcu_value_type) right_express_type=EXPRESSION_NUMBER_DECIMAL; } else if (EXPRESSION_NUMBER_HEX==right_express_type) { right_express_calcu_value=hex_string_to_number(right_express); } else if (EXPRESSION_NUMBER_DECIMAL==right_express_type) { right_express_calcu_value=atoi(right_express.c_str()); } left_express_calcu_value-=right_express_calcu_value; set_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)left_express_calcu_value,NUMBER); return true; } else if ('*'==express[next_calculation_flag]) { string left_express(express.substr(0,next_calculation_flag)); trim(left_express); express_type left_express_type=get_express_type(left_express); unsigned long left_express_calcu_value=0; support_javascript_variant_type left_express_calcu_value_type=NONE; if (EXPRESSION_UNKNOW==left_express_type) return false; if (EXPRESSION_EXPRESS==left_express_type || EXPRESSION_VARIANT==left_express_type) { if (!execute_calculation_express(left_express)) return false; get_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)&left_express_calcu_value,&left_express_calcu_value_type); if (NUMBER==left_express_calcu_value_type) left_express_type=EXPRESSION_NUMBER_DECIMAL; } else if (EXPRESSION_NUMBER_HEX==left_express_type) { left_express_calcu_value=hex_string_to_number(left_express); } else if (EXPRESSION_NUMBER_DECIMAL==left_express_type) { left_express_calcu_value=atoi(left_express.c_str()); } string right_express(express.substr(next_calculation_flag+1)); trim(right_express); express_type right_express_type=get_express_type(right_express); unsigned long right_express_calcu_value=0; support_javascript_variant_type right_express_calcu_value_type=NONE; if (EXPRESSION_UNKNOW==right_express_type) return false; if (EXPRESSION_EXPRESS==right_express_type || EXPRESSION_VARIANT==right_express_type) { if (!execute_calculation_express(right_express)) return false; get_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)&right_express_calcu_value,&right_express_calcu_value_type); if (NUMBER==right_express_calcu_value_type) right_express_type=EXPRESSION_NUMBER_DECIMAL; } else if (EXPRESSION_NUMBER_HEX==right_express_type) { right_express_calcu_value=hex_string_to_number(right_express); } else if (EXPRESSION_NUMBER_DECIMAL==right_express_type) { right_express_calcu_value=atoi(right_express.c_str()); } left_express_calcu_value*=right_express_calcu_value; set_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)left_express_calcu_value,NUMBER); return true; } else if ('/'==express[next_calculation_flag]) { string left_express(express.substr(0,next_calculation_flag)); trim(left_express); express_type left_express_type=get_express_type(left_express); unsigned long left_express_calcu_value=0; support_javascript_variant_type left_express_calcu_value_type=NONE; if (EXPRESSION_UNKNOW==left_express_type) return false; if (EXPRESSION_EXPRESS==left_express_type || EXPRESSION_VARIANT==left_express_type) { if (!execute_calculation_express(left_express)) return false; get_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)&left_express_calcu_value,&left_express_calcu_value_type); if (NUMBER==left_express_calcu_value_type) left_express_type=EXPRESSION_NUMBER_DECIMAL; } else if (EXPRESSION_NUMBER_HEX==left_express_type) { left_express_calcu_value=hex_string_to_number(left_express); } else if (EXPRESSION_NUMBER_DECIMAL==left_express_type) { left_express_calcu_value=atoi(left_express.c_str()); } string right_express(express.substr(next_calculation_flag+1)); trim(right_express); express_type right_express_type=get_express_type(right_express); unsigned long right_express_calcu_value=0; support_javascript_variant_type right_express_calcu_value_type=NONE; if (EXPRESSION_UNKNOW==right_express_type) return false; if (EXPRESSION_EXPRESS==right_express_type || EXPRESSION_VARIANT==right_express_type) { if (!execute_calculation_express(right_express)) return false; get_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)&right_express_calcu_value,&right_express_calcu_value_type); if (NUMBER==right_express_calcu_value_type) right_express_type=EXPRESSION_NUMBER_DECIMAL; } else if (EXPRESSION_NUMBER_HEX==right_express_type) { right_express_calcu_value=hex_string_to_number(right_express); } else if (EXPRESSION_NUMBER_DECIMAL==right_express_type) { right_express_calcu_value=atoi(right_express.c_str()); } left_express_calcu_value/=right_express_calcu_value; set_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)left_express_calcu_value,NUMBER); return true; } else if ('('==express[next_calculation_flag]) { string resolve_express(express); for (unsigned long left_bracket_index=resolve_express.find('('); left_bracket_index!=INVALID_VALUE; left_bracket_index=resolve_express.find('(')) { unsigned long next_right_bracket=get_matching_outside_right_bracket(express,0); if (!next_right_bracket) return false; if (!execute_calculation_express(resolve_express.substr(left_bracket_index+1,next_right_bracket-left_bracket_index-1))) return false; unsigned long express_calcu_result_value=0; support_javascript_variant_type express_calcu_result_value_type=NONE; get_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)&express_calcu_result_value,&express_calcu_result_value_type); resolve_express=express.substr(0,left_bracket_index); if (NUMBER==express_calcu_result_value_type) { char conver_buffer[0x20]={0}; sprintf(conver_buffer,"%d",express_calcu_result_value); resolve_express+=conver_buffer; } else { resolve_express+="\'"; resolve_express+=(const char*)express_calcu_result_value; resolve_express+="\'"; } resolve_express+=express.substr(next_right_bracket+1); } if (!execute_calculation_express(resolve_express)) return false; return true; } if (is_exist_variant(express)) { // test_var copy_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,express); return true; } else if (INVALID_VALUE!=express.find('[') && INVALID_VALUE!=express.find(']')) { // test_array unsigned long left_brcket_index=express.find('['); unsigned long right_brcket_index=express.find(']'); string array_name(express.substr(0,left_brcket_index)); trim(array_name); string array_index_string(express.substr(left_brcket_index+1,right_brcket_index-left_brcket_index-1)); trim(array_index_string); if (!express_calcu(array_index_string)) return false; unsigned long array_index=0; support_javascript_variant_type array_index_type=NONE; get_variant(JAVASCRIPT_VARIANT_KEYNAME_CALCULATION_RESULT,(void*)&array_index,&array_index_type); unsigned long array_index_data=0; support_javascript_variant_type array_index_data_type=NONE; get_variant_array(array_name,array_index,(void*)&array_index_data,&array_index_data_type); set_variant(JAVASCRIPT_VARIANT_KEYNAME_FUNCTION_RESULT,(void*)array_index_data,array_index_data_type); return true; } return false; // TIPS ! all bug had been debug success .. }