2017-10-09 6 views
-1

Je suis en train de convertir une variable CString provenant d'un CComboBox à un std::string ou sql::SQLString un pour voir dans une requête SQL (en utilisant Mysql Connecteur C++). Donc, voici mon code:CString à std :: string ou sql :: conversion SQLString - C++

CComboBox *pComboRule = (CComboBox*)GetDlgItem(ID_EDIT_RULE); 
CComboBox *pComboAg1 = (CComboBox*)GetDlgItem(ID_EDIT_AG1); 
CComboBox *pComboAg2 = (CComboBox*)GetDlgItem(ID_EDIT_AG2); 
CComboBox *pComboAg3 = (CComboBox*)GetDlgItem(ID_EDIT_AG3); 

CString &AG1 = CString(_T("A string")); 
CString &AG2 = CString(_T("A string")); 
CString &AG3 = CString(_T("A string")); 
CString str; 

pComboAg1->GetLBText(pComboAg1->GetCurSel(), AG1); 
pComboAg2->GetLBText(pComboAg2->GetCurSel(), AG2); 
pComboAg3->GetLBText(pComboAg3->GetCurSel(), AG3); 


try { 

    std::string s = CStringA(AG1); 

    sql::PreparedStatement *pstmt = con->prepareStatement("SELECT `nAccessIdn` FROM `base`.`tb_table` WHERE `field` IN (?, ?, ?) LIMIT 3"); 
    pstmt->setString(1, s); 
    pstmt->setString(2, s); 
    pstmt->setString(3, s); 
    sql::ResultSet *res = pstmt->executeQuery(); 

    if (res->rowsCount() != 0) { 

     while (res->next()) 
     { 

      str.Format(_T("AG : %s\r\n"), res->getString(1)); 
      OutputDebugString(str); 

     } 

    } 

} 
catch (const std::bad_alloc& e) { 
    CString itemString; 
    itemString.Format(_T("SQLException %s"), CString(e.what())); 
    MessageBox(itemString, _T("Failed Logon Attempt"), MB_OK | MB_ICONERROR); 
} 

J'essaie déjà beaucoup de chose comme

std::string s((LPCTSTR)AG1); 

OU

std::basic_string<TCHAR> 

OU

std::string std(somStr, someStr.GetLength()); 

OU

CT2A(cst.GetString()); 

OU

char* myStr = "This is a C string!"; 
std::string myCppString = myStr; 

etc ...

Est-ce que quelqu'un connait un moyen de réussir?

DÉTAILS:

Visual Studio 2017 Community Edition - Projet Unicode - Runtime Library:/MDd

Merci beaucoup pour votre aide :)

EDIT: Débutant en C++, le code mis à jour.

+0

Vous avez essayé - et qu'est-ce qui ne va pas? –

+0

Aucune solution ne fonctionne ... –

+0

Et cela signifie? –

Répondre

1
  1. A CString est faite de TCHAR s. TCHAR est défini comme char ou wchar_t.

  2. A CString en char de wchar_t/s est de même avec CStringA/CStringW.

  3. std::string est constitué de char s. Un CString peut être construit à partir de CStringA ou CStringW.

Votre CString est, sans doute, un CStringW donc:

CStringW ws { L"Howdy!" }; 
std::string ss { CStringA{ws} }; 
std::cout << ss; 
0
CString &AG1 = CString(_T("A string")); 
pComboAg1->GetLBText(pComboAg1->GetCurSel(), AG1); 

Ceci est faux de tant de manières. AG1 est un pointeur vers des données fixes et vous définissez AG1 avec autre chose.

utiliser Just:

CString AG1; 
pComboAg1->GetLBText(pComboAg1->GetCurSel(), AG1); 

Vos données SQL devrait être UTF-8. Si vous créez un nouveau programme MFC, l'option UNICODE est activée par défaut (UTF-16).

données Obtenir la base de données:

std::string str; 
//get str from databases 
CStringW atl = CA2W(str.c_str(), CP_UTF8); 
combobox.AddString(atl); 

Envoi de données à databse:

CString AG1; 
combobox.GetLBText(0, AG1); 
std::string str = CW2A(AG1, CP_UTF8); 
... 

Dans de rares cas, les données pourraient être ANSI, dans ce cas, enlever le drapeau CP_UTF8.