CRecordSet::GetFieldValue kürzt string bei varchar ?



  • Moinsen,

    ich hab in einer Tabelle eine Spalte als nvarchar(10) not null deklariert. Wenn ich mir den Inhalt der Tabelle so anschaue, steht auch alles korrekt drin (also 10 Zeichen). Wenn ich nun aber aus meinem C++ Programm mit im Titel besagter Funktion zugreife, bekommt der übergebene CString nur 9 Zeichen, das letzte wird abgeschnitten.
    Hier mal ein kleiner Code-Ausschnitt

    // Get column information
      CODBCFieldInfo fi;
      int fc = m_rs->GetODBCFieldCount();
      for (int i = 0; i < fc; i++ ) {
        m_rs->GetODBCFieldInfo(i,fi);
        KFieldInfo inf(fi);
        m_colInfos.push_back(inf);
    
        // Add column to list control
        list.InsertColumn(i, inf.m_strName, 0, 120);
      }
    
      // Now parse recordset and fill data into the list
      CString fieldVal;
      int index = 0;
      while (!m_rs->IsEOF()) {
        m_rs->GetFieldValue(short(0), fieldVal);
        list.InsertItem(index,fieldVal);
        for (int k = 1; k < fc; k++) {
          m_rs->GetFieldValue(k, fieldVal);
          if (m_colInfos.at(k).m_nSQLType == 11) // date
            fieldVal.Delete(10,100);
          list.SetItemText(index,k,fieldVal);
        }
        index ++;
        m_rs->MoveNext();
      }
    

    Kann mir jemand erklären warum dem so ist ? 🙂

    LG



  • Ist das letzte Zeichen ein Leerzeihen? Varchars speichern nur Text ohne Leerzeichen links/rechts.



  • Nein, ist ein Datum als String 'YYYY-MM-DD'... ist nen SQL Server 2005 und sind teilweise Daten von vor 1753, deswegen als String 🙂


Anmelden zum Antworten