IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces de programmation Oracle Discussion :

[OCILIB] OCI_LobRead erreur Access violation writing location


Sujet :

Interfaces de programmation Oracle

  1. #1
    Membre à l'essai
    Profil pro
    xcccc
    Inscrit en
    Décembre 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : xcccc

    Informations forums :
    Inscription : Décembre 2004
    Messages : 20
    Points : 12
    Points
    12
    Par défaut [OCILIB] OCI_LobRead erreur Access violation writing location
    Salut,

    je viens vous car j'ai un problème lors de l'utilisation de OCI_LobRead ou OCI_LobRead2.
    J'ai un NCLOB d'environ 5000 caractères dans ma base de donnée, je n'ai eu aucun soucis pour l'insérer avec OCILIB mais j'ai une erreur "Access violation writing location" lorsque j'utilise OCI_LobRead ou OCI_LobRead2.
    Je vous met en gros le code que j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TCHAR *szTemp = new TCHAR[5001];
    OCI_Lob *oClob;
    oClob = OCI_GetLob(m_PrivRs, num);
    OCI_LobRead(oClob, szTemp, 5000);
    Si je descend le nombre de caractère à 4000 dans les paramètre de la fonction je n'ai pas de plantage mais la chaine que je récupère est tronquée.
    Si je laisse à 5000 j'ai l'erreur qui est levée mais quand je break le programme, la chaine à l'air de s'être remplie quand même.
    J'ai essayé avec OCI_LobRead2 mais même j'ai exactement le même résultat.
    Si vous avez un piste ça m'aiderait beaucoup.

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Et quelle est l'erreur ??

    sinon essaie de faire le read dans un loop par chunk de 2048 par exemple. Le mieux de d'iterer par chunk dont la taille est retournée par OCI_LobGetChunkSize() (bonnes pratiques oracle)
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Version d'Oracle ?
    Version d'OCILIB ?
    Charset mode utilisé ?
    Utilises tu UTF8 ?

    Si tu utilises OCI_CHARSET_WIDE (ocilibw.dll), the upcoming v3.9.3 has a fix around OCI_LobRead() within this charset mode.
    Here is the changelog of v3.9.3 (release date : 05/12/2011) :
    2011-12-05 Version 3.9.3 Vincent Rogier vince.rogier@ocilib.net

    * Miscellaneous fixes

    - Fixed broken support for Oracle 8i client since v3.9.0
    - Fixed OCI_ObjectSetObject() : a bug had been introduced in v3.8.1 when computing internal object structure offsets and paddings
    - Fixed OCI_LobRead(), OCI_LobRead2() : in OCI_CHARSET_WIDE charset builds only, a segfault could happen caused by an internal buffer overwrite
    - Fixed OCI_SetStatementCacheSize(), OCI_GetStatementCacheSize() : an error ORA-24315 (with no incidence) could be thrown by some versions of Oracle clients
    - Fixed OCI_BindXXX() : All binding methods returned TRUE instead of FALSE when an exception OCI_ERR_MAX_BIND occured
    - Fixed OCI_GetString() : an error OCI-22061 was happening when the column was numeric and a user defined numeric format where provided with OCI_SetDefaultFormatNumeric()
    - Fixed OCI_GetServerRevisionVersion() : it was returned the same value as OCI_GetServerMajorVersion() since v3.4.0
    - Fixed internal method OCI_ParseSqlFmt() used in OCI_xxxFmt() calls : Quoted strings were not properly output since v3.9.0
    - Fixed internal allocation mode :

    - some OCI_BindXXX() calls were not compatible with OCI_BAM_INTERNAL allocation mode and when used with it, were causing segfaults if the host variable parameter was NULL
    - now these methods raise an OCI_ERR_NULL_POINTER error if the host variable parameter is NULL and the statement bind allocation mode is set to OCI_BAM_INTERNAL

    * Miscellaneous changes

    - OCILIB library compilation

    - Modified compile time detection of OCI client version when using OCI_IMPORT_LINKAGE as Oracle backported some defines introduced at version (X) in patches for version (X-1) !

    - OCILIB documentation

    - Updated Bind allocation mode description : added list of incompatible OCI_BindXXX() methods
    - Added OCI_BAM_INTERNAL compatibility information in all OCI_BindXXX calls() documentation
    - Added OCI_ENV_EVENTS requirements for subscriptions and HA methods
    - Minor changes

    - few code internal minor changes

    - Removed in each OCILIB source file, the version number and date time (updated at each new release, using diff tools was a nigthmare !)
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  4. #4
    Membre à l'essai
    Profil pro
    xcccc
    Inscrit en
    Décembre 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : xcccc

    Informations forums :
    Inscription : Décembre 2004
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Merci pour tes réponses,
    j'ai testé en version 3.9.1 d'OCILIB et j'utilisais bien la ocilibw.dll, l'erreur que j'avais était "Access violation writing location", je vais essayé ce matin la dernière version (3.9.3) et je te tiens au courant.

    Edit :
    Bon je viens de tester rapidement avec la dernière version et j'ai toujours le même soucis, ça vient peut-être de moi mais je vois pas en quoi.
    On travaille avec oracle 10g, mon CLOB fait exactement 4873 caractères, pour tester je crée un TCHAR de 6001 caractères (plus tard j'utiliserai la et j'utilise ReadLob(oClob, szTemp, 6000) pour essayer de le lire. C'est à ce moment là que j'ai l'erreur "Access violation writing location".
    Dis moi si j'utilise mal la fonction.
    En attendant je vais essayer de le faire en découpant par morceau.

    Merci d'avance

Discussions similaires

  1. [Lazarus] [0.9.27] Erreur access violation avec TCalendar
    Par ovni76 dans le forum Lazarus
    Réponses: 5
    Dernier message: 22/07/2009, 12h17
  2. Réponses: 6
    Dernier message: 15/05/2009, 14h07
  3. [débutant]Access violation reading location
    Par gate35 dans le forum C++
    Réponses: 6
    Dernier message: 13/05/2009, 14h32
  4. Erreur Access Violation : API mySQL et Builder 6
    Par Invité dans le forum C++Builder
    Réponses: 33
    Dernier message: 14/11/2008, 11h11
  5. Access violation writing location 0x00000010.
    Par dhoorens dans le forum C++
    Réponses: 6
    Dernier message: 29/12/2006, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo