[C++/ODBC/SQL] Spécialiste du RecordSet needed !

Spécialiste du RecordSet needed ! [C++/ODBC/SQL] - C++ - Programmation

Marsh Posté le 20-04-2005 à 12:00:50    

Bonjour.
 
Voila, j'utilise pas mal de RecordSet mais là je me heurete à un problème de données tronquées (erreur 1004).
 
- J'enregistre dans ma base une "annotation" :

Code :
  1. BEGIN_TRANSACTION(PDBNAT);
  2. CRcdSet note(PDBNAT);
  3. CString sqlRequest;
  4. sqlRequest.Format("UPDATE rcd SET annotation =  \"%s\" WHERE idrcd = '%s' ", m_idappli);
  5. PDBNAT->ExecuteSQL(sqlRequest);
  6. COMMIT_TRANSACTION(PDBNAT);


 
Là, pas de soucis, le champ "annotation" de ma table "rcd" contient bien toute l'annotation.
Or celle ci est tres importante (je n'ai pas compté, mais quand j'enregistre celle ci dans un fichier texte ce dernier fait 26Ko)
 
- Maintenant, je souhaite lire celle ci, et là c'est le drame.
 
En effet, jusqu'à maintenant je lisais ss problème une annotation avec un recordset classique, mais là vu la taille du merdier j'ai une erreur 1004 (truncation).
 
Auriez vous une idée sur la façon de déclarer mon DoFieldExchange ?
 
Voila ce que j'ai en ce moment :
 

Code :
  1. IMPLEMENT_DYNAMIC(CRcdAnnotations, CRecordset)
  2. CRcdAnnotations::CRcdAnnotations(CDatabase* pdb)
  3. : CSwRecordSet(pdb)
  4. {
  5. //{{AFX_FIELD_INIT(CRcdAnnotations)
  6. m_idrcd = _T("" );
  7. m_annotation = _T("" );
  8. m_nFields = 2;
  9. //}}AFX_FIELD_INIT
  10. m_nDefaultType = snapshot;
  11. }
  12. CString CRcdAnnotations::GetDefaultConnect()
  13. {
  14. return _T("ODBC;DSN=DBInfNat" );
  15. }
  16. CString CRcdAnnotations::GetDefaultSQL()
  17. {
  18. return _T("[rcd]" );
  19. }
  20. void CRcdAnnotations::DoFieldExchange(CFieldExchange* pFX)
  21. {
  22. //{{AFX_FIELD_MAP(CRcdAnnotations)
  23.            pFX->SetFieldType(CFieldExchange::outputColumn);
  24. SWRFX_Text(pFX, _T("[idrcd]" ), m_idrcd);
  25. SwRFX_FreeText(pFX, _T("[annotation]" ), m_annotation);
  26. //}}AFX_FIELD_MAP
  27. }
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CRcdAnnotations diagnostics
  30. #ifdef _DEBUG
  31. void CRcdAnnotations::AssertValid() const
  32. {
  33. CSwRecordSet::AssertValid();
  34. }
  35. /////////////////////////////////////////////////////////////////////////////
  36. void CRcdAnnotations::Dump(CDumpContext& dc) const
  37. {
  38. CSwRecordSet::Dump(dc);
  39. }


 
En gros, remplacer le "SwRFX_FreeText" par une autre solution pour récupérer toutes les infos ?
 
Merci d'avance, là je suis bien perdu.


Message édité par Sagoth le 20-04-2005 à 12:01:32
Reply

Marsh Posté le 20-04-2005 à 12:00:50   

Reply

Marsh Posté le 20-04-2005 à 14:36:59    

hello,
essaie en ajoutant la taille dans ta table du champ à la fin de la commande:
SwRFX_FreeText(pFX, _T("[annotation]" ), m_annotation, 1000);
a+

Reply

Marsh Posté le 20-04-2005 à 16:12:34    

Bon en fait après qulques tests, la taille max que je peux enregistrer est de 2^11 (2048).
Je vais tronquer sauvagement ce qui dépasse et pi basta. Non mais ^^.
 
PS : l'idée de limiter directement la taille du curseur semble marcher, mais bon je ne dépasserai pas 2048 de toute façon.
 
En tout cas merci pour ta précision :)

Reply

Marsh Posté le 21-04-2005 à 09:06:32    

hello,
tu es sur pour la taille limite?
il me semble avoir deja utilisé RFX_Text avec 5000 charactères
a+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed