|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
XL8TABLE() : IMPORTE UNE FEUILLE D'UN CLASSEUR EXCEL 97 DANS UNE TABLE VISUAL FOXPRO
Information sur la source
Description
* Les noms des champs sont lus dans la première ligne de la feuille * Les colonnes sont importées en caractères * Les colonnes masquées ne sont pas importées * Les colonnes servant à une concaténation sont tronquées Retourne l'adresse de la table créée ou erreur en clair
Source
- ******************************************************************************************
- PROCEDURE XL8Table && Importe une feuille d'un Classeur Excel 97 dans une table
- * Les noms des champs sont lus dans la première ligne de la feuille
- * Les colonnes sont importées en caractères
- * Les colonnes masquées ne sont pas importées
- * Les colonnes servant à une concaténation sont tronquées
- LPARAMETERS ;
- tcXLWBAddr, ; && Adresse du MASQUE de classeur Excel contenant la feuille à importer
- tcSheet, ; && [feuille n°1] Nom de la feuille à importer
- tlNonVerifDernVers,; && [.F.] Ne pas prendre la dernière version du classeur Excel
- ; && si @, indique en retour si la table a été rafraîchie
- tlImportForce && [.F.] Importer même si le classeur est plus ancien que la table
-
- LOCAL lcResult && Adresse de la table créée ou message d'erreur
- m.lcResult = Space(0)
-
- IF Vartype(m.tcXLWBAddr) = 'C'
-
- * Régler les valeurs par défaut des paramètres
- LOCAL lcSheet, llNonVerifDernVers
- m.llNonVerifDernVers = Iif(Vartype(m.tlNonVerifDernVers) = 'L', m.tlNonVerifDernVers, .F.)
- m.lcSheet = Iif (Vartype(m.tcSheet)='C', Upper(m.tcSheet), Space(0))
- m.llImportForce = Iif(Vartype(m.tlImportForce)=='L', m.tlImportForce, .F.)
-
- * Si un classeur existe selon le masque spécifié
- LOCAL lcXLWBAddr
- m.lcXLWBAddr = IIF (m.llNonVerifDernVers, m.tcXLWBAddr, cFileFreshest(m.tcXLWBAddr))
- IF File(m.lcXLWBAddr)
-
-
- * Déterminer l'adresse de la table destination
- LOCAL lcXLWBPath, lcDBFStem, lcDBFAddr
- m.lcXLWBPath = Addbs(JustPath(m.lcXLWBAddr))
- m.lcDBFStem = Iif (Empty(m.lcSheet), JustStem(m.tcXLWBAddr), m.lcSheet)
- m.lcDBFAddr = m.lcXLWBPath + ForceExt(m.lcDBFStem, EXT_DBF)
-
- * Si import systématique ou classeur plus récent que la table
- LOCAL llImport
- m.llImport = m.llImportForce .OR. Nvl(lFileFresher (m.lcDBFAddr, m.lcXLWBAddr), .T.)
- m.lcResult = m.lcDBFAddr
- IF m.llImport
-
- * Si le classeur n'est pas couramment ouvert
- LOCAL lnHandle
- m.lnHandle = Fopen(m.lcXLWBAddr, 1)
- m.llImport = m.lnHandle > 0 ;
- OR (Set('ASSERT') == 'ON' AND 6 = ;
- MessageBox("L'importation de données depuis le classeur " + m.lcXLWBAddr + " est impossible car il est ouvert par Excel" + CRLF + ;
- "Pour continuer l'importation, veuillez fermer le classeur et cliquer sur 'oui'" + CRLF + ;
- "Pour abandonner l'importation, cliquez sur 'non'" + CRLF + ;
- "Continuer ?", 4+16))
- Fclose(m.lnHandle)
- IF m.llImport
-
- * Si la feuille peut être importée
- LOCAL lcDefault, lnSelect, llSheet
- m.lcDefault = Set('Default') + CurDir () && Unité de disque + Dossier
- m.lnSelect = Select(0)
- m.llSheet = .T.
- SET DEFAULT TO (m.lcXLWBPath) && Obligé de changer le default car l'import doit placer la nouvelle table dedans
- SELECT 0 && Première zone libre où se placera la table créée
- IF Empty(m.lcSheet)
- IMPORT FROM (m.lcXLWBAddr) TYPE XL8
- ELSE
- LOCAL lcError
- m.lcError = On('Error')
- ON ERROR m.llSheet = .F.
- IMPORT FROM (m.lcXLWBAddr) TYPE XL8 Sheet (m.lcSheet)
- ON ERROR &lcError
- ENDIF
- SET DEFAULT TO (m.lcDefault)
- IF m.llSheet
-
- LOCAL lcAlias
- m.lcAlias = Alias()
-
- * Renommer les champs par le contenu de la premiere ligne du tableau
- IF XL8Table_ModiStru (m.lcAlias)
-
- * Renommer la table selon le nom de la feuille ou du classeur spécifiés
- LOCAL lcDBFImportAddr
- m.lcDBFImportAddr = cTableAddress(m.lcAlias)
- USE IN (m.lcAlias)
- IF Upper (m.lcDBFImportAddr) # Upper (m.lcDBFAddr)
- * Effacer la précédente le cas échéant
- IF File (m.lcDBFAddr)
- DELETE FILE (m.lcDBFAddr)
- ENDIF
- RENAME (m.lcDBFImportAddr) to (m.lcDBFAddr)
- ENDIF
- ELSE
- m.lcResult = "XL8Table() : Impossible de nommer les champs selon le contenu de la première ligne de la feuille " + m.lcSheet + " du classeur " + m.lcXLWBAddr
- ENDIF
- ELSE
- m.lcResult = "XL8Table() : Importation impossible car la feuille " + m.lcSheet + " n'existe pas dans le classeur " + m.lcXLWBAddr
- ENDIF
- SELECT (m.lnSelect)
- ELSE
- m.lcResult = "XL8Table() : Importation impossible car le classeur " + m.lcXLWBAddr + " était ouvert."
- ENDIF
- ENDIF
- m.tlNonVerifDernVers = m.llImport && indique si la feuille a été importée
- ELSE
- m.lcResult = "XL8Table() : Importation impossible car aucun classeur n'existe selon le masque spécifié :" + Alltrim(tcXLWBAddr)
- ENDIF
- ELSE
- m.lcResult = "XL8Table() : Veuillez spécifier un masque de classeur XL en première paramètre"
- ENDIF
- ASSERT File(m.lcResult) MESSAGE m.lcResult
-
- RETURN m.lcResult
-
- ******************************************************************************************
- Procedure XL8Table_ModiStru && Renomme les champs selon la première ligne de la feuille XL
- LPARAMETERS tcAlias && Alias de la table importée d'Excel
-
- LOCAL llResult
-
- LOCAL tcAlias
- IF Used(m.tcAlias) ;
- AND IsExclusive(m.tcAlias)
-
- LOCAL lnSelect
- m.lnSelect = Select(0)
- SELECT (m.tcAlias)
-
- * Lire la structure de la table
- LOCAL lnChps
- LOCAL ARRAY laCh[1], laChNouv[1]
- m.lnChps = AFields(m.laCh)
-
- * Lire le premier enregistrement contenant les noms de champs
- GO 1
- SCATTER TO laChNouv
-
- LOCAL ;
- lnChp, ; && ne pas utiliser 'i' qui est un nom de colonne XL
- lcChNouv, ;
- lcChAnc, ;
- lnChpId, ;
- lcChpId
-
- FOR m.lnChp = 1 to m.lnChps
-
- m.lcChAnc = laCh[m.lnChp, 1]
- m.lcChNouv = laChNouv[m.lnChp]
- m.lcChNouv = IIF (Vartype(m.lcChNouv) == 'C', Upper(Alltrim(m.lcChNouv)), space(0))
-
- * Si le nouveau nom est vide, supprimer la colonne
- If Empty(m.lcChNouv)
- Alter table (m.tcAlias) drop column (m.lcChAnc)
-
- * Sinon (nouveau nom non vide)
- ELSE
-
- * Si le champ est numérique, le passer en caractères et supprimer les espaces en tête
- IF m.laCh[m.lnChp, 2] == 'N'
- ALTER TABLE (m.tcAlias) ALTER COLUMN (m.lcChAnc) C (m.laCh[m.lnChp,3] + 1 + m.laCh[m.lnChp,4])
- REPLACE ALL (m.lcChAnc) with Ltrim(Evaluate(m.lcChAnc))
- m.laCh[m.lnChp, 2] = 'C'
- ENDIF
-
- * Normaliser le nom de champ
- m.lcChNouv = cVFPName(m.lcChNouv, 10)
-
- * Si le nom du champ existe déjà, lui donner un suffixe numérique
- m.lnChpId = 0
- DO WHILE Ascan(m.laCh, m.lcChNouv, 1, -1, 1, 2+4) > 0
- m.lnChpId = m.lnChpId + 1
- m.lcChpId = Alltrim(Str(m.lnChpId))
- m.lcChNouv = substr(m.lcChNouv, 1, 10-Len(m.lcChpId)) + m.lcChpId
- ENDDO
-
- * Renommer le champ
- ALTER TABLE (m.tcAlias) RENAME COLUMN (m.lcChAnc) to (m.lcChNouv)
-
- ENDIF
- laCh[m.lnChp, 1] = m.lcChNouv
-
- ENDFOR
-
- * Supprimer le premier enregistrement contenant les noms de champs
- GO 1
- DELETE
- PACK
- DELETE FILE (ForceExt(cTableAddress(m.tcAlias), 'BAK'))
-
- SELECT (m.lnSelect)
- m.llResult = .T.
- ENDIF
-
- RETURN m.llResult
-
- ******************************************************************************************
- FUNCTION lFileFresher && Un fichier est plus récent qu'un autre
- LPARAMETERS ;
- tcFile1Addr, ; && Adresse du fichier de base
- tcFile2Addr && Adresse du fichier à comparer
- LOCAL llResult
- m.llResult = NULL
-
- * Si les deux fichiers existent
- IF Vartype(m.tcFile1Addr)=='C' ;
- AND File (m.tcFile1Addr) ;
- AND Vartype(m.tcFile2Addr)=='C' ;
- AND File (m.tcFile2Addr)
-
- m.llResult = Fdate (m.tcFile2Addr, 1) > Fdate (m.tcFile1Addr, 1)
- ENDIF
-
- RETURN m.llResult
-
-
- ******************************************************************************************
- FUNCTION cVFPName && Nom valide pour VFP, avec longueur limitée si nécessaire
- LPARAMETERS ;
- tcVFPName, ; && Nom VFP à valider
- tnLength && [len(tcVFPName)] Longueur maximale du nom (par ex. 10 pour un nom de champ de table libre)
-
- LOCAL lcResult
- m.lcResult = space(0)
-
- IF Vartype(m.tcVFPName) = 'C' ;
- AND ! Empty(m.tcVFPName)
-
- * Remove accents
- LOCAL lcVFPName
- m.lcVFPName = cEuroANSI(alltrim (m.tcVFPName))
-
- * Start with underscore if first is a digit
- m.lcVFPName = Iif(IsDigit(m.lcVFPName), UNDERSCORE, Space(0)) + m.lcVFPName
-
- * Turn characters neither digit or letter to underscore
- LOCAL lnCar, lcCar
- FOR m.lnCar = 1 TO Len(m.lcVFPName)
- m.lcCar = Substrc(m.lcVFPName, m.lnCar, 1)
- m.lcCar = Iif(isDigit(m.lcCar) or IsAlpha(m.lcCar), ;
- m.lcCar, UNDERSCORE)
- m.lcResult = m.lcResult + Upper(m.lcCar)
- ENDFOR
-
- * Remove duplicate underscores
- m.lcResult = cRepCharDel (m.lcResult, UNDERSCORE)
- m.lcResult = Iif(m.lcResult==UNDERSCORE, Space(0), m.lcResult)
-
- * Trim right is required
- IF Vartype(m.tnLength) = 'N' ;
- AND m.tnLength > 0
- m.lcResult = Leftc(m.lcResult, m.tnLength)
- ENDIF
-
- ENDIF
-
- RETURN m.lcResult
-
- * -----------------------------------------------------------------
- PROCEDURE cVFPName_Test
- ? Sys(16)
- ? cVFPName ('%cartable/poiré') == '_CARTABLE_POIRE'
- ? cVFPName ('2cartable.poiré') == '_2CARTABLE_POIRE'
- ? cVFPName ('2cartable.:poiré') == '_2CARTABLE_POIRE'
- ? cVFPName ('2cartable.:poiré', 9) == Leftc('_2CARTABLE_POIRE', 9)
- ? cVFPName ('150') == '_150'
-
- * -------------------------------------------------------------
- FUNCTION cEuroANSI && Chaine de caractères désaccentuée
- LPARAMETERS tcEuropean && Chaine de caractères accentuée
- local lcResult && Chaine de caractères désaccentuée
- m.lcResult = space(0)
-
- IF Vartype(m.tcEuropean) = 'C' ;
- AND !Empty(m.tcEuropean) ;
- AND !IsNull(m.tcEuropean)
-
- * Restore translation strings
- IF NOT Vartype(m.European) == 'C' ;
- OR NOT Vartype(m.EuroANSI ) == 'C'
- PUBLIC European, EuroANSI
- RESTORE FROM (Home()+'european.mem') ADDITIVE
- ENDIF
-
- * Translate
- m.lcResult = Sys(15, m.EuroANSI, m.tcEuropean)
- * m.lcResult = Chrtran(m.tcEuropean, m.European, m.EuroANSI)
- ENDIF
-
- RETURN m.lcResult
-
- * -----------------------------------------------------------------
- PROCEDURE cEuroANSI_Test
- ? Sys(16)
- RELEASE European, EuroANSI
- ? cEuroANSI (.T.) = space(0)
- ? cEuroANSI (space(0)) = space(0)
- ? cEuroANSI (null) = space(0)
- ? cEuroANSI ('hébété') = 'hebete'
- ? cEuroANSI ('àäâéèêëioòùû') = 'aaaeeeeioouu'
- ? cEuroANSI ('ÀÄÂÉÈÊËIOÒÙÛ') = 'AAAEEEEIOOUU'
******************************************************************************************
PROCEDURE XL8Table && Importe une feuille d'un Classeur Excel 97 dans une table
* Les noms des champs sont lus dans la première ligne de la feuille
* Les colonnes sont importées en caractères
* Les colonnes masquées ne sont pas importées
* Les colonnes servant à une concaténation sont tronquées
LPARAMETERS ;
tcXLWBAddr, ; && Adresse du MASQUE de classeur Excel contenant la feuille à importer
tcSheet, ; && [feuille n°1] Nom de la feuille à importer
tlNonVerifDernVers,; && [.F.] Ne pas prendre la dernière version du classeur Excel
; && si @, indique en retour si la table a été rafraîchie
tlImportForce && [.F.] Importer même si le classeur est plus ancien que la table
LOCAL lcResult && Adresse de la table créée ou message d'erreur
m.lcResult = Space(0)
IF Vartype(m.tcXLWBAddr) = 'C'
* Régler les valeurs par défaut des paramètres
LOCAL lcSheet, llNonVerifDernVers
m.llNonVerifDernVers = Iif(Vartype(m.tlNonVerifDernVers) = 'L', m.tlNonVerifDernVers, .F.)
m.lcSheet = Iif (Vartype(m.tcSheet)='C', Upper(m.tcSheet), Space(0))
m.llImportForce = Iif(Vartype(m.tlImportForce)=='L', m.tlImportForce, .F.)
* Si un classeur existe selon le masque spécifié
LOCAL lcXLWBAddr
m.lcXLWBAddr = IIF (m.llNonVerifDernVers, m.tcXLWBAddr, cFileFreshest(m.tcXLWBAddr))
IF File(m.lcXLWBAddr)
* Déterminer l'adresse de la table destination
LOCAL lcXLWBPath, lcDBFStem, lcDBFAddr
m.lcXLWBPath = Addbs(JustPath(m.lcXLWBAddr))
m.lcDBFStem = Iif (Empty(m.lcSheet), JustStem(m.tcXLWBAddr), m.lcSheet)
m.lcDBFAddr = m.lcXLWBPath + ForceExt(m.lcDBFStem, EXT_DBF)
* Si import systématique ou classeur plus récent que la table
LOCAL llImport
m.llImport = m.llImportForce .OR. Nvl(lFileFresher (m.lcDBFAddr, m.lcXLWBAddr), .T.)
m.lcResult = m.lcDBFAddr
IF m.llImport
* Si le classeur n'est pas couramment ouvert
LOCAL lnHandle
m.lnHandle = Fopen(m.lcXLWBAddr, 1)
m.llImport = m.lnHandle > 0 ;
OR (Set('ASSERT') == 'ON' AND 6 = ;
MessageBox("L'importation de données depuis le classeur " + m.lcXLWBAddr + " est impossible car il est ouvert par Excel" + CRLF + ;
"Pour continuer l'importation, veuillez fermer le classeur et cliquer sur 'oui'" + CRLF + ;
"Pour abandonner l'importation, cliquez sur 'non'" + CRLF + ;
"Continuer ?", 4+16))
Fclose(m.lnHandle)
IF m.llImport
* Si la feuille peut être importée
LOCAL lcDefault, lnSelect, llSheet
m.lcDefault = Set('Default') + CurDir () && Unité de disque + Dossier
m.lnSelect = Select(0)
m.llSheet = .T.
SET DEFAULT TO (m.lcXLWBPath) && Obligé de changer le default car l'import doit placer la nouvelle table dedans
SELECT 0 && Première zone libre où se placera la table créée
IF Empty(m.lcSheet)
IMPORT FROM (m.lcXLWBAddr) TYPE XL8
ELSE
LOCAL lcError
m.lcError = On('Error')
ON ERROR m.llSheet = .F.
IMPORT FROM (m.lcXLWBAddr) TYPE XL8 Sheet (m.lcSheet)
ON ERROR &lcError
ENDIF
SET DEFAULT TO (m.lcDefault)
IF m.llSheet
LOCAL lcAlias
m.lcAlias = Alias()
* Renommer les champs par le contenu de la premiere ligne du tableau
IF XL8Table_ModiStru (m.lcAlias)
* Renommer la table selon le nom de la feuille ou du classeur spécifiés
LOCAL lcDBFImportAddr
m.lcDBFImportAddr = cTableAddress(m.lcAlias)
USE IN (m.lcAlias)
IF Upper (m.lcDBFImportAddr) # Upper (m.lcDBFAddr)
* Effacer la précédente le cas échéant
IF File (m.lcDBFAddr)
DELETE FILE (m.lcDBFAddr)
ENDIF
RENAME (m.lcDBFImportAddr) to (m.lcDBFAddr)
ENDIF
ELSE
m.lcResult = "XL8Table() : Impossible de nommer les champs selon le contenu de la première ligne de la feuille " + m.lcSheet + " du classeur " + m.lcXLWBAddr
ENDIF
ELSE
m.lcResult = "XL8Table() : Importation impossible car la feuille " + m.lcSheet + " n'existe pas dans le classeur " + m.lcXLWBAddr
ENDIF
SELECT (m.lnSelect)
ELSE
m.lcResult = "XL8Table() : Importation impossible car le classeur " + m.lcXLWBAddr + " était ouvert."
ENDIF
ENDIF
m.tlNonVerifDernVers = m.llImport && indique si la feuille a été importée
ELSE
m.lcResult = "XL8Table() : Importation impossible car aucun classeur n'existe selon le masque spécifié :" + Alltrim(tcXLWBAddr)
ENDIF
ELSE
m.lcResult = "XL8Table() : Veuillez spécifier un masque de classeur XL en première paramètre"
ENDIF
ASSERT File(m.lcResult) MESSAGE m.lcResult
RETURN m.lcResult
******************************************************************************************
Procedure XL8Table_ModiStru && Renomme les champs selon la première ligne de la feuille XL
LPARAMETERS tcAlias && Alias de la table importée d'Excel
LOCAL llResult
LOCAL tcAlias
IF Used(m.tcAlias) ;
AND IsExclusive(m.tcAlias)
LOCAL lnSelect
m.lnSelect = Select(0)
SELECT (m.tcAlias)
* Lire la structure de la table
LOCAL lnChps
LOCAL ARRAY laCh[1], laChNouv[1]
m.lnChps = AFields(m.laCh)
* Lire le premier enregistrement contenant les noms de champs
GO 1
SCATTER TO laChNouv
LOCAL ;
lnChp, ; && ne pas utiliser 'i' qui est un nom de colonne XL
lcChNouv, ;
lcChAnc, ;
lnChpId, ;
lcChpId
FOR m.lnChp = 1 to m.lnChps
m.lcChAnc = laCh[m.lnChp, 1]
m.lcChNouv = laChNouv[m.lnChp]
m.lcChNouv = IIF (Vartype(m.lcChNouv) == 'C', Upper(Alltrim(m.lcChNouv)), space(0))
* Si le nouveau nom est vide, supprimer la colonne
If Empty(m.lcChNouv)
Alter table (m.tcAlias) drop column (m.lcChAnc)
* Sinon (nouveau nom non vide)
ELSE
* Si le champ est numérique, le passer en caractères et supprimer les espaces en tête
IF m.laCh[m.lnChp, 2] == 'N'
ALTER TABLE (m.tcAlias) ALTER COLUMN (m.lcChAnc) C (m.laCh[m.lnChp,3] + 1 + m.laCh[m.lnChp,4])
REPLACE ALL (m.lcChAnc) with Ltrim(Evaluate(m.lcChAnc))
m.laCh[m.lnChp, 2] = 'C'
ENDIF
* Normaliser le nom de champ
m.lcChNouv = cVFPName(m.lcChNouv, 10)
* Si le nom du champ existe déjà, lui donner un suffixe numérique
m.lnChpId = 0
DO WHILE Ascan(m.laCh, m.lcChNouv, 1, -1, 1, 2+4) > 0
m.lnChpId = m.lnChpId + 1
m.lcChpId = Alltrim(Str(m.lnChpId))
m.lcChNouv = substr(m.lcChNouv, 1, 10-Len(m.lcChpId)) + m.lcChpId
ENDDO
* Renommer le champ
ALTER TABLE (m.tcAlias) RENAME COLUMN (m.lcChAnc) to (m.lcChNouv)
ENDIF
laCh[m.lnChp, 1] = m.lcChNouv
ENDFOR
* Supprimer le premier enregistrement contenant les noms de champs
GO 1
DELETE
PACK
DELETE FILE (ForceExt(cTableAddress(m.tcAlias), 'BAK'))
SELECT (m.lnSelect)
m.llResult = .T.
ENDIF
RETURN m.llResult
******************************************************************************************
FUNCTION lFileFresher && Un fichier est plus récent qu'un autre
LPARAMETERS ;
tcFile1Addr, ; && Adresse du fichier de base
tcFile2Addr && Adresse du fichier à comparer
LOCAL llResult
m.llResult = NULL
* Si les deux fichiers existent
IF Vartype(m.tcFile1Addr)=='C' ;
AND File (m.tcFile1Addr) ;
AND Vartype(m.tcFile2Addr)=='C' ;
AND File (m.tcFile2Addr)
m.llResult = Fdate (m.tcFile2Addr, 1) > Fdate (m.tcFile1Addr, 1)
ENDIF
RETURN m.llResult
******************************************************************************************
FUNCTION cVFPName && Nom valide pour VFP, avec longueur limitée si nécessaire
LPARAMETERS ;
tcVFPName, ; && Nom VFP à valider
tnLength && [len(tcVFPName)] Longueur maximale du nom (par ex. 10 pour un nom de champ de table libre)
LOCAL lcResult
m.lcResult = space(0)
IF Vartype(m.tcVFPName) = 'C' ;
AND ! Empty(m.tcVFPName)
* Remove accents
LOCAL lcVFPName
m.lcVFPName = cEuroANSI(alltrim (m.tcVFPName))
* Start with underscore if first is a digit
m.lcVFPName = Iif(IsDigit(m.lcVFPName), UNDERSCORE, Space(0)) + m.lcVFPName
* Turn characters neither digit or letter to underscore
LOCAL lnCar, lcCar
FOR m.lnCar = 1 TO Len(m.lcVFPName)
m.lcCar = Substrc(m.lcVFPName, m.lnCar, 1)
m.lcCar = Iif(isDigit(m.lcCar) or IsAlpha(m.lcCar), ;
m.lcCar, UNDERSCORE)
m.lcResult = m.lcResult + Upper(m.lcCar)
ENDFOR
* Remove duplicate underscores
m.lcResult = cRepCharDel (m.lcResult, UNDERSCORE)
m.lcResult = Iif(m.lcResult==UNDERSCORE, Space(0), m.lcResult)
* Trim right is required
IF Vartype(m.tnLength) = 'N' ;
AND m.tnLength > 0
m.lcResult = Leftc(m.lcResult, m.tnLength)
ENDIF
ENDIF
RETURN m.lcResult
* -----------------------------------------------------------------
PROCEDURE cVFPName_Test
? Sys(16)
? cVFPName ('%cartable/poiré') == '_CARTABLE_POIRE'
? cVFPName ('2cartable.poiré') == '_2CARTABLE_POIRE'
? cVFPName ('2cartable.:poiré') == '_2CARTABLE_POIRE'
? cVFPName ('2cartable.:poiré', 9) == Leftc('_2CARTABLE_POIRE', 9)
? cVFPName ('150') == '_150'
* -------------------------------------------------------------
FUNCTION cEuroANSI && Chaine de caractères désaccentuée
LPARAMETERS tcEuropean && Chaine de caractères accentuée
local lcResult && Chaine de caractères désaccentuée
m.lcResult = space(0)
IF Vartype(m.tcEuropean) = 'C' ;
AND !Empty(m.tcEuropean) ;
AND !IsNull(m.tcEuropean)
* Restore translation strings
IF NOT Vartype(m.European) == 'C' ;
OR NOT Vartype(m.EuroANSI ) == 'C'
PUBLIC European, EuroANSI
RESTORE FROM (Home()+'european.mem') ADDITIVE
ENDIF
* Translate
m.lcResult = Sys(15, m.EuroANSI, m.tcEuropean)
* m.lcResult = Chrtran(m.tcEuropean, m.European, m.EuroANSI)
ENDIF
RETURN m.lcResult
* -----------------------------------------------------------------
PROCEDURE cEuroANSI_Test
? Sys(16)
RELEASE European, EuroANSI
? cEuroANSI (.T.) = space(0)
? cEuroANSI (space(0)) = space(0)
? cEuroANSI (null) = space(0)
? cEuroANSI ('hébété') = 'hebete'
? cEuroANSI ('àäâéèêëioòùû') = 'aaaeeeeioouu'
? cEuroANSI ('ÀÄÂÉÈÊËIOÒÙÛ') = 'AAAEEEEIOOUU'
Conclusion
J'ai pu oublier des fonctions appelées ... Si c'est le cas merci de me les signaler.
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
formation d'une feuille excel [ par jee0404 ]
Bonjour, Il faut que je programme un module qui génére une feu
Valeur maximum [ par ducker88 ]
Bonjour, Est 'il possible de trouver la valeur maximale d'une colonne d'une table ?exemole dans une table j'ai la valeur valeur et je voudrais recuper
Accès limité à une table. [ par pledoux ]
Bonjour,Je souhaite faire un accès limité à plusieurs table. Je vous explique :J'ai des programmeurs qui utilisent VisualFoxPro pour travailler sur le
Que dois je faire pour selectionner une tale, la fermer et en selectionner une autre ... [ par logifox ]
Bonjour à tous, Je débute en foxpro et je suis completement bloqué , AUSECOURS :'(.j'ai créé une application qui me permet de remplir une base de donn
Forcer Utilisation d'un index dans une requete en VB [ par paperino ]
Bonjour,J'ai cherché sur le forum comment faire pour forcer l'utilisation d'un index.je m'explique, je vais chercher un numéro de serie (en utilisant
[Urgent] Export excel [ par ducker88 ]
Bonjour tous le monde.J'ai un gros souvis pour l'export excel. J'arrive bien à exporté ma table mais pas le fichier mémo qui y est lié. Pourriez vous
Import données [ par ducker88 ]
Bonjour à tous, Voila j'aimerai ajouter des enregistrement à une table. Les deux tables ont strictement la meme architecture, le prob
foxprow6/mysql import export [ par sokrates ]
salut mes amis,j'ai une base donnée developpée avec foxprow6 (en arabe) que je veux importer/exporter des données de et vers mysql, mais qd j'exporte
Date maximum dans une table [ par ducker88 ]
Bonjour à tous,J'ai une table dont la structure est la suivante :int num_cmd, float montant, date date_depDans cette table j'ai par exemple les valeur
VB6 + copier la structure d'une table [ par mqsi ]
bonsoir mes chers amis,je cherche comment executer une requette sous VB6 qui permet de copier la structure d'une table déjas créérsvp s'il ya une pers
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|