Accueil > FAQ > WinDev Codes HF | FAQ |
Voici les informations en lien avec cette catégorie.
Catégorie | Q&R | Dernières Q&R publiées |
WinDev Codes HF
Q/R relatives aux ordres HyperFile du wLangage. |
7 | Comment affecter, modifier et supprimer le contenu d'un champ mémo bimair... |
Demandé et répondu par R&B le 12-Jul-2005 17:29 (5268 Lectures)
Comment affecter, modifier et supprimer le contenu d'un champ mémo bimaire ?
Les fichiers attachés aux mémos binaires sont une surcouche de la gestion des rubrique. Ainsi, les fonction EcranVersFichier() et FichierVersEcran() sont à compléter avec respectivement par HAttacheMemo() et hExtraitMemo().
La suppression du contenu d'un mémo binaire est assurée par l'attachement d'une chaine vide (à la place du chemin de fichier).
La suppression du contenu d'un mémo binaire est assurée par l'attachement d'une chaine vide (à la place du chemin de fichier).
Demandé et répondu par R&B le 27-Sep-2004 12:14 (2130 Lectures)
Cacher et récupérer des enregistrements.
Il peut s'avérer utile de 'cacher' des enregistrements pour effecteur un traitement et les récupérer ensuite.
- Remplir un tableau (dynamique) avec les n° des enregistrement à cacher.
- Utiliser hRaye() pour les enlever des parcours du traitement.
- Lancer le traitement, les enregistrement rayés ne sont plus lisible
- Récupérer les enregistrements par lecture et modification.
Hop : les enregistrements sont à nouveau là : magique !
NB :
- il faut veiller à ne pas quitter le traitement avant récupération des enregistrement ou bien alors se prémunir d'un mécanisme de sauvegarde/ restauration du fichier.
- Il faut aussi veiller à se prémunir d'un réindexation avec compactage du fichier pendant la durée du traitement sous peine de perdre les informations.
A utiliser de préférence avec des fichier temporaires donc.
- Remplir un tableau (dynamique) avec les n° des enregistrement à cacher.
ndim est un entier
tEnr est un tableau de 0 entiers sur 8 octets
ndim=Dimension(tEnr,Dimension(rEnr)+1)
tEnr[ndim]=HNumEnr(FICHIER)
- Utiliser hRaye() pour les enlever des parcours du traitement.
POUR i= 1 A ndim
HRaye(FICHIER,tEnr[i],hIgnoreIntégrité)
FIN
- Lancer le traitement, les enregistrement rayés ne sont plus lisible
- Récupérer les enregistrements par lecture et modification.
POUR i= 1 A ndim
HLit(FICHIER,tEnr[i])
HModifie(FICHIER,tEnr[i],hIgnoreIntégrité)
FIN
Hop : les enregistrements sont à nouveau là : magique !
NB :
- il faut veiller à ne pas quitter le traitement avant récupération des enregistrement ou bien alors se prémunir d'un mécanisme de sauvegarde/ restauration du fichier.
- Il faut aussi veiller à se prémunir d'un réindexation avec compactage du fichier pendant la durée du traitement sous peine de perdre les informations.
A utiliser de préférence avec des fichier temporaires donc.
Demandé et répondu par R&B le 27-Sep-2004 12:14 (3417 Lectures)
Afficher les composantes des clés composées
Les clés composées sont désormais disponibles sous forme de chaines via HconstruitValClé() qui simplifie grandement la gestion des clés composées.
Reste que les valeurs sont complétées par hValMin (ou hValMax).
hValMin est le caractère 0 de la table ascii, lequel correspond aussi en C/C++ (language dans lequel est créé WinDev) au caractère de fin de chaine.
Ainsi le code suivant
...ne retourne que la valeur de le première partie de la clé. info interprète le premier cacactère hValMin comme la fin de la chaine.
Pour résoudre ce problème, il faut simplement remplacer les caractère hValMin par des caractères affichables (un expace par exemple), ce qui donne :
Reste que les valeurs sont complétées par hValMin (ou hValMax).
hValMin est le caractère 0 de la table ascii, lequel correspond aussi en C/C++ (language dans lequel est créé WinDev) au caractère de fin de chaine.
Ainsi le code suivant
cCle est une chaine = HConstruiValCle(Fichier,Cle,val1,val2...)
info(cVal)
...ne retourne que la valeur de le première partie de la clé. info interprète le premier cacactère hValMin comme la fin de la chaine.
Pour résoudre ce problème, il faut simplement remplacer les caractère hValMin par des caractères affichables (un expace par exemple), ce qui donne :
cCle est une chaine = HConstruiValCle(Fichier,Cle,val1,val2...)
info(remplace(cVal,hvalmin,' ')
Demandé et répondu par R&B le 27-Sep-2004 12:14 (6075 Lectures)
SQL INSERT : connaître le dernier ID auto. (HF et MySQL)
FAQ aimablement soumise par KPiTN :
Récupérer le dernier identifiant inséré
BDD Hyperfile :
BDD Mysql :
Récupérer le dernier identifiant inséré
BDD Hyperfile :
ReqNav est une source de donnée
HExécuteRequêteSQL(ReqNav,'Insert Into Navires (LibNavire) Values (' + TxtNavire + ')')
DernierIdentifiant=ReqNav.idnavire
BDD Mysql :
ReqNav est une source de donnée
HExécuteRequêteSQL(ReqNav,'ConnectSQL',hRequêteSansCorrection,'insert into navires (libnavire) values ('' + TxtNavire+ '')')
HExécuteRequêteSQL(ReqNav,'ConnectSQL',hRequêteSansCorrection,Minuscule('SELECT LAST_INSERT_ID() as idnavire'))
HLitPremier(ReqNav)
DernierIdentifiant=ReqNav.idnavire
Demandé et répondu par Thernius le 27-Sep-2004 12:14 (3070 Lectures)
Pourquoi une concaténation dans une requête SQL ne fonctionne pas?
Voici le morceau de code qui ne fonctionne pas :
La solution est donnée par DrCharly, la voici :
Dans le code de la requête, il suffit de ne pas mettre de guillemets ("), mais tout simplement les remplacer par des quotes simples (').
...RIGHT(OPERATION.DATE,2)+"/"+MID(OPERATION.DATE,5,2)+"/"+MID(OPERATION.DATE,3,2) AS DATEAFF...
La solution est donnée par DrCharly, la voici :
...RIGHT(OPERATION.DATE,2)+'/'+MID(OPERATION.DATE,5,2)+'/'+MID(OPERATION.DATE,3,2) AS DATEAFF...
Dans le code de la requête, il suffit de ne pas mettre de guillemets ("), mais tout simplement les remplacer par des quotes simples (').
Demandé et répondu par Thernius le 27-Sep-2004 12:14 (4614 Lectures)
Comment supprimer rapidement un fichier HF par programmation ?
A l'heure actuelle, il n'existe pas de commande permettant de supprimer directement le contenu entier d'un fichier HF. Alors comment faire pour supprimer tout le contenu d'un tel ficher, surtout lorsque celui ci contient des milliers et à fortiori des millions d'enregistrements.
Un parcours un par un des enregistrement couplé à la fonction HSupprime est à proscrire pour des problèmes évidents de temps d'exécution.
Une méthode bien plus rapide et propre consiste à utiliser le code suivant :
Ce code marchera très bien pour une application monoposte, il est conseillé par contre de prendre des précautions dans le cas d'une application réseau. Il serait bon au préalable de vérifier la présence d'utilisateur connecté et éventuellement de prévoir un code leur demandant de quitter l'application (avec un timer à 60 secondes par exemple qui exécute automatiquement l'action au bout du délai).
Un parcours un par un des enregistrement couplé à la fonction HSupprime est à proscrire pour des problèmes évidents de temps d'exécution.
Une méthode bien plus rapide et propre consiste à utiliser le code suivant :
HFerme(<fichier>)
FSupprime(<fichier>.fic)
FSupprime(<fichier>.ndx)
HCreationSiInexistant(<fichier>)
Ce code marchera très bien pour une application monoposte, il est conseillé par contre de prendre des précautions dans le cas d'une application réseau. Il serait bon au préalable de vérifier la présence d'utilisateur connecté et éventuellement de prévoir un code leur demandant de quitter l'application (avec un timer à 60 secondes par exemple qui exécute automatiquement l'action au bout du délai).
Demandé et répondu par R&B le 27-Sep-2004 12:14 (5585 Lectures)
Transferer le contenu d'un fichier HyperFile (F1) vers un autre (F2)
Mieux que le hcopieEnreg, voici une solution pour transférer rapidement le contenu d'un fichier HyperFile (F1) dans un autre (F2) de même structure, hors contrôles HyperFile évidemment.
cR = hlisterubrique(F1)
eF = fOuvre(cF, foCréation+foLectureEcriture)
HLitPremier(F1,C1)TANTQUE PAS HEnDehors(F1)
fEcritLigne(efic,HRécupèreEnregistrement(F1)) HLitSuivant(F1,C1)
FIN
fFerme(eF)
HImporteTexte(F2,cF,cR,TAB + Caract(127) + """" + Caract(127) + RC,hImpSansDélimiteur)
fSupprime(cF)
cR = hlisterubrique(F1)
eF = fOuvre(cF, foCréation+foLectureEcriture)
HLitPremier(F1,C1)TANTQUE PAS HEnDehors(F1)
fEcritLigne(efic,HRécupèreEnregistrement(F1)) HLitSuivant(F1,C1)
FIN
fFerme(eF)
HImporteTexte(F2,cF,cR,TAB + Caract(127) + """" + Caract(127) + RC,hImpSansDélimiteur)
fSupprime(cF)