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

Powerbuilder Discussion :

[PowerBuilder] Utilisation TimeStamp


Sujet :

Powerbuilder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 108
    Par défaut [Résolu][PowerBuilder] Utilisation TimeStamp
    Bonjour,

    Sous PowerBuilder 8.0.4 et Sybase ASE 12.5. J'ai une table ayant une colonne de type timeStamp. Je récupère cette colonne dans une datawindow et je dois l'utiliser pour modifier les valeurs de chaque ligne de ma table.

    Comment manipuler ce type de données avec PowerBuilder ?
    - depuis le contrôle datawindow quelle fonction doit-on utiliser pour récupérer cette donnée ( getItem??? )
    - Quel est le type de donnée correspondant en PowerScript ?
    - Comment passer cette valeur dans une procédure stockée ?

    Merci, A+

  2. #2
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Par défaut
    1) utiliser la fonction GetItemDatetime()
    2) il y a un type Timestamp me semble-t-il
    3) ça dépend de ce que ta procéédure stockée attends comme type d'arguments ...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 108
    Par défaut [PowerBuilder] Utilisation TimeStamp
    Bonjour,

    Le type timestamp ne semble pas exister sous PowerBuilder (uniquement dans le dataWindow).
    L'utilisation de la fonction getItemDateTime du controle dataWindow provoque une erreur, seule la fonction getItemString semble fonctionnée, mais il faut alors faire une grosse bidouille :-( au niveau de la procédure stocké pour transformer la chaîne en timestamp...

    Y'a pas plus simple ?

    A+ Thieg

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Par défaut Utilisation TimeStamp -
    Le type TimeStamp n'est pas supporté par PB, mais son équivalent est DateTime. Pour pouvoir accéder un champ DB de type TimeStamp, Il faut définir le format de conversion d'un timestamp en DateTime en utilisant la propriété DBParm de l'objet de transaction utilisé (en générale SQLCA), qui évidemment dépend de la base de donnée utilisée.

    Par exemple, en PowerScript avec JDBC, ODBC, OLE DB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLCA.dbParm = "DateTime = ' \''m/d/yy h:mm am/pm\'' '"
    ou encore Oracle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLCA.dbParm="DateTime = ' ''''m/d/yy h:mm am/pm'''' '"
    Sinon, on peut définir ce format dans le dialog ad-hoc Database Profile, dans l'onglet syntax.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 108
    Par défaut
    Bonjour et merci pour ta réponse.

    Dans mon appli, j'utilise le driver natif ASE (SYC Sybase ASE) et il ne semble pas exister d'équivalent à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLCA.dbParm="DateTime = ' ''''m/d/yy h:mm am/pm'''' '"
    Quelqu'un connaîtrait-il un équivalent ?

    A+ Thig

  6. #6
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Par défaut
    Bonjour,

    Le type "timestamp" de Sybase sert pour les mises à jour de type "optimiste" (non blocage de la ligne pendant la lecture), au moment de mise à jour si la valeur du champ a changé par rapport à celle mémorisée en lecture alors on abandonne la mise à jour.

    Il est en binaire, on l'exploite sous forme de char(18) !

    1- Créez la procédure (systeme de préférence) suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    create procedure sp_CHAR_TO_TIMESTAMP
    	@chaine		char(18),
    	@timestamp	timestamp OUT
    as
    	declare @low	decimal(18,0)
    	declare @high	decimal(18,0)
    begin
    	select @low=convert(decimal, hextoint(substring(@chaine,13,8)))*256
    	select @high=convert(decimal,hextoint(substring(@chaine,5,8))) * hextoint("0x010000000") * hextoint("0x010")
    	select @timestamp = @high + @low
    end
    2- Si vous basez une DW sur une procédure stockée comportant ce champ, il faut changer le type de la colonne en char(18).

    3- On fournit ce champ dans la procédure stockée de mise à jour comme char(18). Dans la proc de màj, on le reconvertit en timestamp comme suit :
    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
    declare @timestamp	timestamp  /* déclarer une var de type timestamp */
    /* @chartimestamp est la variable passée à la proc de màj, char(18) */
    exec sp_CHAR_TO_TIMESTAMP @chartimestamp, @timestamp OUTPUT
    
    UPDATE TableXXX
    Set xxxx
    WHERE xxx = yyy AND
         xxxx = yyyy AND
         tsequal(timestamp, @timestamp)
    
    if @@error != 0
    begin
       rollback tran
       return
    end
    Bon courage

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 108
    Par défaut [résolu]
    Merci, pour cette réponse, elle resoud mon problème.

    A+ Thig

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

Discussions similaires

  1. Script utilisant timestamp
    Par logizer dans le forum Langage
    Réponses: 0
    Dernier message: 06/06/2011, 07h44
  2. Delphi7 Interbase6.5 Utilisation TIMESTAMP
    Par PREUX dans le forum Bases de données
    Réponses: 6
    Dernier message: 04/12/2009, 22h29
  3. [C# - SQL] Utiliser Timestamp
    Par thecyril dans le forum C#
    Réponses: 1
    Dernier message: 04/09/2008, 19h46
  4. [SSIS][2k5] Utiliser Timestamp dans SSIS
    Par ygrim dans le forum SSIS
    Réponses: 2
    Dernier message: 01/04/2008, 16h15
  5. [ASE]Utiliser timestamp dans une clause WHERE
    Par JeffK dans le forum Adaptive Server Enterprise
    Réponses: 14
    Dernier message: 03/12/2007, 13h34

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