Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 25-09-2008 13:59:47

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,404
Site web

[RESOLU] Changement de transaction sur updatable datawindow

Bonjour,

Le changement de transaction sur une datawindow affecte-il les ItemStatus ? Je m'explique

Code: pb

dw_1.setTransObject(SQLCB)
dw_1.InsertRow(0)
[...]
If dw_1.Update(True, False) = 1 Then  // J'EFFECTUE UN INSERT DANS MA BASE SUR SQLCB
  COMMIT USING SQLCB;
Else
  ROLLBACK USING SQLCB;
End If
dw_1.ResetUpdate()

dw_1.setTransObject(SQLCA)
dw_1.setItem(dw_1.getRow(), "monChamp", maValeur)
If dw_1.Update(True, False) = 1 Then  // NORMALEMENT ON DEVRAIT AVOIR UN UPDATE SUR SQLCA ?
  COMMIT USING SQLCA;
Else
  ROLLBACK USING SQLCA;
End If
dw_1.ResetUpdate()

Dernière modification par sbouvetJD (30-09-2008 11:29:55)

Hors ligne

 

#2 25-09-2008 14:19:46

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2493
Pépites: 106
Banque: 9,223,372,036,854,775,808

Re: [RESOLU] Changement de transaction sur updatable datawindow

Bonjour,

Il ne manquerait pas le CONNECT USING SQLCA dans ce code, par hasard?


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#3 25-09-2008 14:20:56

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5122
Pépites: 97,200
Banque: 2,147,483,647

Re: [RESOLU] Changement de transaction sur updatable datawindow

Bonjour, tu n'as pas testé ton code ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#4 25-09-2008 14:21:32

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 30-05-2006
Messages: 4685
Pépites: 1,025
Banque: 2,147,483,647
Site web

Re: [RESOLU] Changement de transaction sur updatable datawindow

en faisant 2 fois le update ?
tu vois si le setitemstatus se fait...

si tu rencontres un duplicate key, c'est non... s'il fait un update apres le insert...c'est oui...

donnes nous des nouvelles.


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#5 25-09-2008 15:12:09

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,404
Site web

Re: [RESOLU] Changement de transaction sur updatable datawindow

En fait c'est notre hypothèse de travail car nous avons un comportement particulier ; le CONNECT USING... est fait (mais je ne l'ai pas mis ici). En effet nous avons parfois sur la base locale des "INSERT" intempestifs alors même que la connexion initiale est sur une base distante (SQLCB) où les INSERT se sont aussi correctement effectués. Or dans notre traitement, dans le cas "au pire", on devrait générer un UPDATE en local et non un INSERT. Ma question "globale" est : le changement de Transaction affecte-t-il les ItemStatus ?

Hors ligne

 

#6 25-09-2008 15:35:25

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 30-05-2006
Messages: 4685
Pépites: 1,025
Banque: 2,147,483,647
Site web

Re: [RESOLU] Changement de transaction sur updatable datawindow

je viens de faire un test... simple et basique...
j'insere une nouvelle ligne de données.... et puis update()  il me crée la donnée.
je modifie ensuite cette ligne, sans avoir fait de retrieve ou reset.... et puis update()... il modifie la donnée...

donc, ca marche pour moi.

A+++


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#7 25-09-2008 15:50:52

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,404
Site web

Re: [RESOLU] Changement de transaction sur updatable datawindow

Donc retour à la case départ ;) Merci !

Hors ligne

 

#8 25-09-2008 17:37:27

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 748
Pépites: 1,028,846
Banque: 171,170,849,654

Re: [RESOLU] Changement de transaction sur updatable datawindow

Bonjour,

Je pense éventuellement à un problème sur les propriétés de mise à jour ("update properties") de la datawindow :

=> Use delete then insert ou Use Update ?

Hors ligne

 

#9 25-09-2008 17:40:28

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 30-05-2006
Messages: 4685
Pépites: 1,025
Banque: 2,147,483,647
Site web

Re: [RESOLU] Changement de transaction sur updatable datawindow

key and updatable columns  et use delete then insert...


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#10 25-09-2008 18:38:33

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,775,808
Site web

Re: [RESOLU] Changement de transaction sur updatable datawindow

sbouvetJD a écrit:

Bonjour,

Le changement de transaction sur une datawindow affecte-il les ItemStatus ? Je m'explique

Code: pb

dw_1.setTransObject(SQLCB)
dw_1.InsertRow(0)
[...]
If dw_1.Update(True, False) = 1 Then  // J'EFFECTUE UN INSERT DANS MA BASE SUR SQLCB
  COMMIT USING SQLCB;
Else
  ROLLBACK USING SQLCB;
End If
dw_1.ResetUpdate()

dw_1.setTransObject(SQLCA)
dw_1.setItem(dw_1.getRow(), "monChamp", maValeur)
If dw_1.Update(True, False) = 1 Then  // NORMALEMENT ON DEVRAIT AVOIR UN UPDATE SUR SQLCA ?
  COMMIT USING SQLCA;
Else
  ROLLBACK USING SQLCA;
End If
dw_1.ResetUpdate()

Attention dans ton cas le premier InsertRow(0) affecte un statut New! à ta ligne. A la première affectation de donnée à un des champs, elle passeta à NewModified!
Le ResetUpdate effectué après le premier Update sur SQLCB repasse donc le statut de la ligne à New! et non à NotModified! (voir aide de ResetUpdate)
Lorsque tu vas faire ton setitem après être connecté à SQLCA, elle va passer à NewModified! de nouveau et non à DataModified! ce qui va générer un ordre Insert sur SQLCA.
Pour executer un ordre update sur SQLCA il faut statut DataModified! à la ligne. Tu peux l'obtenir en retirant le ResetUpdate() ou en faisant un SetItemStatus sur la ligne, en respectant les contraintes du tableau ci-dessous :

Original status    Specified status
—                             New!                         New Modified!            Data Modified!            Not Modified!
New!                         -                              Yes                           Yes                           No
NewModified!             No                            -                               Yes                           New!
DataModified!            NewModified!             Yes                          -                              Yes
NotModified!              Yes                           Yes                          Yes                           -


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#11 29-09-2008 13:55:59

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,404
Site web

Re: [RESOLU] Changement de transaction sur updatable datawindow

L'aide en ligne signale "After update flags are cleared, all rows have the status NotModified! or New! and the delete buffer is empty"
Qu'est-ce qui décide du status NotModified! ou New! ?
Merci pour vos réponses qui éclairent nos lanternes !

Hors ligne

 

#12 29-09-2008 14:13:47

FMolinas  
Membre Geek
Lieu: Lyon
Date d'inscription: 12-06-2007
Messages: 87
Pépites: 97
Banque: 6,435,474,948,567

Re: [RESOLU] Changement de transaction sur updatable datawindow

Une ligne NotModified! est une ligne qui, à l'origine, a été lue depuis la base de données. Une ligne New! a été ajoutée (InsertRow()) depuis PB et n'existe pas dans la base.
Après modification de la ligne dans ta DataWindow, le statut passe respectivement à DataModified! et NewModified!
Ainsi, quand plus tard tu commandes un Update(), PB saura immédiatement s'il faut générer en interne respectivement un ordre SQL UPDATE ou INSERT, sans devoir tester la pré-existence de la ligne dans la base.

Hors ligne

 

#13 29-09-2008 14:30:40

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,775,808
Site web

Re: [RESOLU] Changement de transaction sur updatable datawindow

Petit tableau de synthèse des statuts pour ceux qui en auront besoin :

Liste des statuts possibles :
New! => Lorsque la ligne est issue d'un InsertRow()
NotModified! => lorsque la ligne est issue d'un retrieve()
NewModified! => lorsqu'il y a modification d'une valeur sur une ligne de la DW nouvellement insérée (donc à New !)
DataModified! => lorsqu'il y a modification d'une valeur sur une ligne de la DW lu depuis la base (donc à NotModified!)

Génération des ordres SQL en fonction des statuts :
New! => aucun
NotModified! => aucun
NewModified! => INSERT
DataModified! => UPDATE
En changeant le statut de la ligne on change l'ordre SQL. Donc attention a ne pas générer l'insert d'une ligne déjà existante en base (contrainte d'intégrité sur la clé primaire) ou un update sur une ligne inexistante...

Le resetupdate() réinitialise les statuts comme suit (statut avant modification d'une valeur) :
NewModified! => New!
DataModified! => NotModified!

La fonction update() réinitialise les satuts comme suit (les lignes sont en base et aucune modif n'est encore faite) :
NewModified! => NotModified!
DataModified! => NotModified!

Ce qu'il faut retenir :
Les lignes avec New! et NewModified! n'existe pas en base de données.
Les lignes avec NotModified! et Datamodified! existent en base de données.

La fonction SetItemStatus() permet de changer le statut d'une ligne en respectant le tableau suivant :

Original status   ---> Specified status
—                             New!                         New Modified!            Data Modified!            Not Modified!
New!                         -                              Yes                           Yes                           No
NewModified!             No                            -                               Yes                           New!
DataModified!            NewModified!             Yes                          -                              Yes
NotModified!              Yes                           Yes                          Yes                           -
ASTUCE: pour passer de New! à NotModified! il fait passer par le statut DataModified! : New! -> DataModified! -> NotModified!


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#14 30-09-2008 11:31:10

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,404
Site web

Re: [RESOLU] Changement de transaction sur updatable datawindow

Merci pour ces réponses !

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22