PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV (earlier versions) → PCSOFT V28 Acces Natif Oracle ORA-24536 Column security is unknown for one or more columns.
PCSOFT V28 Acces Natif Oracle ORA-24536 Column security is unknown for one or more columns.
Started by Greg Coll, Nov., 20 2024 9:15 AM - 6 replies
Posted on November, 20 2024 - 9:15 AM
Bonjour,
Je vais parler d'oracle et son acces natif, je suis en V28 Windev et Webdev.

L'entreprise pour laquelle je travaille me tiens a disposition des vues, et bien sur certaines colonnes des tables originales sont traitees par RAS (Oracle Database Real Application Security).
Ce qui fait que pour un certain user certaines colonnes seront a Null et pour d'autres elles seront visibles avec des Data.

J'utilise Oracle SQL Developper ou SQL+ pour browser/fetcher cette vue, pas de souci je vois biens ces fameuses colonnes avec leur Data.
Couche client Oracle InstantClient dernière versions en 32 et 64 bits (23 et 21 de tete)

Je passe a PCSoft :
Avec le meme, user, droit, serveur etc, la connexion se passe correctement
Houvreconnexion OK

si houvreconnexion(Connexion_Test)
SD est une source de donnees
hexecuterequetesql(sd, Connexion_Test,hrequetesanscorrection, "Select * from mavue") (ou hexecuterequete pour une requete stockee)
Fonctionne, pas de retour d'erreur, mais a ce niveau je n'ai pas parcouru un seul Record de Ma vue
A la premiere instruction Hlitpremier(SD) ou hnbenr(SD) qui va produire un parcours de record, je recois une erreur Oracle ORA-24536 Warning
Column security is unknown for one or more columns.

Coder erreur 73001 et je me fais jeter bien sur.

Oui il y a de la securité sur certaines colonnes de cette vue, mais pourquoi SQL DEV me les affiche ainsi que SQL+ et que l'acces Natif PCSOFT lui refuse ?

Quelqu' un a t il deja rencontré ce problème ?

PS J'ai tenté avec la propriété OCI_ATTR_NO_Column_Auth_Warning dans la propriété ..infosEtendues de ma connexion, sans succes.

Cordialement
Greg
Registered member
2 messages
Posted on November, 20 2024 - 1:12 PM
Petit add de l'auteur, la version du serveur Oracle est 19C.
Registered member
44 messages
Posted on November, 20 2024 - 2:21 PM
Bonjour

Je vois votre problème, voilà ce qui s'est passé, votre requête SQL n'a pas les rubriques | les champs

1. Vous avez créer plusieurs colonnes dans un outil modèle 'table'
2. Vous avez écrit une requête 'Select * from fichier', ensuite vous avez affecter les champs dans chaque colonnes de l'outil 'table'

Pour le cas 1, vous devrez compter le nombre de colonne dans l'outil modèle 'table'
Pour le cas 2, vous devrez écrire tous les rubriques | tous les champs dans la requête SQL

Pour les deux, vous devrez égaliser le nombre de colonne et le nombre de rubrique de la requête SQL
Exemple : 'Select nom, prénom, civilité, adresse from fic_collaborateur'

NB : Vous devrez affecter les rubriques dans chaque colonne de l'outil table spécifier
NB : Dans Oracle Database, vous ne devrez pas écrire des requête SQL 'Select * from Fichier'
NB : Normalement si HOuvreConnexion() est bon alors vous avez la possibilité de récupérer les Data dans Oracle Database

Cordialement
Mr.RATSIMANDRESY
Niry Aina Eddy
Registered member
44 messages
Posted on November, 20 2024 - 2:51 PM
Je vois que la requête SQL retourne aucune ligne de Data

Vous devrez exécuter la requête SQL 'Select Colone_3 from mavue' dans Oracle Database | dans un éditeur SQL | dans un Navicat SQL | ...

1. Soit 'Select Colone_3 from mavue' retourne aucune ligne de Data
2. Soit vous devrez écrire le code suivante :

Pour le cas 1, en mode teste de la base de donnée Oracle Database, essayer d'ajouter des Data dans le fichier
pour le cas 2, exécuter le code après avoir remplir les Data

NB : Attention de toucher à l'Oracle Database en mode production

Cordialement
Mr.RATSIMANDRESY
Niry Aina Eddy
Registered member
44 messages
Posted on November, 20 2024 - 2:56 PM
LOCAL
sString is string
sdDonnées is Source dede Données
sString = "Select Colone_3 from mavue"
IF HExécuteRequêteSQL(sdDonnées, "cnConnexion_Oracle", hRequêteSansCorrection, sString) = False THEN
Erreur(ErreurInfo(errComplet))
ELSE
HLitPremier(sdDonnées)
TANTQUE NOT HEnDehors(sdDonnées)
TableAjouteLigne({"TABLE_MAVUE", indChamp}, sdDonnées.Colone_3)
HLitSuivant(sdDonnées)
FIN
END
TableSelectMoins({"TABLE_MAVUE", indChamp})
Registered member
2 messages
Posted on November, 20 2024 - 4:35 PM
Bonjour Eddy et à nouveau Merci.

Il me semblait avoir répondu mais je ne retrouve plus ce Post.
Donc je vais peut-être doublonné.
J'attaque la vue, mettons que la vue a 5 colonnes par exemple, seule la colonne 3 que j'appellerai Colonne_3 est securisee RAS.
La table derrière a des données, le vue aussi, un select dans SQL+ ou SQL Dev d'Oracle sur la vue me montre bien des data sur tous les records de toutes les colonnes.

Maintenant dans Webdev ou Windev 28 donc :
un Select Colonne_1 from ma vue fonctionne, ainsi que le parcours, hlitpremier, hnbenr etc
un Select Colonne_2 from ma vue fonctionne, ainsi que le parcours, hlitpremier, hnbenr etc
un Select Colonne_1, Colonne_2 from ma vue fonctionne, ainsi que le parcours, hlitpremier, hnbenr etc

un Select Colonne_3 from ma vue fonctionne (dans le sens hexecuterequetesql), mais pas le parcours, hlitpremier, hnbenr etc plante->ORA-24536

Tout select contenant la colonne_3 comme un ‘select *’ fera planter.

Si je reprends votre exemple :


sString = "Select Colone_3 from mavue"
IF HExécuteRequêteSQL(sdDonnées, "cnConnexion_Oracle", hRequêteSansCorrection, sString) = False THEN //Ca ca fonctionne
Erreur(ErreurInfo(errComplet))
ELSE
HLitPremier(sdDonnées)//->Erreur ORA-24536


sString = "Select Colone_1 from mavue"
IF HExécuteRequêteSQL(sdDonnées, "cnConnexion_Oracle", hRequêteSansCorrection, sString) = False THEN //Ca ca fonctionne
Erreur(ErreurInfo(errComplet))
ELSE
HLitPremier(sdDonnées)//->Pas d'erreur, ca fonctionne
Message modified, November, 20 2024 - 4:47 PM
Registered member
44 messages
Posted on November, 20 2024 - 6:10 PM
L'éditeur de code du forum a un bug, voilà le code original

LOCAL
sString is string
sdDonnées is Source de Données
sString = "Select Colone_3 from mavue"
IF HExécuteRequêteSQL(sdDonnées, "cnConnexion_Oracle", hRequêteSansCorrection, sString) = False THEN
Erreur(ErreurInfo(errComplet))
ELSE
HLitPremier(sdDonnées)
TANTQUE NOT HEnDehors(sdDonnées)
TableAjouteLigne({"TABLE_MAVUE", indChamp}, sdDonnées.Colone_3)
HLitSuivant(sdDonnées)
FIN
END
TableSelectMoins({"TABLE_MAVUE", indChamp})