PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Problème de requete sql sur vue
Problème de requete sql sur vue
Iniciado por Paul SOULAT, 27,abr. 2020 14:20 - 11 respuestas
Miembro registrado
49 mensajes
Publicado el 27,abril 2020 - 14:20
Bonjour sur un projet on me demande de mettre à jour des données provenant d'un serveur sql
on m'a fourni une requete par contre je n'arrive pas à l'exploiter car elle va apparemment sur des vues or je ne sais pas comment je peux accéder à ces vues

le code de la requete :

SELECT
vue_tiers.tie_code AS Code_Client,
vue_dirigeant.col_nom +' '+ vue_dirigeant.col_prenom AS Nom_Prenom_Dirigeant,
vue_tiers.mag_raisoc AS Raison_Social,
magasin.mag_denom_commer AS Denomination_Commercial,
vue_tiers.mag_adresse AS Adresse,
vue_tiers.mag_codepostal AS Code_Postal,
vue_tiers.mag_ville AS Ville,
vue_tiers.mag_telephone_1 AS Teplephone_1,
vue_tiers.mag_telephone_2 AS Telephone_2,
vue_tiers.mag_telephone_p AS Telephone_Portable,
vue_tiers.mag_fax AS Fax,
vue_tiers.mag_email AS Email,
CASE WHEN not EXISTS( SELECT 1 FROM contrat WHERE contrat.tie_des_id = vue_tiers.tie_id ) THEN
'JAMAIS'
WHEN EXISTS( SELECT 1 FROM contrat WHERE contrat.cont_statut = 2 AND contrat.tie_des_id = vue_tiers.tie_id ) THEN
'CONTRAT ACTIF'
ELSE
'CONTRATS INACTIF'
END AS statut,
( SELECT MAX( piece.pie_date ) FROM piece WHERE piece.tie_des_id = vue_tiers.tie_id AND piece.pie_type = 5 ) AS date_derniere_facture
FROM
vue_tiers,
vue_dirigeant,
magasin
WHERE
vue_tiers.tie_id = vue_dirigeant.tie_id AND
vue_tiers.tie_publisher = vue_dirigeant.tie_publisher AND
vue_tiers.tie_type_client = 1 AND
vue_tiers.tie_code <> '50' AND
magasin.mag_id = vue_tiers.mag_id AND
magasin.mag_publisher = vue_tiers.mag_publisher AND
omc_f_is_valide (magasin.mag_fin_validite, CURRENT timestamp) = 1
ORDER BY
CAST ( ( CASE WHEN isnumeric( Code_Client ) = 1 THEN Code_Client ELSE 0 END ) AS INTEGER);


Pourriez-vous me dire comment je peux accéder aux vues, merci
Miembro registrado
4.362 mensajes
Publicado el 28,abril 2020 - 08:46
Bonjour,
Normalement la vue est sur le serveur, au même titre que les tables. Il est possible que tu n'ais pas les droits dessus. Vois avec le dba

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
2.682 mensajes
Publicado el 28,abril 2020 - 12:54
Bonjour,

Soit tu importes la vue comme une table, soit tu fais un HExecuteRequeteSQL()

--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
49 mensajes
Publicado el 29,abril 2020 - 18:20
Bonjour Voroltinquo,

J'ai vérifié j'ai bien les droits du coup il y a peut être un moyen de les importer que je n'ai pas fait?
Miembro registrado
49 mensajes
Publicado el 29,abril 2020 - 18:23
Bonjour Philippe,

L'importer je n'y arrive pas je ne la vois pas dans les propositions d'import je ne vois que les tables

HExecuteRequeteSQL() j'ai essayé mais il me retourne une erreur quand je met la requête que j'ai mis plus haut

Je ne comprends pas trop du coup

Merci
Miembro registrado
2.682 mensajes
Publicado el 29,abril 2020 - 22:03
Tu travailles avec quel SGBD ?

Quelle est l'erreur avec le HExceuteRequeteSQL ? Peux tu poster le code que l'on puisse t'aider un peu plus ?

--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
49 mensajes
Publicado el 01,mayo 2020 - 08:44
Bonjour Philippe,

Le SGBD c'est sybase (sqlanywhere10)

Le code :

sRequete est une Requête SQL =
[
SELECT
vue_tiers.tie_code AS Code_Client,
vue_dirigeant.col_nom +' '+ vue_dirigeant.col_prenom AS Nom_Prenom_Dirigeant,
vue_tiers.mag_raisoc AS Raison_Social,
magasin.mag_denom_commer AS Denomination_Commercial,
vue_tiers.mag_adresse AS Adresse,
vue_tiers.mag_codepostal AS Code_Postal,
vue_tiers.mag_ville AS ville,
vue_tiers.mag_telephone_1 AS Teplephone_1,
vue_tiers.mag_telephone_2 AS Telephone_2,
vue_tiers.mag_telephone_p AS Telephone_Portable,
vue_tiers.mag_fax AS Fax,
vue_tiers.mag_email AS Email,
CASE WHEN NOT EXISTS( SELECT 1 FROM contrat WHERE contrat.tie_des_id = vue_tiers.tie_id ) THEN
'JAMAIS'
WHEN EXISTS( SELECT 1 FROM contrat WHERE contrat.cont_statut = 2 AND contrat.tie_des_id = vue_tiers.tie_id ) THEN
'CONTRAT ACTIF'
ELSE
'CONTRATS INACTIF'
END AS statut,
( SELECT MAX( piece.pie_date ) FROM piece WHERE piece.tie_des_id = vue_tiers.tie_id AND piece.pie_type = 5 ) AS date_derniere_facture
FROM
vue_tiers,
vue_dirigeant,
magasin
WHERE
vue_tiers.tie_id = vue_dirigeant.tie_id AND
vue_tiers.tie_publisher = vue_dirigeant.tie_publisher AND
vue_tiers.tie_type_client = 1 AND
vue_tiers.tie_code <> '50' AND
magasin.mag_id = vue_tiers.mag_id AND
magasin.mag_publisher = vue_tiers.mag_publisher AND
omc_f_is_valide (magasin.mag_fin_validite, current timestamp) = 1
ORDER BY
CAST ( ( CASE WHEN isnumeric( Code_Client ) = 1 THEN Code_Client ELSE 0 END ) AS INTEGER);
]


l'erreur :

"Mot timestamp inattendu

Merci
Miembro registrado
4.362 mensajes
Publicado el 01,mayo 2020 - 09:58
current timestamp est propre à sql anywhere. Windev ne reconnait que le SQL ANSi.
C'est la concaténation de GETDATE et NOW séparés par un espace

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
2.682 mensajes
Publicado el 01,mayo 2020 - 22:04
Accès natif ou ordre SQLxxx en ODBC ?

--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
4.362 mensajes
Publicado el 01,mayo 2020 - 22:42
Windev ne fournit pas d'accès natif sql anywhere.
Pour info, l'AGL maison de sybase (Power AMC) doit se connecter aux BDD sql anywhere via ODBC

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
2.682 mensajes
Publicado el 02,mayo 2020 - 17:12
Donc si l'accès se fait par ODBC je ne vois pas ce qui bloque. Un SQLExec ou un HexecuteRequeteSQL() fera très bien l'affaire.

--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
49 mensajes
Publicado el 04,mayo 2020 - 18:02
Re bonjour tout le monde

j'ai créé à la main les vues elles ce sont bien créées par contre comment puis-je les initialiser au démarrage de la fenêtre j'ai essayé un rafraichissement avec hmiseajourvue mais cela n'est pas compatible avec odbc du coup comment puis-je afficher les données de ma vue

Merci