S'assurer que 2 mots ne sont pas réservés sous VB6
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 2014
-
5 avril 2007 à 09:17
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 2014
-
6 avril 2007 à 08:56
Bonjour,
Question étrange, mais je ne possède pas VB6 et ne peux vérifier.
Je suis en train de concocter un petit code astucieux destiné à éviter d'utiliser un DTPicker pour la saisie des dates et heures sous différents formats.
Ce petit code sera ensuite déposé.
Mon problème ?
Je me suis déjà fait avoir une fois avec un mot (split) non réserevé sous VB5 (où il n'existe pas) mais réservé sous VB6 ....!
Question donc :
Est-ce que le mot FormatDate est un mot réservé sous VB6 ?
Kif kif avec le mot FormatHeure ?
Sous VB5, ces 2 mots ne posent pas problème, mais je n'en sais rien en ce qui concerne VB6.
A voir également:
S'assurer que 2 mots ne sont pas réservés sous VB6
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 5 avril 2007 à 09:38
Salut [auteurdetail.aspx?ID=615490 jmfmarques],
Ces deux mots ne sont pas réservé en VB6
En revanche il existe ceci:
FormatDateTime(Expression, [NamedFormat as VbDateTimeFormat = vbGeneralDate])As String
Si ce n'est pas indiscret que cherches tu a faire car peu être qu'en VB6 il est plus simple de le faire.
@+: Ju£i?n Pensez: Réponse acceptée
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 5 avril 2007 à 09:52
Bonjour Julien,
Contrôler, sans ocx (l'arrivée de Vista en est une raison de plus) la saisie de dates et celle d'heures.
Avec :
Contrôle à la saisie tout au long de la saisie
Ajout automatique des séparateurs
Formatage prédéfini simplement pour faire face aux différentes façons de présenter une date (JJ/MM/AAAA, MM/JJ/AAAA ou AAAA/MM/JJ)
Choix du séparateur pour les dates (/ - ou espace)
- une seule ligne de code à envoyer depuis l'appli (dans le code de le textbox) :
exemple : saisie_date Text1 (ou saisie_date est une sous routine)
et une constante de format à choisir :
exemple
Const mon_format_date = "JJ/MM/AAAA"
Le tout permettant les effacements arrières, les interventions "au milieu", etc ...
Une vingtaine de lignes de code pour la sous-routine de saisie des dates
Une quinzaine de lignes pour celle de saisie des heures
Mon travail est déjà passablement avancé et il est assez drôle...
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 5 avril 2007 à 10:01
Salut,
Je ne sais pas si tu connais (ou bien encore si cela te sera utile)
Mais il existe les fonctions bien utiles qui s'appellent TimeSerial et DateSerial
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 5 avril 2007 à 11:31
Oui, Julien,
Je les connais bien sur (sous VB5 aussi).
Tu as simplement mal compris ce que je fais : un contrôle de saisie tout au long de la saisie elle-même, adapté aux habitudes de saisie de chacun.
Exemple en JJ/MM/AAAA
si l'utilisateur frappe 31 (le /) est ajouté... il frappe 0 çà passe... il frappe ensuite 4... ne passe pas ...
en MM/JJ/AAAA
si l'utilisateur frappe 04 (le /) est ajouté... il frappe 3 çà passe... il frappe ensuite 1... ne passe pas ...
etc... etc...
Et la chose est réalisable dans tous les cas de figure (y compris si on en paramètres locaux JJ/MM/AAA et qu'il est décidé de saisir quand-même, par exemple, en AAAA/MM/JJ ou MM/JJ/AAAA et vice-versa....).
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 5 avril 2007 à 11:56
Salut JMF,
Si j'étais toi j'opterais pour des termes français. Il n'y aura donc pas de risque. Il s'agit, par contre, de maîtriser assez l'anglais pour savoir si oui ou non le mot est identique dans les 2 langues...
Dans le cas de FormatHeure, pas de problème.
Dans le cas de FormatDate, même si ce mot n'est pas encore réservé, il pourrait éventuellement le devenir...
L'insertion d'un caractère souligné pourrait aussi apporter une certaine protection, je pense. Je ne me rappelle pas de mots réservés incluant ce caractère (?)
' les deux formats ci-dessus peuvent, à votre guise, être transgormés en JJ-MM-AAAA, JJ MM AAAA,
' MM/JJ/AAAA, MM-JJ-AAAA, MM JJ AAAA, AAAA/MM/JJ, AAAA-MM-JJ ou AAAA MM JJ (pour les dates)
' et EN "HH:MM" pour les heures (si vous ne voulez pas des secondes
'
Private Sub Text1_Change()
saisie_date Text1
End Sub
Private Sub Text2_Change()
saisie_heure Text2
End Sub
Private Sub saisie_date(quoi As TextBox)
Static deja As String
Dim sais As String, ou As Integer, ou1 As Integer
Dim rf As String, rf1 As String, sp As String, erreur As Boolean
sais = quoi.Text
If Len(sais) < Len(deja) Then deja = sais: Exit Sub
sp = Mid(mon_format_date, 3, 1)
rf = "01" & sp & "10" & sp & "2000"
rf1 = "01" & sp & "03" & sp & "2000"
ou = 4
Select Case UCase(Left(mon_format_date, 1)) Case Is "M": ou 1
Case Is = "A"
sp = Mid(mon_format_date, 5, 1)
rf = "2000" & sp & "10" & sp & "10"
rf1 = "2000" & sp & "03" & sp & "10"
ou = 6
End Select
ou1 = InStr(rf, "/") - 1 If Right(sais, 1) "0" Then rf rf1 If Len(sais) ou And Val(Mid(sais, ou)) > 1 Then erreur True
If Not IsDate(sais & Mid(rf, Len(sais) + 1)) Or Val(Mid(sais, ou, 2)) > 12 Then
erreur = True
End If
If erreur Then quoi.Text deja: quoi.SelStart Len(deja): Beep: Exit Sub
Else If Len(sais) ou1 Or Len(sais) ou1 + 3 Then quoi.Text = sais & sp deja quoi.Text: quoi.SelStart Len(deja)
End If
erreur = False
End Sub
Private Sub saisie_heure(quoi As TextBox)
Static titi As String
Dim toto As String, ref As String
ref = "00:00:00"
toto = quoi.Text
If Len(toto) < Len(titi) Then titi = toto: Exit Sub
If Not IsDate(toto & Mid(ref, Len(toto) + 1)) Then quoi.Text titi: quoi.SelStart Len(titi): Beep: Exit Sub
Else If Len(toto) 2 Or Len(toto) 5 Then
If Len(toto) < Len(mon_format_heure) Then quoi.Text = toto & ":"
End If
titi = quoi.Text
quoi.SelStart = Len(titi)
End If
End Sub
L'aspect amusant est dans le choix des dates (pas au hasard du tout et à ne pas toucher)
Si tu veux t'y pencher de ton côté et as des idées pour faire avancer la dernière étape : Bienvenue ...bien évidemment
Quand ce sera fini, je mettrai celà dans un module.
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 5 avril 2007 à 17:13
Salut tout le monde,
Tu te rappelles, Marques, des appels imbiqués et successifis...?
sous reserve , à mon avis il ne faudra pas mettre ça dans Text_Change ()
If erreur Then quoi.Text <gras>deja : quoi.SelStart</gras> Len(deja): Beep: Exit Sub
'relance quoi_Change () et quoi.SelStart n' est pas encore éxécuté
Else If Len(sais) ou1 Or Len(sais) ou1 + 3 Then quoi.Text = sais & sp deja quoi.Text: quoi.SelStart Len(deja)
'même chose
End If
je te laisses tester pour en être sûr,
pour l' instant je vais au bain maure ..
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 5 avril 2007 à 17:55
Salut chaibat05
J'y ai pensé, bien évidemment, et ai donc installé une feinte pour éviter le chien que se mord la queue...
Jusqu'à présent : pas de boucle sans fin dans mes essais.
Je viens d'entamer la partie correction "à l'intérieur" (que ce soit à l'aide de suppr ou de l'effacement arrière). Il semble que je vais y parvenir également (pour un seul caractère à la fois si correction "à l'intérieur). J'en suis déjà à chercher comment faire avec le séparateur lorsque l'on corrige à l'intérieur. Aucun problème, bien évidemment, si on corrige depuis la fin...
Je continue.
Il est vraisemblable que j'aurais ensuite besoin de "gratteurs" pour recenser les bugs éventuels (tâche indispensable et qui donne le tournis)
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 5 avril 2007 à 18:18
Re-salut !
Gagné en ce qui concerne les corrections internes (ouf)...
Il me reste à gérer maintenant le non effacement des séparateurs, mais j'ai déjà mon idée pour y parvenir sans faire une usine à gaz.
Je ferai celà un peu plus tard car j'ai maintenant vraiment le tournis, dans cette affaire.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 5 avril 2007 à 19:05
Bon...
La vue de la mer m'a apparemment remis les idées en place et les yeux en face des trous.
On dirait fort que tous les buts sont maintenant atteints.
Je re-regarderai celà après dîner puis réorganiserai le tout dans un module.
J'aurai alors vraiment besoin de "gratteurs" dévoués, dont la tâche serait de tenter de mettre par tous les moyens possibles l'outil en défaut.
Je sais que ce n'est pas une tâche plaisante...
Des volontaires ?
JoePatent
Messages postés171Date d'inscriptionjeudi 30 janvier 2003StatutMembreDernière intervention20 juillet 2008 5 avril 2007 à 20:45
J'ai déja fait en plus simple ce type de coding.
Le format de date est en long integer. Peut importe le format d'affichage voulu, tu conserves la date entière en long sous la forme AAAAMMJJ. Exemple 20070404 pour le 4 avril 2007.
Au fur et a mesure que quelques chose est tapé dans le textbox, tu re-format le tout selon ton mask pré-défini. Je me sert de l'interruption KeyPress. Tu contrôle donc les caractère autorisé ou non et réaffiche le tout a ta guise après traitement dans le textbox.
Pour obtenir l'année, tu fais : d \ 10000 ( \ = division sans reste )
Pour obtenir le mois, tu fais : (d Mod 10000) \ 100
Pour obtenir le jour, tu fais : d Mod 100
Très simple et très rapide. Le besoin était d'avoir de quoi de portable qui ne soit lié d'aucune façon au préférence utilisateur des options régionales de windows.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 5 avril 2007 à 21:17
Allez donc, JoePatent :
Mets ton code ici, que l'on en juge en parfaote connaissance de cause ...
J'en suis, en quelques années, à la 4ème mouture d'un code de cde type ... mais, ma foi, le tien nous intéresse... on l'attend donc.
J'espère qu'il gère tout, y compris les corrections "à l'intérieur" et tout et tout... car mes essais faits avec des dates juliennes n'ont jamais été probants ...
Je suis maintenant impatient de voir ton code .
.
JoePatent
Messages postés171Date d'inscriptionjeudi 30 janvier 2003StatutMembreDernière intervention20 juillet 2008 5 avril 2007 à 21:50
En temps normal j'en aurais copié-collé une partie mais vue ton arrogance, je préfère te laisser dans ta bouette.
Il faut avoir un minimum d'ouverture d'esprit quand on demande de l'aide sur un forum. Être capable d'accepter des pistes de solution autres qui puisse transformer des années d'efforts déjà investit en de quoi de totalement différent mais qui présente des avantages auxquelles nous n'avons jamais songé.
La corpation qui m'emploie l'utilise sous forme de DLL (que j'ai développé en C) et sous forme de classe (développé en vb6).
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 5 avril 2007 à 22:11
oulà ! vas y molo ... Dalton !
il n' y' a rien d' arrogant à la demande de marques ...
Au contraire , il a fait preuve de disponibilité à écouter les autres.
C' est vrai que tu n' est pas un champion de la communication
En 4 ans tu n' enregistres que 50 msg.
Peut être que tu n' as pas besoin d' aide.
Mais en même temps , tu n' en donnes pas beaucoup.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 5 avril 2007 à 22:14
Je pense que tu ne sais pas à qui tu t'adresse mon cher Joe.
Si Jacques se montre aussi "arrogant" comme tu dis, c'est parce qu'il en connais plus d'un rayon sur le problème et qu'il voit bien avant même que tu ne poste ton code quels problèmes ou bugs il va pouvoir y rencontrer.
Et si tu regarde un peu ses contributions sur le forum, tu constanteras que c'est extremement rare qu'il ne fasse par d'un roblème qu'il n'arrive pas à résoudre.
Je pense qu'il pourrait nous apprendre à beaucoup d'entre nous quantité de choses mais si on se condidère comme maitrisant largement VB
Quant à toi, tu nous dis que tu as fait un code indentique, tu nous laisse supposé qu'il est bien plus simple, bien plus rapide, bref bien mieux.
Tout à fait possible mais montre nous le, qu'on juge sur piece et le cas échéant que l'on puisse nous aussi progresser avec l'aide de ton expertise.
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
JoePatent
Messages postés171Date d'inscriptionjeudi 30 janvier 2003StatutMembreDernière intervention20 juillet 2008 5 avril 2007 à 22:30
Je pense que tu ne sais pas à qui tu t'adresse mon cher Joe.
Tu as semé un instant le doute dans mon esprit. Alors j'ai fait mes recherches sur ses sources et sur ses nombreux commentaire "pertinants" sur le forum.
Quantité n'est pas gage de qualité c'est très clair. Faire cette même recherche te fera comprendr emon point de vue.
Et j'ai y revues des échanges de commentaires que me porte a comprendre son attitude et me réconforte dans la mienne.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 6 avril 2007 à 08:56
Bonjour Joe,
Un seul mot, puisque tu parles de pertinence.
La première des pertinences est d'intervenir dans une discussion en restant dans son cadre et d'éviter de parler de navets quand le sujet traite de poireaux.
Il ne s'agit ici pas du tout de la forme sous laquelle on enregistre une date (les méthodes sont diverses pour y parvenir) afin de pouvoir l'exploiter valablement quels que soient les options retenues sur la machine d'accueil....
Il s'agit tout simplement d'une aide à la SAISIE (quelle que soit la forme de la saisie et celle de l'affichage) pour assurer, tout au long de la saisie à la fois le confort et le contrôle de cette saisie.
Je ne vois pas du tout ce que viendrait faire dans cette affaire l'emploi de dates juliennes, à un moment (la saisie) où, je crois devoir te le rappeler, la date n'existe pas encore (quelle que soit la forme sous laquelle on envisage de la stocker ensuite, ... si même on envisage de la stocker).
A moins que tu ne viennes nous exposer que ta méthode pour faciliter et contrôler cette saisie ne se résume à forcer la saisie sous la forme YYYYMMDD !......et bravo pour le confort de l'utilkisateur, tant au niveau de l'écriture qu'à celui de la lisibilité.
J'espère maintenant pour toi que tu connais tous les petits travers de VB, y compris pour ce qui est de la forme du stockage.
Sais-tu, par exemple, qu'à moins de savoir où se trouvent le mois et le jour (donc en fonction de choix) dans ##/##/####, la transformation en YYYYMMDD risque de donner( lieu à quelques jolies erreurs).
Sais-tu, par exemple, que VB reconnaitra pour valable , sur un PC paramétré pourtant en dd/mm/yyyy, la date "01/31/2001" ?
Je te propose donc, JoePatent, de lancer ce tout petit bout de code :
Private Sub Command1_Click()
MsgBox "pour VB (et sur la même machine), la saisie de 12/13/2001 correspond " & _
"à la date " & DateValue("12/13/2001") & vbCrLf & _
"alors que la saisie de la date 13/12/2001 correspond elle aussi à " & _
DateValue("13/12/2001") & vbCrLf & "Monsieur VB a malheureusement la très facheuse " & _
"habitude de vouloir chercher la cohérence et corriger. Imagine maintenant qu'un utilisateur " & _
"étourdi voulant frapper 12/12/2001 sur une machine française ""localisée"" en France,frappe " & _
"par inadvertance, la date inexistante du 12/13/2001 sans aucun contrôle de sa saisie par " & _
"rapport à sa ""localisation"" ou en se contentant de controler ""in fine"" avec If Isdate " & _
"(qui constatera que c'est bien une date) et, sans broncher, ton appli enregistrera " & _
"erronément la date du 13 décembre 2001 ne correspondant pas à la date que l'on " & _
"voulait enregistrer (et ceci : quelle que soit la forme adoptée pour le stockage " & _
"interne de la date"
End Sub
Qui te fera comprendre l'intérêt qu'il y a à réellement contrôler la cohérence de la saisie avec le format
choisi pour la saisie et pour l'affichageet à ne pas se contenter de contrôler la saisie par un If Isdate(....).
Et ceci n'a absolument rien à voir avec le format d'enregistrement ....