Bonjour,
Je vous communique ci après le pb, que nous estimons comme étant certainement un problème de compatibilité entre Windws et MS SQL serveur :
Nous avons une procédure stockée qui ajoute x fois des enregistrement en bdd là ou elle ne devrait n'en insérer qu'un seul (cela fais froid dans le dos car maintenant nous avons les plus grands doute quant à la capacité de Windev de nous assurez de l'intégrité des données).
La même procédure stockée lancée sous sql (2005) fonctionne parfaitement.
Voici le code nécessaire à la reproduction du problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 ******************************************************************************************************************** -- CREATION DE LA TABLE SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Personnes]( [IDPersonne] [int] IDENTITY(1,1) NOT NULL, [NomPersonne] [varchar](50) COLLATE French_CI_AS NOT NULL CONSTRAINT [DF_Personnes_NomPersonne] DEFAULT (''), CONSTRAINT [PK_Personnes] PRIMARY KEY CLUSTERED ( [IDPersonne] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO ******************************************************************************************************************** ********************************************************** -- CREATION DE LA PROCEDURE set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[ProcInsertPersonne] (@Nom as varchar(50)) AS BEGIN Declare @IDRetour as int SET @IDRetour = 0 SET NOCOUNT ON INSERT INTO Personnes (NomPersonne) VALUES (@Nom) SET @IDRetour = SCOPE_IDENTITY() SELECT @IDRetour END GO ******************************************************************************************************************** ******************************************************************************************************************** --TEST DE LA PROCEDURE Exec ProcInsertPersonne 'codetest' select * from Personnes where nompersonne ='toto' delete FROM Personnes where nompersonne ='toto' ******************************************************************************************************************** --Suppression de la table IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Personnes]') AND type in (N'U')) DROP TABLE [dbo].[Personnes] GO ****************************************************************************************************************************************************************************** --SUPPRESSION DE LA PROCEDURE DROP PROCEDURE [dbo].[ProcInsertPersonne][/INDENT][/INDENT][/INDENT]
Le support Technique de PCSoft nous indique comme réponse d'effectuer le changement suivant :
Cela fonctionne mais.... cela génère ensuite une autre erreur :"Il faut pour cela intervenir sur la connexion, en ajoutant dans les <Options supplémentaires> les constantes "hCurseurServeur" et "hCurseurForwardOnly".
Exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part lConnexion = HDécritConnexion ( "MaConnexion1" , "sa" , "" , "PMO" , "TEST" , hOledbSQLServer , hOLectureEcriture , "" , hCurseurServeur + hCurseurForwardOnly ) "
"[I]Quand je fais un hexporteXML(UneSourceDeDonnee, Chemin, hExpCréation) le code ne fonctionne pas et je rencontre une erreur :
voici le message d'erreur :
La réponse de PCsoft est la suivante :Erreur à la ligne 14 du traitement Procédure globale ConnexionBase.
Vous avez appelé la fonction HExporteXML.
Erreur de l'accès OLE DB.
Numéro d'erreur = 170123
Echec de la récupération du nombre d'enregistrements dans le fichier <>.
Informations techniques
Projet : ProjetTest
Dump de l'erreur du module <WD140HF.DLL> <14.00Dqh>.
- Appel WL :
Traitement de <Procedures globales de ProjetTest.ConnexionBase>, ligne <14>, thread <0>
Fonction <HExporteXML>, n° de syntaxe <4>
- Niveau : erreur fatale (EL_FATAL)
- Code erreur : 73001
- Code erreur WD55 : 3001
- Pas de code d'erreur système
- Pas de message d'erreur système
- Que s'est-il passé ?
Erreur de l'accès OLE DB.
Numéro d'erreur = 170123
Echec de la récupération du nombre d'enregistrements dans le fichier <>.
- Infos de debug :
IEWDOLDB=111010
Module=<WDOLDB>
Version=<14.00Ap>
Fonction (7,101)
- Infos attachées :
EIT_NATIVECODE : <170123>
EIT_LOGICALTABLENAME : <PsdMaSource>
EIT_PILEWL :
Procédure globale ConnexionBase (Procedures globales de ProjetTest.ConnexionBase), ligne 14
Clic sur btnTest (fenTest.btnTest), ligne 1
EIT_COMPOSANT :
EIT_DATEHEURE : 07/12/2009 16:10:17
- Identifiant dans le .err : 72801"
Quelqu'un a-t-il été confronté à ce type de problème ????"Dans l’immédiat, je vous conseille de créer une nouvelle connexion et d’utiliser cette connexion uniquement pour la commande HExporteXML."
Autre point subalterne mais pour le moin pénible : PCSoft nous engagent à passer sur l'accè natif SQL.
Pour moi deux question se posent :
1 - Accès natif ou pas, sur des informations ou fonctions non spécifiques SQL 2005/2008 les résultats en terme de donnée doivent être les mêmes, non ?
2 - L'accès natif PCSoft n'est-il pas simplement la mise en application de l'accès natif Microsoft :
http://msdn.microsoft.com/en-us/data/aa937733.aspx
Si tel est le cas, il est imcompréhensible que les utilisateur aient à payer PCSoft pour que leur produits soient aux normes et compatible avec les bases de données du marché.
Imaginez un constructeur automobile qui vous dise : ma voiture fonctionne parfaitement avec Mon essence mais si vous voulez rouler avec du "sans Plomb 98" normalisé que vous retrouvez dans toutes les stations services vous devez payer l'adaptation du moteur.....
Merci de vos informations et commentaires,
Bonne journée,
Partager