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

WinDev Discussion :

Insertion sur requete [WD14]


Sujet :

WinDev

  1. #1
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 953
    Points : 766
    Points
    766
    Par défaut Insertion sur requete
    Bonjour,

    J'ai un problème inattendu dans le code ci-dessous, en effet, il fonctionne très bien mais ne m'insère que 11 lignes, or je sélectionne 3 coloris et 6 tailles.

    Je pense avoir un problème dans cette partie mais je ne vois pas..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    POUR i = 1 A 10
    	SI TABLE_CODIM1.SELECTION[i] ALORS
    		POUR j=1 A TableOccurrence(CODIM2_SUS)
    			SI CODIM2_SUS.SELECTION[j] ALORS
    J'ai tenté de remplacer POUR i=1 A 10 par POUR j=1 A TableOccurrence(TABLE_CODIM1), mais cela ne fonctionne plus

    Serait il possible que quelqu'un puisse me guider ?



    CODE GLOBAL:

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    //Champs de saisie obligatoire constituant une contrainte de validation
    SI SAI_ART_CODE ~= "" ALORS
    	Erreur("Vous devez saisir un code article.")
    	RepriseSaisie(SAI_ART_CODE)	
    FIN
    SI COMBO_COLLEC <=0 ALORS
    	Erreur("Vous devez saisir une saison.")
    	RepriseSaisie(COMBO_COLLEC)	
    FIN
    SI TABLE_CODIM1..Occurrence = 0 ALORS
    	Erreur("Vous devez saisir au moins un coloris.")
    	RepriseSaisie(TABLE_CODIM1)
    FIN
    POUR i = 1 A 10
    	SI TABLE_CODIM1.SELECTION[i] ALORS
    		POUR j=1 A TableOccurrence(CODIM2_SUS)
    			SI CODIM2_SUS.SELECTION[j] ALORS
     
    				// Contrôle si l'article en création existe déjà dans la base de données	
    				variable est une chaîne
    				Suffixe est une chaîne
    				NouveauCode est une chaîne
     
    				sRequete est une chaîne="SELECT ART_CODE FROM ARTICLES WHERE ART_CODE LIKE '"+SAI_ART_CODE+"%'  ORDER BY ART_CODE DESC "
    				//SI EnModeTest() ALORS Trace(sRequete)
    				SI	SQLExec(sRequete,"REQ") ALORS
    					SI	SQLAvance("REQ") = 0 ALORS
    						variable=SQLLitCol("REQ", 1)
    						SI EnModeTest() ALORS Trace("TRACE N°1-Récupere après \-", ExtraitChaîne(variable,2,"\"))
    						Suffixe=ExtraitChaîne(variable,2,"\") // Récupération de ce qu'il y a après l'anti-slash
    						SI EnModeTest() ALORS Trace("TRACE N°2- Incrémente de 1-", Val(Suffixe)+1)
    						Suffixe=Val(Suffixe)+1 	// Incrémente de 1 l'UVC
    						SI EnModeTest() ALORS Trace("TRACE N°3- Nouvelle UVC-", ExtraitChaîne(variable,1,"\")+"\"+Suffixe)
    						NouveauCode=ExtraitChaîne(variable,1,"\")+"\"+Suffixe // Constitution de la nouvelle UVC
     
    					SINON
    						SI EnModeTest() ALORS Trace("TRACE N°4-Création si inexistant-", SAI_ART_CODE+"\1")
    						NouveauCode=SAI_ART_CODE+"\1"
    					FIN
    					SQLFerme("REQ")
    					//Sélectionne le dernier code barre
    					sVariable_EAN est une chaîne
    					prefixe_AEN est une chaîne
    					nouveauCode_AEN est une chaîne
    					Cle est une chaîne
    					nTotal est un entier
    					Requete est une chaîne="SELECT MAX(ART_CODEBARRE) FROM ARTICLES " 
    					SI SQLExec(Requete, "REQ1") ALORS
    						SI SQLAvance("REQ1")=0 ALORS
    							sVariable_EAN=SQLLitCol("REQ1", 1)
    							SI EnModeTest() ALORS Trace("TRACE N°5- Extraction de AEN13-", Gauche(sVariable_EAN,12))
    							prefixe_AEN=Gauche(sVariable_EAN,12)
    							prefixe_AEN=NumériqueVersChaîne(Val(prefixe_AEN)+1,"012d")
    							SI EnModeTest() ALORS Trace("TRACE N°6- Incrémente de 1 AEN-", prefixe_AEN)
    						FIN
    					SINON
    						SQLInfoGene("REQ1")
    						Trace("Erreur SQL R1 : ", SQL.MesErreur)
    					FIN
     
    					SQLFerme("REQ1")
     
    					//calcul du caractère de contrôle
    					POUR ii = 1 A Taille(prefixe_AEN)        //Code est les 12 premiers caractères du code barre
    						SI EstPair(ii) ALORS
    							nTotal+=Val(prefixe_AEN[[ii]])*3
    						SINON
    							nTotal+=Val(prefixe_AEN[[ii]])
    						FIN
    					FIN 
    					Cle = ((PartieEntière(nTotal/10)+1)*10)-nTotal
    					SI Cle = 10 ALORS
    						Cle = 0
    					FIN
     
    					nouveauCode_AEN=prefixe_AEN + Cle
     
     
    					// Si les données n'existe pas alors INSERT INTO ajoute les données 
    					Requete1 est une chaîne="INSERT INTO ARTICLES (ART_CODE,ART_UVC,ART_NOMAPPEL,ART_CODIM1,ART_CODIM2,ART_DATE_CREATION,ART_DATE_MODIFICATION,ART_LIBRE1,ART_NOM,ART_COLLECTION,ART_FOURNISSEUR,ART_MARQUE,ART_COMPOSITION,ART_CODEBARRE,ART_LIBRE3,ART_CODIM3,ART_PRIXACHAT,ART_PRIXVENTE) "+...
    					"VALUES('"+NouveauCode+"','"+NouveauCode+"','"+SAI_ART_NOMAPPEL+"','"+TABLE_CODIM1.COL_CODE[i]+"','"+CODIM2_SUS.SUS_CODE[j]+"','"+SAI_CREATION+"','"+SAI_DATE_MODIF+"','"+SAI_ART_LIBRE1+"','"+SAI_ART_NOM+"','"+COMBO_COLLEC+"','"+COMBO_ART_FOUR+"','"+COMBO_ART_MARQUE+"','"+COMBO_COMPOSITION+"','"+nouveauCode_AEN+"','"+COMBO_ORIGINE1+"','"+COMBO_TYPE1+"','"+SAI_EPA+"','"+SAI_EPVD4+"') "
    					SI EnModeTest() ALORS Trace("TRACE N°7- Insertion-", Requete1)
    					SI	SQLExec(Requete1,"REQ10") ALORS
     
    					FIN
    					SQLFerme("REQ10")
    				FIN
     
    			FIN
    		FIN	
    	FIN
    FIN
     
    SI OuiNon("Vous êtes sur le point de créer un article, veuillez confirmer votre choix") ALORS
    	Info("La fiche article a été créée")
    FIN
    Par avance merci

    Raptor92
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    J'avoue pour commencer que je ne vois pas ce qui ne fonctionne pas, mais je peux te donner quelques pistes:
    1. Pour boucler sur les lignes de tes tables, il existe une syntaxe qui rend le code plus clair:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    POUR TOUTE LIGNE DE TABLE_CODIM1
    	SI TABLE_CODIM1.SELECTION ALORS
    		POUR TOUTE LIGNE DE CODIM2_SUS
    			SI CODIM2_SUS.SELECTION ALORS
    			FIN
    		FIN
    	FIN
    FIN
    Si ça ne règle pas ton problème, elle évite les erreurs d'indice de ligne et elle a pour mérite de rendre le code un peu plus clair...
    2. Tu as pas mal de traces dans ton code, est-ce que leurs indications sont correctes ?
    3. Tu ne testes pas le résultat de plusieurs requêtes, dont la requête d'insertion. Peut-être qu'une de celles-ci ne fonctionne pas toujours, et un sqlinfogene te permettra de savoir pourquoi
    Et j'avoue que d'une façon plus général, j'ai un peu de mal avec les déclarations de variable en plein milieu du code, mais je dois être de la vieille école
    4. Essaie de mettre un point d'arrêt juste avant la boucle de création, et traces le code en pas à pas, et en surveillant le contenu des variables avec le debugger tu te permettra peut-être de trouver ce qui cloche

    Tatayo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Erreur sur requete insert
    Par The_Big_Lebowski dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 08/12/2010, 21h50
  2. [MySQL] Select et insert sur 2 serveurs différents dans la meme requete
    Par tMSun dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/09/2008, 10h41
  3. message d'erreur sur requete INSERT
    Par captainamerica75 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/05/2007, 13h21
  4. [Système] Parse error sur requete INSERT
    Par gids01 dans le forum Langage
    Réponses: 4
    Dernier message: 17/04/2007, 16h54
  5. problème sur requete insert
    Par shadowmoon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/06/2005, 11h46

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