eric leissler France Membre Simple # 0000002784 enregistré le 06/03/2010 http://www.aumeric.fr 68 ans LEISSLER Eric 85290 MORTAGNE SUR SEVRE de la société AUMERIC LOGICIELS Fiche personnelle
Note des membres pas de note
Contributions > 01 - PRG : Programmation
creation d'une table par programmation a partir d'une table existante
# 0000000306
ajouté le 29/03/2006 12:04:29 et modifié le 29/03/2006
consulté 9589 fois
Niveau
débutant
IF !USED(juststem(m.monfichier_dbf)) USE (m.monfichier_dbf) IN 0 SHARED ENDIF SELECT (juststem(m.monfichier_dbf)) ENDIF
a_env_pres_pap = .f.
IFTYPE('moncontructeur_prg') <> "C"OREMPTY(moncontructeur_prg)
moncontructeur_prg= PUTFILE('Output File:',alltrim(monfichier_dbf) + ".prg") IFEMPTY(moncontructeur_prg)
rep = MESSAGEBOX('placer le contenu dans le presse papier ?',32+4,'Gentable') IF rep = 6 && yes
a_env_pres_pap = .T. _CLIPTEXT = "" ELSE RETURN.F. ENDIF ENDIF ENDIF
IF !a_env_pres_pap *!* Create the output file
m.npointeur = FCREATE(m.moncontructeur_prg) IF m.npointeur < 1 MESSAGEBOX('Le prg de destination ne peut pas être créé !: ' + m.moncontructeur_prg, 0,"erreur !") RETURN.F. ENDIF ELSE
m.npointeur = 0 ENDIF
WAITWINDOW"Construction et Ecriture de : " + ALLTRIM(monfichier_dbf) + "..."NOWAIT
PRIVATEALLEXCEPT g_*
*! Get all the fields
m.nbchamps = AFIELDS(a_champs)
*! NOTE * NOTE * NOTE *! If the table is greater than 8 characters then it will fail on platforms that *! do not support this (Such as Win32s).
m.cOldSetFullPath = SET("FULLPATH") SETFULLPATHOFF
m.monfichier = DBF(ALIAS()) SETFULLPATH &cOldSetFullPath
m.monfichier = SUBSTR(m.monfichier, RAT(":", m.monfichier) + 1)
m.machainedecreation = "CREATE TABLE " + m.monfichier + " free" + " ("
*! Information about each field that can been written with CREATE TABLE - SQL FOR m.i = 1 TO m.nbchamps IF m.i = 1
m.machainedecreation = m.machainedecreation + a_champs(m.i, 1) + " " ELSE
m.machainedecreation = SPACE(LEN(m.monfichier_dbf) + 15) + ;
a_champs(m.i, 1) + " " ENDIF
m.machainedecreation = m.machainedecreation + a_champs(m.i, 2) DOCASE CASE a_champs(m.i, 2) == "C"
m.machainedecreation = m.machainedecreation + "(" + ; ALLTRIM(STR(a_champs(m.i, 3))) + ")" IF a_champs(m.i, 6)
m.machainedecreation = m.machainedecreation + " NOCPTRANS" ENDIF CASE a_champs(m.i, 2) == "M" IF a_champs(m.i, 6)
m.machainedecreation = m.machainedecreation + " NOCPTRANS" ENDIF CASE a_champs(m.i, 2) == "N"OR ;
a_champs(m.i, 2) == "F"
machainedecreation = m.machainedecreation + "(" + ; ALLTRIM(STR(a_champs(m.i, 3))) + ; ", " + ALLTRIM(STR(a_champs(m.i, 4))) + ")" CASE a_champs(m.i, 2) == "B"
m.machainedecreation = m.machainedecreation + "(" + ; ALLTRIM(STR(a_champs(m.i, 4))) ;
+ ")" ENDCASE
IF a_champs(m.i, 5)
m.machainedecreation = m.machainedecreation + " NULL" ELSE
m.machainedecreation = m.machainedecreation + " NOT NULL" ENDIF
*! Get Index Information
ecritfic(m.npointeur, CHR(13) + "***** " + " definition des index " + m.monfichier_dbf + " *****")
m.cCollate = "" FOR m.i = 1 TOTAGCOUNT()
m.cTag = UPPER(ALLTRIM(TAG(m.i))) IF m.cCollate <> IDXCOLLATE(m.i)
m.cCollate = IDXCOLLATE(m.i)
ecritfic(m.npointeur, "SET COLLATE TO '" + m.cCollate + "'") ENDIF IF !EMPTY(m.cTag) DOCASE CASEPRIMARY(m.i) IF !EMPTY(SYS(2021, m.i)) IFEMPTY(m.g_cFilterExp) MessageBox("NOT_SUPPORTED_LOC", 64, "WARNING_TITLE_LOC") ENDIF
m.g_cFilterExp = m.g_cFilterExp + CHR(13) + ; "TABLE_NAME_LOC" + m.monfichier_dbf + CHR(13) + ; "PRIMARY_KEY_LOC" + SYS(14, m.i) + CHR(13) + ; "FILTER_EXP_LOC" + SYS(2021, m.i) ENDIF
ecritfic(m.npointeur, "ALTER TABLE '" + m.monfichier_dbf + ; "' ADD PRIMARY KEY " + SYS(14, m.i) ;
+ " TAG " + m.cTag) CASECANDIDATE(m.i) IFEMPTY(SYS(2021, m.i))
ecritfic(m.npointeur, "INDEX ON " + SYS(14, m.i) + ; " TAG " + m.cTag + " CANDIDATE") ELSE
ecritfic(m.npointeur, "INDEX ON " + SYS(14, m.i) + ; " TAG " + m.cTag + " FOR " + SYS(2021, m.i) + ;
+ " CANDIDATE") ENDIF CASEUNIQUE(m.i) IF(EMPTY(SYS(2021, m.i)))
ecritfic(m.npointeur, "INDEX ON " + SYS(14, m.i) + ; " TAG " + m.cTag + " UNIQUE") ELSE
ecritfic(m.npointeur, "INDEX ON " + SYS(14, m.i);
+ " TAG " + m.cTag + " FOR " + SYS(2021, m.i) ;
+ " UNIQUE") ENDIF OTHERWISE IF(EMPTY(SYS(2021, m.i)))
ecritfic(m.npointeur, "INDEX ON " + SYS(14, m.i) + ; " TAG " + m.cTag) ELSE
ecritfic(m.npointeur, "INDEX ON " + SYS(14, m.i);
+ " TAG " + m.cTag + " FOR " + SYS(2021, m.i)) ENDIF ENDCASE ELSE EXITFOR ENDIF ENDFOR
ecritfic(m.npointeur, "") FCLOSE(m.npointeur)
IF a_env_pres_pap MESSAGEBOX('le presse papier a été correctement rempli',0,'Gentable') ELSE MESSAGEBOX('la sortie a été envoyée sur le programme : ' + moncontructeur_prg+'.',0,'Gentable') ENDIF RETURN