Почему Visual Studio и работает, и выдает ошибки для программы базы данных C ++, которая кажется стабильной в остальном? - PullRequest
0 голосов
/ 09 апреля 2020

Я решил протестировать программу, прежде чем отправлять ее для задания, связанного с базой данных. Я должен создать систему, которая управляет таблицей сотрудников, принимая различные данные и применяя их к базе данных.

Во время разработки я убедился, что каждый вход работал несколько раз. Первоначальное тестирование работало каждый раз при запуске программы. Я смог добавить пользователя с идентификатором 1010 (еще не в системе. Если идентификатор уже присутствовал, то система отбрасывает информацию и информирует пользователя), а затем сделал бессмысленного пользователя, и это сработало.

Я вернулся в программу, чтобы добавить некоторые окончательные правки, такие как правильное отображение выходных данных, лучшее форматирование и т. Д. c и просто общую очистку и комментарии, когда я заметил, что при запуске приложения и попытке использовать те же функции программа показала странное поведение.

  1. При первом запуске программа обнаружила все введенные мной идентификаторы сотрудников (даже бессмысленные, такие как 99999) как уже существующие. Когда я вышел и вернулся в программу, этот идентификатор был внезапно принят, как будто ничего не произошло
  2. Когда мне удалось успешно ввести пользователя в базу данных, он сразу же приступил к автозапуску программы (выбор функций сделан через переключатель / регистр).
  3. После того, как 2. произошло, я попытался перезапустить программу, только для того, чтобы она многократно принимала ввод «name», а затем пропускала все остальные вводы и немедленно выходила из программы. Никакого сообщения об ошибке, ничего
  4. , когда я пытался отменить все свои изменения, оно продолжало происходить, даже на самой стабильной сборке, которую я сделал за несколько дней go, а затем внезапно повторил это поведение во всем снова.

Я не совсем уверен, что я сделал неправильно, чтобы заставить это сделать это. Это обычное явление в VS?

Для справки мой код указан ниже

Это код для случая 3, тот, который касается записи

        case 3:
            cout << "Please Enter the employee number of the employee to add" << endl;
            cin >> empNum;
            failsafe = findEmployee(conn, empNum, emp);
            if (failsafe == 1) {
                if (emp.empNum == 0) {

                    cout << "Employee does not exist or is not in our records. Entry can proceed" << endl;
                    cout << "proceeding with entry" << endl;
                    cout << "-------------" << endl;
                    cout << "Enter the employee's Number: ";
                    cin >> emp.empNum;
                    cin.ignore();
                    cout << "Enter the employee's first name: ";
                    cin >> emp.firstName;
                    cout << "Last name: ";
                    cin >> emp.lastName;
                    cout << "Enter Employee Email: ";
                    cin >> emp.email;
                    cout << "Enter Employee's Extension: ";
                    cin >> emp.extension;
                    cout << "Enter the employee number of the person this employee reports to: ";
                    cin >> emp.reportsTo;
                    cout << "What is this employees' current position? ";
                    cin >> emp.jobTitle;
                    cout << "What city is this employee working within? ";
                    cin >> emp.city;
                    cout << "Compiling employee data" << endl;
                    insertEmployee(conn, emp);

                }
                else {
                    cout << empNum;
                    cout << "An employee with the same number exists." << endl;
                }
            }
            else if (failsafe == 0) {
            cout << "Judging from the way this program reads data, you shouldn't be able to see this"<<endl; //In case the function for some reason *doesnt* return a 1 like it's been doing every time
            }
            break;

и вот код, касающийся добавления сотрудника к базе данных

    void insertEmployee(MYSQL* conn, struct Employee& emp) {
        int queResult;
        MYSQL_RES* res;
        cout << "This and the below line is just here for testing to see what exactly it's skipping over" << endl;
        pause();
        if (conn) {
            string query = ("INSERT INTO schoolschema.employees(employeeNumber, lastName, firstName, extension, email, officeCode, reportsTo, jobTitle)"
                " VALUES (" + std::string(" \' " ) + to_string(emp.empNum)  + std::string(" \' ") + " , " + " \' " + emp.lastName + " \' " + " , " + " \' " + emp.firstName + " \' " + " , " + std::string(" \' ") + emp.extension + " \' " + " , " + " \' " + emp.email + " \' " + " , " + to_string(1) + " , " + std::string(" \' ") + emp.reportsTo + " \' "+ " , " + " \' " + emp.jobTitle + " \' " + ");");
            const char* q = query.c_str();
            queResult = mysql_query(conn, q);
            if (!queResult) {
                cout << "Employee successfully added, check to verify by checking the number of the employee from the main menu, or using your DBMS application" << endl;
                return;
            }
            else {
                cout << "Error occurred: " << mysql_errno(conn) << " " << mysql_error(conn) << endl;
            }
        }
    }

и да, я в курсе всего

+ "\ '" +

вещь довольно уродливая, но это было Обходной путь для другой проблемы, которую я имел.

Я могу опубликовать дополнительные фрагменты кода, если кто-то думает, что ошибка может быть ie в другом месте.

Как добавленное примечание, я не верю, что проблема заключается в "найти сотрудника", потому что эта функция, кажется, возвращает информацию правильно, просто компилятор, кажется, выбирает и выбирает, правильны ли эти данные или нет , (ниже вы можете видеть, что я могу удалить пользователя 1010, но я не могу добавить его обратно)

произошла ошибка

********************* HR Menu *********************
1)  Find Employee
2)  Employees Report
3)  Add Employee
4)  Update Employee
5)  Remove Employee
0)  Exit
5
Enter employee number to delete: 1010
Employee found, deleting
Employee successfully deleted
********************* HR Menu *********************
1)  Find Employee
2)  Employees Report
3)  Add Employee
4)  Update Employee
5)  Remove Employee
0)  Exit
3
Please enter number to add
1010
employee does not exist, proceeding with entry
Enter Employee number: 1010
Last name: Enter Employee Email: Enter Employee's Extension: Enter the employee number of the person this employee reports to: What is this employees' current position? What city is this employee working within? Compiling employee data
Press enter to continue...

Редактировать: добавлено примечание: после появляется вышеупомянутая ошибка (вещь, которая говорит, нажмите ввод, чтобы продолжить), она отображает ошибку sql в течение бита, прежде чем немедленно предположить, что пользователь ввел «0» и выходит

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...