Я пытаюсь создать таблицу с переменным количеством столбцов. YH (я, Y1, Y2 …. Yd)
Поэтому я создал цикл for внутри запроса. Но это показывает следующую ошибку —
error: invalid operands of types ‘const char*’ and ‘const char [7]’ to binary ‘operator+’ for(int l=1;l<=d;l++) {commandline+=", Y"+ l +" real ";}
Основной код приведен ниже —
string commandline;
commandline = "DROP TABLE YH";
if(SQL_SUCCESS != SQLExecDirect(hdlStmt, (SQLCHAR*)(commandline.c_str()), SQL_NTS))
{
cout<<"The drop YH table is unsuccessful."<<endl;
}
commandline = "CREATE TABLE YH""(i int primary key ";
for(int l=1;l<=d;l++) {
commandline+=", Y"+l+" real ";
}
commandline+=" ) ";
if(SQL_SUCCESS != SQLExecDirect(hdlStmt, (SQLCHAR*)(commandline.c_str()), SQL_NTS))
{
cout<<"The create table sql command hasn't been executed successfully."<<endl;
}
Я попробовал следующее —
для (int l = 1; l<= d; l ++) {командная строка + = «, Y» l «real»;}
для (int l = 1; l<= d; l ++) {командная строка + = «, Y» + std :: string (l) + «real»;}
Ни один из них, кажется, не работает.
Вы не можете использовать +
объединить целое число в строку. Когда ты пишешь
", Y" + l
это добавляет l
на указатель на строковый литерал, и это просто возвращает другой указатель. Затем, когда вы делаете + " real"
он пытается добавить указатель на этот массив, но нет такой перегрузки для +
оператор. +
может использоваться только для объединения, когда хотя бы один из аргументов является std::string
,
std::string(l)
тоже не работает. Это не то, как вы получаете строковое представление числа. Функция, которую вы хотите std::to_string(l)
,
commandline += ", Y" + std::to_string(l) + " real ";
Альтернативный подход до C ++ 11:
Документация по std::ostringstream
В двух словах, ostringstream
позволяет вашей программе записывать в самоизменяющийся буфер, который легко преобразуется в string
так же, как вы записываете в любой другой поток ввода. подобно cout
, например.
// create the ostringstream around the initial string data
ostringstream commandline("CREATE TABLE YH (i int primary key ");
for(int l=1;l<=d;l++) {
// write into the ostringstream. l will automatically be converted from a number
commandline << ", Y" << l <<" real ";
}
commandline << " ) ";
// (str() gets the string from the ostringstream.
// c_str() converts this string into a character array
if(SQL_SUCCESS != SQLExecDirect(hdlStmt, (SQLCHAR*)(commandline.str().c_str()), SQL_NTS))
{
cout<<"The create table sql command hasn't been executed successfully."<<endl;
}