Accueil > > > GESTION SIMPLIFIÉE D'UNE TABLE CLIENTE EN XML
GESTION SIMPLIFIÉE D'UNE TABLE CLIENTE EN XML
Information sur la source
Description
Manipulation d'une base XML avec compteur de page. Opérations habituelles: Ajout,suppression,modification et sauvegarde. Conditions d'utilisation: Windows XP avec droits admins et Internet Explorer.Téléchargez le zip pour les icônes.
Source
- <!--
- /*------------------------------------------------------------------------
- ****** Gestion d'une Table Cliente *****
- XML / JAVASCRIPT / DHTML
-
- Environnement : Windows XP (avec droit Admin)
- Navigateur : Internet Explorer
- Niveau : Débutant confirmé
- Description : Gestion simplifiée d'une base cliente en mode local.
- "Nom,Prenom,Adresse,...".
- Utilisation d'un fichier XML comme unité de stockage.
- Opérations usuelles : Ajout, Suppression , Modification , Annulation et
- sauvegarde, et un compteur de page dynamique pour
- parcourir la table.Si aucune base n'existe,le
- programme génère automatique un modèle avant toutes
- opérations. Particularité : Msxml en natif.Utilisation
- de la balise <xml> pour l'intégration des données dans
- la page html. Bug : Accés refusé pour la sauvegarde en
- local de la base xml à l'appel de la méthode save du
- composant Msxml2.DOMDocument. Comme alternatif,j'ai
- utilisé le FSO du WSH.
- --------------------------------------------------------------------------*/ -->
-
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
- <HTML>
- <HEAD>
- <TITLE>[ Base Abonné ]</TITLE>
- <META name=VI60_defaultClientScript content=JavaScript>
- <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
-
- <SCRIPT type="text/javascript" language="javascript">
-
- /* --------- Variables globales --------------*/
-
-
- var ITEMTAGNAME = "abonne";
- var LABELCOL = new Array("num_abonne","Nom","Prenom","Adresse","Code_Postal","Ville","Telephone");
- // LABELCOL = Label des colonnes selon la structure d'un noeud abonné. La casse est respectée
- var MAXREC = 0; // Nombre d'abonnés dans la "base" - Initialisé au chargement
- var TABROW = 20; // Nombre d'enregistrement par page [ TABROW = PAGE ]
- var DEBINDEX = 0; // Debut de Lecture des items DEBINDEX est selon l'ordre inscrite dans la base
- var FININDEX = 0; // Fin de Lecture des items FININDEX est selon l'ordre inscrite dans la base
- var PAGE = 20; // Par défaut 20 items (video) par Lecture [ PAGE = TABROW ]
- var CPTPG = 1; // Compteur de page x / MAXPG -Initialisé au chargement voir initCPTPG()
- var MAXPG = 0; // Compteur de page MAXREC / PAGE -Initialisé au chargement voir initCPTPG()
- var NUMRECMAJ = 0; // Numéro element selectionné pour une mise à jour
- var noderec = null; // Utiliser pour la création d'un nouveau abonne
- var ENCODAGE = "iso-8859-1"; // codage des caractères
- var FILEDBABN = "dbabonne.xml"; // Localisation de la Base Abonne
- // ex syntaxe : Répertoire courant = "dbabonne.xml"
- // Autre chemin existant = "c:\\database\\dbabonne.xml"
-
- // -------------- ListSelectRec(numero) -----------------------
- // Description : Manipulation sur l'enregistrement sélectionné (clické)
- // Entree : Numero abonne
- // Sortie : Affichage d'une seule ligne pour toutes manipulations :
- // Ajout,Suppression,Modification,Annulation,Sauvegarde
- // Appel de Fonction : majItemRec() - Modification de l'enregistrement
- // delitemrec() - Suppression de l'enregistrement
- // AnnulerItemRec() - Annulation des modifications en cours
- // REM: : L'enregistrment sur disque est effectuée pour chaque opération
- //-------------------------------------------------------------
- function ListSelectRec(numero)
- {
- if(ListSelectRec.caller.toString().match(/addItemRec/i)) // Pour l'ajout d'un nouveau abonne
- {
- delrec();
- addrec(TDBXML.rows.length) ; // une seule ligne à manipuler pour toutes opérations [debut index = 0]
- var strIMG = "<BR><BR><DIV align=center><IMG id=imgretourpg SRC='img/icoleft1.bmp' " +
- "title='Retour à la page' style='HEIGHT: 20px;cursor:hand' height=20 " +
- " onclick='javascript:retourpg();'></IMG>" +
- " <IMG SRC='img/icorec.bmp' title='Mise à jour dans la base' style='HEIGHT:20px;cursor:hand'"+
- " height=20 onclick='javascript:majItemRec();'></IMG></DIV>"
- }
- else
- {
- var oNode = GetItemRec(numero);
- if(!oNode){ txtNumero.style.backgroundColor = "red"; return;}
- var xmldoc = GetXMLDocument(oNode.xml)
- delrec();
- GetRec(0,1,xmldoc) // Une ligne pour une selection
- var strIMG = "<BR><BR><DIV align=center><IMG id=imgretourpg SRC='img/icoleft1.bmp'" +
- " title='Retour à la page' style='HEIGHT: 20px;cursor:hand' height=20 onclick='javascript:retourpg();'>" +
- " </IMG><IMG SRC='img/icorec.bmp' title='Mise à jour dans la base' style='HEIGHT: 20px;cursor:hand'" +
- " height=20 onclick='javascript:majItemRec();'>" +
- "<IMG SRC='img/icoundo.bmp' title='Annuler' style='HEIGHT: 20px;cursor:hand' height=20 " +
- " onclick='javascript:AnnulerItemRec();'></IMG><IMG SRC='img/icodel.bmp' title='Supprimer'" +
- " style='HEIGHT: 20px;cursor:hand' height=20 onclick='javascript:delitemrec();'></IMG></DIV>"
- }
- document.getElementById("TRREC0").onmouseout = null;
- document.getElementById("TRREC0").onclick = null;
- document.getElementById("TRREC0").onkeydown = null;
- divopt.innerHTML = "";
- divopt.innerHTML = strIMG;
- document.getElementById("TRREC0").all.tags("INPUT").item(0).onkeyup = numcode_onkeyup;
-
- }
-
-
-
- /* --------------------------------[ GETREC(deb_index,fin_index,xmldoc) ]-------------------------------
- Description: Lecture des enregistrements par PAGE
- Entree:
- - deb_index : debut de position pour la lecture d'enregistrement
- - fin_index : fin de position pour la lecture d'enregistrement
- - xmldoc : Document xml correspondant à un noeud d'abonné
- Sortie:
- - Récupération des données (num_video,Nom,Prenom,..)pour chaque abonné
- Appel de fonctions:
- - Fonction addrec(integer) . Création et insertions des lignes pour chaque enregistrement
- l'affichage est effectuée sous la Table TDBXML
- Rem: Ci-dessous la structure d'un enregistrement (noeud ou item) pour un abonné
-
- <abonne>
- <num_abonne></num_abonne>
- <Nom></Nom>
- <Prenom></Prenom>
- <Adresse></Adresse>
- <Code_Postal></Code_Postal>
- <Ville></Ville>
- <Telephone></Telephone>
- </abonne>
-
- .....
- Utilisation : Par defaut les lectures se font par PAGE (20 items) et les INDEX debutent à 0
- - GetRec(0,20) Lecture de 20 items
- - GetRec(5,15) Lecture de 10 items à partir du 5ième
- ------------------------------------------------------------------------------------------------*/
- function GetRec(deb_index,fin_index,XMLDOC)
- {
- var NBREC = fin_index - deb_index;
-
- try{
- for(i=0;i<NBREC;i++) // Création des lignes dans la Table TDBXML selon la valeur PAGE
- addrec(i);
-
- if(fin_index > 1 && fin_index <= PAGE ) // Cas avec base vide et création premiers elements
- fin_index = MAXREC; // MAXREC et fin_index <= PAGE
- else
- {
- if(fin_index != 1) // Récupération des elements dans la base.
- { // fin_index = 1 : Opération sur element ou nouveau element
- deb_index = (CPTPG - 1) * PAGE;
- fin_index = deb_index + (MAXREC - ((CPTPG - 1) * PAGE));
- }
- }
- var objNodes = XMLDOC.getElementsByTagName(ITEMTAGNAME); // Récupération par tranche des items
- var row = -1; // index des lignes à partir de 0
- for(var i=deb_index;i<fin_index;i++)
- {
- row++;
- for(var j=0;j<objNodes.item(i).childNodes.length;j++)
- {
- var champ = document.getElementById("TRREC" + row).all.tags("INPUT");
- if(champ.item(j).id == LABELCOL[j]) // Contrôle supplémentaire selon le libellé
- champ.item(j).value = objNodes.item(i).childNodes.item(j).text;
- else
- {
- champ.item(j).value = "**Erreur**";
- }
- // Insertions des données selon la correspondance
- }
- }
- }catch(e){ }
- }
-
-
- // ---------- Efface l'affichage en cours des enregistrements ---------
- function delrec()
- {
- while(TDBXML.rows.length > 0)
- var ret = TBODYREC.deleteRow(0);
- }
-
- /* --------------------------------[ addrec(row) ]-------------------------------
- Entree:
- - row : Numero d'index ( index d'un noeud = index d'une ligne dans la Table TDBXML)
-
- Sortie:
- - Création lignes indépendantes et zone de champs pour chaque attribut d'un element
- ----------------------------------------------------------------------------*/
- function addrec(row)
- {
-
- var objTR =TDBXML.insertRow();
-
- var objTD0 = document.createElement("TD");
- var objTD1 = document.createElement("TD");
- var objTD2 = document.createElement("TD");
- var objTD3 = document.createElement("TD");
- var objTD4 = document.createElement("TD");
- var objTD5 = document.createElement("TD");
- var objTD6 = document.createElement("TD");
-
- objTR.id = "TRREC" + row;
-
- objTD0.id = "TDREC0" + row;
- objTD1.id = "TDREC1" + row;
- objTD2.id = "TDREC2" + row;
- objTD3.id = "TDREC3" + row;
- objTD4.id = "TDREC4" + row;
- objTD5.id = "TDREC5" + row;
- objTD6.id = "TDREC6" + row;
-
- document.getElementById(objTR.id).appendChild(objTD0);
- document.getElementById(objTR.id).appendChild(objTD1);
- document.getElementById(objTR.id).appendChild(objTD2);
- document.getElementById(objTR.id).appendChild(objTD3);
- document.getElementById(objTR.id).appendChild(objTD4);
- document.getElementById(objTR.id).appendChild(objTD5);
- document.getElementById(objTR.id).appendChild(objTD6);
-
- document.getElementById(objTD0.id).innerHTML =
- "<INPUT id=num_abonne name=num_abonne style='WIDTH: 66px; HEIGHT: 22px; BACKGROUND-COLOR: darkgray' size=11></INPUT>";
- document.getElementById(objTD1.id).innerHTML =
- "<INPUT id=Nom name=Nom style=' WIDTH: 150px; HEIGHT: 22px; BACKGROUND-COLOR: darkkhaki' size=25></INPUT>" ;
- document.getElementById(objTD2.id).innerHTML =
- "<INPUT id=Prenom name=Prenom style=' WIDTH: 114px; HEIGHT: 22px; BACKGROUND-COLOR: darkkhaki' ></INPUT>" ;
- document.getElementById(objTD3.id).innerHTML =
- "<INPUT id=Adresse name=Adresse style=' WIDTH: 205px; HEIGHT: 22px; BACKGROUND-COLOR: darkkhaki' size=39></INPUT>" ;
- document.getElementById(objTD4.id).innerHTML =
- "<INPUT id=Code_Postal name=Code_Postal style='WIDTH:89px; HEIGHT:22px; BACKGROUND-COLOR:darkkhaki' size=17></INPUT>";
- document.getElementById(objTD5.id).innerHTML =
- "<INPUT id=Ville name=Ville style=' WIDTH: 114px; HEIGHT: 22px; BACKGROUND-COLOR:darkkhaki' ></INPUT>" ;
- document.getElementById(objTD6.id).innerHTML =
- "<INPUT id=Telephone name=Telephone style=' WIDTH: 114px; HEIGHT: 22px; BACKGROUND-COLOR: darkkhaki' ></INPUT>" ;
-
- document.getElementById(objTR.id ).onmouseover = colorbkover;
- document.getElementById(objTR.id ).onmouseout = colorbkout;
- document.getElementById(objTR.id ).onkeydown = NoEditTR;
- document.getElementById(objTR.id ).onclick = selectItemRec;
- }
-
- // -------- champ non editable -------------------
- function NoEditTR()
- {
- if(window.event.keyCode != 9 ) return false;
- }
-
- // -- Recherche et retourne le noeud correspondant au numéro abonné --------
- function GetItemRec(numero)
- {
- try{
- var oNode = dbXML.selectSingleNode("//abonne[num_abonne = " + numero + "]");
- }catch(e){ return null;}
- return oNode; // null si numero inexistant
- }
-
- /* --------------------------------[ majItemRec() ]-------------------------------
- Description: - Opération de mise à jour sur l'enregistrement sélectionné
- Si le numéro d'abonné est modifié ou un nouveau est créé,
- le noeud sera inséré selon l'ordre croissant numérique.
- Entree: -
- Sortie: - Sauvegarde de la base sur disque aprés opération de modification
- Appel de fonction:
- - MajChampItemRec(noderec) :
- ----------------------------------------------------------------------------*/
-
- function majItemRec()
- {
- var numero = document.getElementById("TRREC0").all.tags("INPUT").item(0).value;
- var strMess = "";
- if(GetItemRec(numero) && numero != NUMRECMAJ)
- {
- document.getElementById("TRREC0").all.tags("INPUT").item(0).style.backgroundColor = "red";
- alert("Le numéro : " + numero + " est déjà inscrit dans la base");
- return;
- }
- else {
- if(numero != NUMRECMAJ)
- strMess = "\n\nNUMERO : " + NUMRECMAJ + " -> " + numero ;
- if(numero == "")
- {
- document.getElementById("TRREC0").all.tags("INPUT").item(0).style.backgroundColor = "red";
- return;
- }
- }
-
- var blnret = window.confirm("Mise à jour dans la base sans annulation ?" + strMess);
- if(blnret == false) return;
-
- noderec = GetItemRec(numero);
- if(noderec) // Mise à jour avec le même numero
- {
- MajChampItemRec(noderec);
- savexml(dbXML.xml,FILEDBABN); // Mise à jour de la base sur disque
- }
- else // Mise à jour avec un autre numero
- {
- var docElem = dbXML.documentElement;
- try{
- var oNode = docElem.selectSingleNode("//abonne[num_abonne > " + numero + "]");
- }catch(e){}
- noderec = GetItemRec(NUMRECMAJ); // Récupération du noeud selectionne et mise à jour des champs
- MajChampItemRec(noderec); // Mise à jour des champs du noeud selectionne
-
- if(oNode) // Insertion d'un noeud selon l'odre croissant
- var oDoc = docElem.insertBefore(noderec,oNode); // oDoc = noderec si OK
- else // Insertion d'un noeud en fin de liste si numero superieur auc autres
- var oDoc = docElem.insertBefore(noderec,docElem.lastchild); // oDoc = noderec si OK
- if(oDoc)
- {
- NUMRECMAJ = -1;
- savexml(dbXML.xml,FILEDBABN); // Mise à jour de la base sur disque
- }
- }
- MAXREC = dbXML.getElementsByTagName(ITEMTAGNAME).length;
- }
-
- function MajChampItemRec(noeudAbn)
- {
- if(!noeudAbn)
- {
- noderectmp = itemRecXML.cloneNode(true); //true = arborescence du noeud <video>...</video>
- noderec = noderectmp.selectSingleNode("//abonne");
-
- }
- for(var j=0;j<noderec.childNodes.length;j++)
- {
- var champ = document.getElementById("TRREC0").all.tags("INPUT");
- if(champ.item(j).id == LABELCOL[j]) // Contrôle supplémentaire selon le libellé
- { noderec.childNodes.item(j).text = champ.item(j).value;
- champ.item(j).style.backgroundColor = "lightsteelblue";
- } // Insertions des données selon la correspondance
- }
-
- }
-
- function savexml(strXML,strFILEDB)
- {
-
- var Path = window.document.location.pathname;
- var strPath = Path.substr(1,(Path.length - 1) - objFS.GetFileName(Path).length );
- strPath = strPath.replace(/\\/g,"\\\\");
- var objxmldoc = GetXMLDocument(strXML);
- var objxmldocelem = objxmldoc.documentElement;
- strPI = "<?xml version=\"1.0\" encoding=\"" + ENCODAGE + "\"?>"; // Ajout entête xml + Encodage
- strXML = strPI + String.fromCharCode(13,10) + objxmldocelem.xml;
-
- if(strFILEDB.match(/:\\/i))
- var strSaveXML = strFILEDB;
- else
- var strSaveXML = strPath + strFILEDB;
-
- strSaveXML = strSaveXML.replace(/%20/g," ");
-
- try{
- var objFile = objFS.OpenTextFile(strSaveXML, 2, true); // Création d'un nouveau fichier ASCII
- objFile.Write(strXML);
- objFile.Close();
- }catch(e){ alert("Erreur de création sur : " + strSaveXML + "\n" + e.description + "\n\n" + " Vérifier que le répertoire existe"); return;}
-
-
- }
-
-
- function delitemrec()
- {
- if( document.getElementById("TRREC0").all.tags("INPUT").item(0).value != NUMRECMAJ )
- { alert("La suppression est réalisée qu'avec le numéro sélectionné.");return;}
- var blnret = window.confirm("Suppression définitive du Numéro : " + NUMRECMAJ + " ?");
- if(blnret == false) return;
- var objnoderec = GetItemRec(NUMRECMAJ);
- var docelem = dbXML.documentElement;
- var xmlabn = docelem.removeChild(objnoderec);
- savexml(docelem.xml,FILEDBABN)
-
- /* Mise à jour compteur selon suppression dans la première PAGE ou dernière PAGE*/
-
- MAXREC = dbXML.getElementsByTagName(ITEMTAGNAME).length;
- if(CPTPG == MAXPG) // dernière PAGE
- {
- DEBINDEX--;
- FININDEX--;
- if( (FININDEX % PAGE) == 0)
- CPTPG-- ;
- }
-
- initCPTPG(PAGE,MAXREC,CPTPG);
- retourpg();
- }
-
- function AnnulerItemRec(){
- ListSelectRec(NUMRECMAJ)
- }
-
- function selectItemRec()
- {
- txtNumero.value = document.getElementById(this.id).all.tags("INPUT").item(0).value
- NUMRECMAJ = txtNumero.value;
- ListSelectRec(txtNumero.value)
- }
-
- function numcode_onkeyup()
- {
- document.getElementById("TRREC0").all.tags("INPUT").item(0).style.backgroundColor = "darkgray";
- var numero = document.getElementById("TRREC0").all.tags("INPUT").item(0).value;
-
- if(isNaN(numero))
- document.getElementById("TRREC0").all.tags("INPUT").item(0).value = numero.substring(0,numero.length - 1)
- }
-
- function colorbkover()
- {
- var champ = document.getElementById(this.id).all.tags("INPUT");
- for(var i=1;i<champ.length;i++)
- champ.item(i).style.backgroundColor = "white";
- txtNumero.style.backgroundColor = "darkgray";
- }
-
- function colorbkout()
- {
- var champ = document.getElementById(this.id).all.tags("INPUT");
- for(var i=1;i<champ.length;i++)
- champ.item(i).style.backgroundColor = "darkkhaki";
- var height = parseInt(video.style.height.substr(0,video.style.height.length - 2)) - 10;
-
- }
-
- function initCPTPG(ROWPAGE,NBREC,COMPTEUR) //Initialisation du compteur de PAGE
- {
-
- if(NBREC == 0) COMPTEUR = 0 ;
- var nbpage = NBREC/ROWPAGE;
- if(nbpage > parseInt(NBREC/ROWPAGE))
- nbpage = parseInt(NBREC/ROWPAGE) + 1;
- MAXPG = nbpage;
- NBPG.innerHTML = COMPTEUR + " / " + MAXPG;
- }
-
- // un Document XML est crée à partir d'une syntaxe xml.
- function GetXMLDocument(strXML)
- {
- var msxmldoc = new ActiveXObject("Msxml2.DOMDocument");
- msxmldoc.async = false;
- msxmldoc.resolveExternals = false;
- msxmldoc.validateOnParse = false;
- msxmldoc.loadXML(strXML) ;
-
- return msxmldoc;
- }
-
- function retourpg()
- {
- divopt.innerHTML = "";
-
- initCPTPG(PAGE,MAXREC,CPTPG);
- if(MAXREC <= PAGE)
- {
- pgPrec.click();
- }
- else
- {
- delrec();
- GetRec(DEBINDEX ,FININDEX,dbXML);
- }
- video.focus();
- NUMRECMAJ = 0;
-
- }
-
-
-
-
- </SCRIPT>
-
- <SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
- <!--
-
- function window_onload() { // Initialisation variable,compteur de page et affichage d'une Page d'enregistrement
- CreateDB(FILEDBABN); // Création d'une base vide si inexistant
- DEBINDEX = 0;
- FININDEX = PAGE;
- MAXREC = dbXML.getElementsByTagName(ITEMTAGNAME).length;
- initCPTPG(PAGE,MAXREC,CPTPG)
- GetRec(DEBINDEX ,FININDEX,dbXML);
- }
-
- /* -------------------------[ COMPTEUR DE PAGE ]------------------
- Description:
- - Affiche une Page d'abonnée par tranche de 20(par défaut) .
- Appel de fonction :
- - pgSuiv() * Page suivante
- - pgPrec() * Page précédente
- - firstpg() * Première Page
- - lastpg() * Dernière Page
- -------------------------------------------------------------------*/
- function pgSuiv_onclick() {
- MAXREC = dbXML.getElementsByTagName(ITEMTAGNAME).length;
- if(MAXREC <= PAGE) return;
-
- divopt.innerHTML = "";
- DEBINDEX = FININDEX;
- FININDEX = DEBINDEX + PAGE; // PAGE = 20 par defaut
-
- if(FININDEX > MAXREC)
- { DEBINDEX = MAXREC - PAGE;
- FININDEX = MAXREC
- CPTPG = MAXPG;
- }
- else
- CPTPG++;
- initCPTPG(PAGE,MAXREC,CPTPG);
-
- delrec();
- GetRec(DEBINDEX ,FININDEX,dbXML)
- }
-
-
- function pgPrec_onclick() {
-
- divopt.innerHTML = "";
- DEBINDEX -= PAGE;
- FININDEX -= PAGE;
- MAXREC = dbXML.getElementsByTagName(ITEMTAGNAME).length;
-
- if(DEBINDEX < 0)
- { DEBINDEX = 0;
- FININDEX = PAGE;
- CPTPG = 1;
- }
- else
- CPTPG--;
-
- initCPTPG(PAGE,MAXREC,CPTPG);
-
- delrec();
- GetRec(DEBINDEX ,FININDEX,dbXML)
- }
-
- function firstpg_onclick() {
- divopt.innerHTML = "";
- DEBINDEX = 0;
- FININDEX = PAGE ;
- MAXREC = dbXML.getElementsByTagName(ITEMTAGNAME).length;
- CPTPG = 1;
- initCPTPG(PAGE,MAXREC,CPTPG);
- delrec()
- GetRec(DEBINDEX ,FININDEX,dbXML);
- }
-
- function lastpg_onclick() {
- divopt.innerHTML = "";
- MAXREC = dbXML.getElementsByTagName(ITEMTAGNAME).length;
-
- if(MAXREC <= PAGE) return;
-
- DEBINDEX = MAXREC - PAGE;
- FININDEX = MAXREC;
- CPTPG = MAXPG;
- initCPTPG(PAGE,MAXREC,CPTPG);
- delrec()
- GetRec(DEBINDEX ,FININDEX,dbXML);
- }
-
- function txtNumero_onclick() {
- txtNumero.select()
- }
-
- function txtNumero_onkeyup() {
- if(isNaN(txtNumero.value))
- txtNumero.value = txtNumero.value.substring(0,txtNumero.value.length - 1)
- txtNumero.style.backgroundColor = "darkgray";
- }
-
- function txtNumero_onkeypress() {
- if(window.event.keyCode == 13 && txtNumero.value != "")
- { window.event.returnValue = false;
- NUMRECMAJ = txtNumero.value;
- ListSelectRec(txtNumero.value);
- }
- }
-
- // ------------ Nouveau abonne ----------
- function addItemRec_onclick() {
-
- if(NUMRECMAJ == -1)
- {
- var blnret = window.confirm("Annuler le travail en cours et créer un nouveau ?")
- if(blnret == false) return;
- }
- NUMRECMAJ = -1
- ListSelectRec(NUMRECMAJ)
- }
-
-
- function window_onmouseover() {
- window.scrollTo(0,0)
- }
-
- //-->
- </SCRIPT>
- </HEAD>
- <BODY bottomMargin=0 leftMargin=0 topMargin=0 rightMargin=0 background="" LANGUAGE=javascript
- onload="return window_onload()" >
-
- <TABLE align=center width="914" height="16" style="BACKGROUND-COLOR: darkgray"><TR><TD align=middle HEIGHT="16">
- <FONT style="COLOR: white">*** LISTE DES ABONNES ***</FONT></TD></TR></TABLE>
-
- <HR size=2 color=white>
-
- <DIV align=center style="HEIGHT: 200px" id=DIV1>
- <TABLE BORDER=1 style="FONT-WEIGHT: normal; LEFT: -8px; FONT-STYLE: normal; POSITION: relative; HEIGHT: 29px">
- <THEAD>
- <TR>
- <TH style="WIDTH: 66px; HEIGHT: 22px" >Numéro</TH>
- <TH style="WIDTH: 150px; HEIGHT: 22px" >Nom</TH>
- <TH style="WIDTH: 114px; HEIGHT: 22px" >Prénom</TH>
- <TH style="WIDTH: 205px; HEIGHT: 22px" >Adresse</TH>
- <TH style="WIDTH: 89px; HEIGHT: 22px" >Code Postal</TH>
- <TH style="WIDTH: 114px; HEIGHT: 22px" >Ville</TH>
- <TH style="WIDTH: 114px; HEIGHT: 22px" >Téléphone</TH>
- </TR>
- </TABLE>
-
-
- <DIV id="video" style="OVERFLOW-Y: scroll; WIDTH: 915px; BORDER-TOP-STYLE: inset; BORDER-RIGHT-STYLE: inset;
- BORDER-LEFT-STYLE: inset; HEIGHT: 310px; BACKGROUND-COLOR: darkkhaki; BORDER-BOTTOM-STYLE: inset">
-
- <TABLE id="TDBXML" BORDER=1 width=800 style="FONT-WEIGHT: normal; FONT-STYLE: normal" >
- <TBODY id=TBODYREC >
- </TBODY>
- </TABLE>
-
- <DIV id=divopt></DIV></DIV>
-
- <IMG id=addItemRec SRC="img/icoabn.bmp" title="Nouveau abonné" ALIGN=center height=20 width=20
- style="CURSOR: hand" LANGUAGE=javascript onclick="return addItemRec_onclick()"></IMG> </IMG>
-
- <INPUT id=txtNumero name=txtNumero style="FONT-WEIGHT: bold; BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid;
- BORDER-LEFT-STYLE: solid; BACKGROUND-COLOR: darkgray; TEXT-ALIGN: center; BORDER-BOTTOM-STYLE: solid"
- align=middle LANGUAGE =javascript
- onclick ="return txtNumero_onclick()"
- onkeyup="return txtNumero_onkeyup()"
- onkeypress="return txtNumero_onkeypress()"
- title=Numéro size=16>
-
-
- <HR align=center width=100>
-
- <DIV align=center><IMG SRC="img/icofirst.bmp" style="WIDTH: 32px; CURSOR: hand; HEIGHT: 32px" height=32 id=firstpg
- LANGUAGE=javascript onclick="return firstpg_onclick()" width=32>
-
- <IMG language=javascript id=pgPrec style="WIDTH: 32px;
- HEIGHT:32px" onclick="return pgPrec_onclick()" height=32 alt="" hspace=0 src="img/icol1.bmp" width=32 useMap="" border=0>
-
- <IMG language=javascript id=pgSuiv style="WIDTH: 32px; CURSOR: hand; HEIGHT: 32px" onclick="return pgSuiv_onclick()"
- height=32 alt="" hspace=0 src="img/icor1.bmp" width=32 useMap="" border=0 >
-
- <IMG SRC="img/icolast.bmp" style="LEFT: 79px; WIDTH: 32px; CURSOR: hand; TOP: 0px; HEIGHT: 32px" height=32 id=lastpg
- LANGUAGE=javascript onclick="return lastpg_onclick()" alt="" hspace=0 width=32 useMap="" border=0>
- <BR><SPAN id=NBPG></SPAN></DIV>
- </DIV>
- <object id=objFS classid=clsid:0D43FE01-F093-11CF-8940-00A0C9054228 VIEWASTEXT></object>
-
- <SCRIPT type="text/javascript" language="javascript">
- <!--
-
- function CreateDB(strFILEDB)
- {
-
- /* --------- Creation de la base si inexistant --------------*/
-
- var Path = window.document.location.pathname;
- var strPath = Path.substr(1,(Path.length - 1) - objFS.GetFileName(Path).length );
-
- strPath = strPath.replace(/\\/g,"\\\\");
-
- if(strFILEDB.match(/:\\/i) )
- var strSaveXML = strFILEDB; // Base avec chemin absolu
- else
- var strSaveXML = strPath + strFILEDB; // Base avec chemin par défaut
-
- strSaveXML = strSaveXML.replace(/%20/g," ");
-
- if(objFS.FileExists(strSaveXML) == false)
- savexml("<evideo></evideo>",strSaveXML)
-
- /* -------- Affectation de la base au document XML ----------*/
-
- dbXML.src = strSaveXML;
-
-
- }
- -->
- </SCRIPT>
- <xml ID="dbXML" ></xml>
-
- <xml id="itemRecXML">
- <abonne>
- <num_abonne></num_abonne>
- <Nom></Nom>
- <Prenom></Prenom>
- <Adresse></Adresse>
- <Code_Postal></Code_Postal>
- <Ville></Ville>
- <Telephone></Telephone>
- </abonne>
- </xml>
-
-
-
- <div align=center style="POSITION:relative;TOP:0%">
- <hr width="90%" color=black SIZE=2>
- <img alt="www.aufildutemps.new.fr" hspace=0 src="img/logo.png" vspace=0 border=0 ></div>
-
-
- </BODY>
- </HTML>
-
<!--
/*------------------------------------------------------------------------
****** Gestion d'une Table Cliente *****
XML / JAVASCRIPT / DHTML
Environnement : Windows XP (avec droit Admin)
Navigateur : Internet Explorer
Niveau : Débutant confirmé
Description : Gestion simplifiée d'une base cliente en mode local.
"Nom,Prenom,Adresse,...".
Utilisation d'un fichier XML comme unité de stockage.
Opérations usuelles : Ajout, Suppression , Modification , Annulation et
sauvegarde, et un compteur de page dynamique pour
parcourir la table.Si aucune base n'existe,le
programme génère automatique un modèle avant toutes
opérations. Particularité : Msxml en natif.Utilisation
de la balise <xml> pour l'intégration des données dans
la page html. Bug : Accés refusé pour la sauvegarde en
local de la base xml à l'appel de la méthode save du
composant Msxml2.DOMDocument. Comme alternatif,j'ai
utilisé le FSO du WSH.
--------------------------------------------------------------------------*/ -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
<HTML>
<HEAD>
<TITLE>[ Base Abonné ]</TITLE>
<META name=VI60_defaultClientScript content=JavaScript>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<SCRIPT type="text/javascript" language="javascript">
/* --------- Variables globales --------------*/
var ITEMTAGNAME = "abonne";
var LABELCOL = new Array("num_abonne","Nom","Prenom","Adresse","Code_Postal","Ville","Telephone");
// LABELCOL = Label des colonnes selon la structure d'un noeud abonné. La casse est respectée
var MAXREC = 0; // Nombre d'abonnés dans la "base" - Initialisé au chargement
var TABROW = 20; // Nombre d'enregistrement par page [ TABROW = PAGE ]
var DEBINDEX = 0; // Debut de Lecture des items DEBINDEX est selon l'ordre inscrite dans la base
var FININDEX = 0; // Fin de Lecture des items FININDEX est selon l'ordre inscrite dans la base
var PAGE = 20; // Par défaut 20 items (video) par Lecture [ PAGE = TABROW ]
var CPTPG = 1; // Compteur de page x / MAXPG -Initialisé au chargement voir initCPTPG()
var MAXPG = 0; // Compteur de page MAXREC / PAGE -Initialisé au chargement voir initCPTPG()
var NUMRECMAJ = 0; // Numéro element selectionné pour une mise à jour
var noderec = null; // Utiliser pour la création d'un nouveau abonne
var ENCODAGE = "iso-8859-1"; // codage des caractères
var FILEDBABN = "dbabonne.xml"; // Localisation de la Base Abonne
// ex syntaxe : Répertoire courant = "dbabonne.xml"
// Autre chemin existant = "c:\\database\\dbabonne.xml"
// -------------- ListSelectRec(numero) -----------------------
// Description : Manipulation sur l'enregistrement sélectionné (clické)
// Entree : Numero abonne
// Sortie : Affichage d'une seule ligne pour toutes manipulations :
// Ajout,Suppression,Modification,Annulation,Sauvegarde
// Appel de Fonction : majItemRec() - Modification de l'enregistrement
// delitemrec() - Suppression de l'enregistrement
// AnnulerItemRec() - Annulation des modifications en cours
// REM: : L'enregistrment sur disque est effectuée pour chaque opération
//-------------------------------------------------------------
function ListSelectRec(numero)
{
if(ListSelectRec.caller.toString().match(/addItemRec/i)) // Pour l'ajout d'un nouveau abonne
{
delrec();
addrec(TDBXML.rows.length) ; // une seule ligne à manipuler pour toutes opérations [debut index = 0]
var strIMG = "<BR><BR><DIV align=center><IMG id=imgretourpg SRC='img/icoleft1.bmp' " +
"title='Retour à la page' style='HEIGHT: 20px;cursor:hand' height=20 " +
" onclick='javascript:retourpg();'></IMG>" +
" <IMG SRC='img/icorec.bmp' title='Mise à jour dans la base' style='HEIGHT:20px;cursor:hand'"+
" height=20 onclick='javascript:majItemRec();'></IMG></DIV>"
}
else
{
var oNode = GetItemRec(numero);
if(!oNode){ txtNumero.style.backgroundColor = "red"; return;}
var xmldoc = GetXMLDocument(oNode.xml)
delrec();
GetRec(0,1,xmldoc) // Une ligne pour une selection
var strIMG = "<BR><BR><DIV align=center><IMG id=imgretourpg SRC='img/icoleft1.bmp'" +
" title='Retour à la page' style='HEIGHT: 20px;cursor:hand' height=20 onclick='javascript:retourpg();'>" +
" </IMG><IMG SRC='img/icorec.bmp' title='Mise à jour dans la base' style='HEIGHT: 20px;cursor:hand'" +
" height=20 onclick='javascript:majItemRec();'>" +
"<IMG SRC='img/icoundo.bmp' title='Annuler' style='HEIGHT: 20px;cursor:hand' height=20 " +
" onclick='javascript:AnnulerItemRec();'></IMG><IMG SRC='img/icodel.bmp' title='Supprimer'" +
" style='HEIGHT: 20px;cursor:hand' height=20 onclick='javascript:delitemrec();'></IMG></DIV>"
}
document.getElementById("TRREC0").onmouseout = null;
document.getElementById("TRREC0").onclick = null;
document.getElementById("TRREC0").onkeydown = null;
divopt.innerHTML = "";
divopt.innerHTML = strIMG;
document.getElementById("TRREC0").all.tags("INPUT").item(0).onkeyup = numcode_onkeyup;
}
/* --------------------------------[ GETREC(deb_index,fin_index,xmldoc) ]-------------------------------
Description: Lecture des enregistrements par PAGE
Entree:
- deb_index : debut de position pour la lecture d'enregistrement
- fin_index : fin de position pour la lecture d'enregistrement
- xmldoc : Document xml correspondant à un noeud d'abonné
Sortie:
- Récupération des données (num_video,Nom,Prenom,..)pour chaque abonné
Appel de fonctions:
- Fonction addrec(integer) . Création et insertions des lignes pour chaque enregistrement
l'affichage est effectuée sous la Table TDBXML
Rem: Ci-dessous la structure d'un enregistrement (noeud ou item) pour un abonné
<abonne>
<num_abonne></num_abonne>
<Nom></Nom>
<Prenom></Prenom>
<Adresse></Adresse>
<Code_Postal></Code_Postal>
<Ville></Ville>
<Telephone></Telephone>
</abonne>
.....
Utilisation : Par defaut les lectures se font par PAGE (20 items) et les INDEX debutent à 0
- GetRec(0,20) Lecture de 20 items
- GetRec(5,15) Lecture de 10 items à partir du 5ième
------------------------------------------------------------------------------------------------*/
function GetRec(deb_index,fin_index,XMLDOC)
{
var NBREC = fin_index - deb_index;
try{
for(i=0;i<NBREC;i++) // Création des lignes dans la Table TDBXML selon la valeur PAGE
addrec(i);
if(fin_index > 1 && fin_index <= PAGE ) // Cas avec base vide et création premiers elements
fin_index = MAXREC; // MAXREC et fin_index <= PAGE
else
{
if(fin_index != 1) // Récupération des elements dans la base.
{ // fin_index = 1 : Opération sur element ou nouveau element
deb_index = (CPTPG - 1) * PAGE;
fin_index = deb_index + (MAXREC - ((CPTPG - 1) * PAGE));
}
}
var objNodes = XMLDOC.getElementsByTagName(ITEMTAGNAME); // Récupération par tranche des items
var row = -1; // index des lignes à partir de 0
for(var i=deb_index;i<fin_index;i++)
{
row++;
for(var j=0;j<objNodes.item(i).childNodes.length;j++)
{
var champ = document.getElementById("TRREC" + row).all.tags("INPUT");
if(champ.item(j).id == LABELCOL[j]) // Contrôle supplémentaire selon le libellé
champ.item(j).value = objNodes.item(i).childNodes.item(j).text;
else
{
champ.item(j).value = "**Erreur**";
}
// Insertions des données selon la correspondance
}
}
}catch(e){ }
}
// ---------- Efface l'affichage en cours des enregistrements ---------
function delrec()
{
while(TDBXML.rows.length > 0)
var ret = TBODYREC.deleteRow(0);
}
/* --------------------------------[ addrec(row) ]-------------------------------
Entree:
- row : Numero d'index ( index d'un noeud = index d'une ligne dans la Table TDBXML)
Sortie:
- Création lignes indépendantes et zone de champs pour chaque attribut d'un element
----------------------------------------------------------------------------*/
function addrec(row)
{
var objTR =TDBXML.insertRow();
var objTD0 = document.createElement("TD");
var objTD1 = document.createElement("TD");
var objTD2 = document.createElement("TD");
var objTD3 = document.createElement("TD");
var objTD4 = document.createElement("TD");
var objTD5 = document.createElement("TD");
var objTD6 = document.createElement("TD");
objTR.id = "TRREC" + row;
objTD0.id = "TDREC0" + row;
objTD1.id = "TDREC1" + row;
objTD2.id = "TDREC2" + row;
objTD3.id = "TDREC3" + row;
objTD4.id = "TDREC4" + row;
objTD5.id = "TDREC5" + row;
objTD6.id = "TDREC6" + row;
document.getElementById(objTR.id).appendChild(objTD0);
document.getElementById(objTR.id).appendChild(objTD1);
document.getElementById(objTR.id).appendChild(objTD2);
document.getElementById(objTR.id).appendChild(objTD3);
document.getElementById(objTR.id).appendChild(objTD4);
document.getElementById(objTR.id).appendChild(objTD5);
document.getElementById(objTR.id).appendChild(objTD6);
document.getElementById(objTD0.id).innerHTML =
"<INPUT id=num_abonne name=num_abonne style='WIDTH: 66px; HEIGHT: 22px; BACKGROUND-COLOR: darkgray' size=11></INPUT>";
document.getElementById(objTD1.id).innerHTML =
"<INPUT id=Nom name=Nom style=' WIDTH: 150px; HEIGHT: 22px; BACKGROUND-COLOR: darkkhaki' size=25></INPUT>" ;
document.getElementById(objTD2.id).innerHTML =
"<INPUT id=Prenom name=Prenom style=' WIDTH: 114px; HEIGHT: 22px; BACKGROUND-COLOR: darkkhaki' ></INPUT>" ;
document.getElementById(objTD3.id).innerHTML =
"<INPUT id=Adresse name=Adresse style=' WIDTH: 205px; HEIGHT: 22px; BACKGROUND-COLOR: darkkhaki' size=39></INPUT>" ;
document.getElementById(objTD4.id).innerHTML =
"<INPUT id=Code_Postal name=Code_Postal style='WIDTH:89px; HEIGHT:22px; BACKGROUND-COLOR:darkkhaki' size=17></INPUT>";
document.getElementById(objTD5.id).innerHTML =
"<INPUT id=Ville name=Ville style=' WIDTH: 114px; HEIGHT: 22px; BACKGROUND-COLOR:darkkhaki' ></INPUT>" ;
document.getElementById(objTD6.id).innerHTML =
"<INPUT id=Telephone name=Telephone style=' WIDTH: 114px; HEIGHT: 22px; BACKGROUND-COLOR: darkkhaki' ></INPUT>" ;
document.getElementById(objTR.id ).onmouseover = colorbkover;
document.getElementById(objTR.id ).onmouseout = colorbkout;
document.getElementById(objTR.id ).onkeydown = NoEditTR;
document.getElementById(objTR.id ).onclick = selectItemRec;
}
// -------- champ non editable -------------------
function NoEditTR()
{
if(window.event.keyCode != 9 ) return false;
}
// -- Recherche et retourne le noeud correspondant au numéro abonné --------
function GetItemRec(numero)
{
try{
var oNode = dbXML.selectSingleNode("//abonne[num_abonne = " + numero + "]");
}catch(e){ return null;}
return oNode; // null si numero inexistant
}
/* --------------------------------[ majItemRec() ]-------------------------------
Description: - Opération de mise à jour sur l'enregistrement sélectionné
Si le numéro d'abonné est modifié ou un nouveau est créé,
le noeud sera inséré selon l'ordre croissant numérique.
Entree: -
Sortie: - Sauvegarde de la base sur disque aprés opération de modification
Appel de fonction:
- MajChampItemRec(noderec) :
----------------------------------------------------------------------------*/
function majItemRec()
{
var numero = document.getElementById("TRREC0").all.tags("INPUT").item(0).value;
var strMess = "";
if(GetItemRec(numero) && numero != NUMRECMAJ)
{
document.getElementById("TRREC0").all.tags("INPUT").item(0).style.backgroundColor = "red";
alert("Le numéro : " + numero + " est déjà inscrit dans la base");
return;
}
else {
if(numero != NUMRECMAJ)
strMess = "\n\nNUMERO : " + NUMRECMAJ + " -> " + numero ;
if(numero == "")
{
document.getElementById("TRREC0").all.tags("INPUT").item(0).style.backgroundColor = "red";
return;
}
}
var blnret = window.confirm("Mise à jour dans la base sans annulation ?" + strMess);
if(blnret == false) return;
noderec = GetItemRec(numero);
if(noderec) // Mise à jour avec le même numero
{
MajChampItemRec(noderec);
savexml(dbXML.xml,FILEDBABN); // Mise à jour de la base sur disque
}
else // Mise à jour avec un autre numero
{
var docElem = dbXML.documentElement;
try{
var oNode = docElem.selectSingleNode("//abonne[num_abonne > " + numero + "]");
}catch(e){}
noderec = GetItemRec(NUMRECMAJ); // Récupération du noeud selectionne et mise à jour des champs
MajChampItemRec(noderec); // Mise à jour des champs du noeud selectionne
if(oNode) // Insertion d'un noeud selon l'odre croissant
var oDoc = docElem.insertBefore(noderec,oNode); // oDoc = noderec si OK
else // Insertion d'un noeud en fin de liste si numero superieur auc autres
var oDoc = docElem.insertBefore(noderec,docElem.lastchild); // oDoc = noderec si OK
if(oDoc)
{
NUMRECMAJ = -1;
savexml(dbXML.xml,FILEDBABN); // Mise à jour de la base sur disque
}
}
MAXREC = dbXML.getElementsByTagName(ITEMTAGNAME).length;
}
function MajChampItemRec(noeudAbn)
{
if(!noeudAbn)
{
noderectmp = itemRecXML.cloneNode(true); //true = arborescence du noeud <video>...</video>
noderec = noderectmp.selectSingleNode("//abonne");
}
for(var j=0;j<noderec.childNodes.length;j++)
{
var champ = document.getElementById("TRREC0").all.tags("INPUT");
if(champ.item(j).id == LABELCOL[j]) // Contrôle supplémentaire selon le libellé
{ noderec.childNodes.item(j).text = champ.item(j).value;
champ.item(j).style.backgroundColor = "lightsteelblue";
} // Insertions des données selon la correspondance
}
}
function savexml(strXML,strFILEDB)
{
var Path = window.document.location.pathname;
var strPath = Path.substr(1,(Path.length - 1) - objFS.GetFileName(Path).length );
strPath = strPath.replace(/\\/g,"\\\\");
var objxmldoc = GetXMLDocument(strXML);
var objxmldocelem = objxmldoc.documentElement;
strPI = "<?xml version=\"1.0\" encoding=\"" + ENCODAGE + "\"?>"; // Ajout entête xml + Encodage
strXML = strPI + String.fromCharCode(13,10) + objxmldocelem.xml;
if(strFILEDB.match(/:\\/i))
var strSaveXML = strFILEDB;
else
var strSaveXML = strPath + strFILEDB;
strSaveXML = strSaveXML.replace(/%20/g," ");
try{
var objFile = objFS.OpenTextFile(strSaveXML, 2, true); // Création d'un nouveau fichier ASCII
objFile.Write(strXML);
objFile.Close();
}catch(e){ alert("Erreur de création sur : " + strSaveXML + "\n" + e.description + "\n\n" + " Vérifier que le répertoire existe"); return;}
}
function delitemrec()
{
if( document.getElementById("TRREC0").all.tags("INPUT").item(0).value != NUMRECMAJ )
{ alert("La suppression est réalisée qu'avec le numéro sélectionné.");return;}
var blnret = window.confirm("Suppression définitive du Numéro : " + NUMRECMAJ + " ?");
if(blnret == false) return;
var objnoderec = GetItemRec(NUMRECMAJ);
var docelem = dbXML.documentElement;
var xmlabn = docelem.removeChild(objnoderec);
savexml(docelem.xml,FILEDBABN)
/* Mise à jour compteur selon suppression dans la première PAGE ou dernière PAGE*/
MAXREC = dbXML.getElementsByTagName(ITEMTAGNAME).length;
if(CPTPG == MAXPG) // dernière PAGE
{
DEBINDEX--;
FININDEX--;
if( (FININDEX % PAGE) == 0)
CPTPG-- ;
}
initCPTPG(PAGE,MAXREC,CPTPG);
retourpg();
}
function AnnulerItemRec(){
ListSelectRec(NUMRECMAJ)
}
function selectItemRec()
{
txtNumero.value = document.getElementById(this.id).all.tags("INPUT").item(0).value
NUMRECMAJ = txtNumero.value;
ListSelectRec(txtNumero.value)
}
function numcode_onkeyup()
{
document.getElementById("TRREC0").all.tags("INPUT").item(0).style.backgroundColor = "darkgray";
var numero = document.getElementById("TRREC0").all.tags("INPUT").item(0).value;
if(isNaN(numero))
document.getElementById("TRREC0").all.tags("INPUT").item(0).value = numero.substring(0,numero.length - 1)
}
function colorbkover()
{
var champ = document.getElementById(this.id).all.tags("INPUT");
for(var i=1;i<champ.length;i++)
champ.item(i).style.backgroundColor = "white";
txtNumero.style.backgroundColor = "darkgray";
}
function colorbkout()
{
var champ = document.getElementById(this.id).all.tags("INPUT");
for(var i=1;i<champ.length;i++)
champ.item(i).style.backgroundColor = "darkkhaki";
var height = parseInt(video.style.height.substr(0,video.style.height.length - 2)) - 10;
}
function initCPTPG(ROWPAGE,NBREC,COMPTEUR) //Initialisation du compteur de PAGE
{
if(NBREC == 0) COMPTEUR = 0 ;
var nbpage = NBREC/ROWPAGE;
if(nbpage > parseInt(NBREC/ROWPAGE))
nbpage = parseInt(NBREC/ROWPAGE) + 1;
MAXPG = nbpage;
NBPG.innerHTML = COMPTEUR + " / " + MAXPG;
}
// un Document XML est crée à partir d'une syntaxe xml.
function GetXMLDocument(strXML)
{
var msxmldoc = new ActiveXObject("Msxml2.DOMDocument");
msxmldoc.async = false;
msxmldoc.resolveExternals = false;
msxmldoc.validateOnParse = false;
msxmldoc.loadXML(strXML) ;
return msxmldoc;
}
function retourpg()
{
divopt.innerHTML = "";
initCPTPG(PAGE,MAXREC,CPTPG);
if(MAXREC <= PAGE)
{
pgPrec.click();
}
else
{
delrec();
GetRec(DEBINDEX ,FININDEX,dbXML);
}
video.focus();
NUMRECMAJ = 0;
}
</SCRIPT>
<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
<!--
function window_onload() { // Initialisation variable,compteur de page et affichage d'une Page d'enregistrement
CreateDB(FILEDBABN); // Création d'une base vide si inexistant
DEBINDEX = 0;
FININDEX = PAGE;
MAXREC = dbXML.getElementsByTagName(ITEMTAGNAME).length;
initCPTPG(PAGE,MAXREC,CPTPG)
GetRec(DEBINDEX ,FININDEX,dbXML);
}
/* -------------------------[ COMPTEUR DE PAGE ]------------------
Description:
- Affiche une Page d'abonnée par tranche de 20(par défaut) .
Appel de fonction :
- pgSuiv() * Page suivante
- pgPrec() * Page précédente
- firstpg() * Première Page
- lastpg() * Dernière Page
-------------------------------------------------------------------*/
function pgSuiv_onclick() {
MAXREC = dbXML.getElementsByTagName(ITEMTAGNAME).length;
if(MAXREC <= PAGE) return;
divopt.innerHTML = "";
DEBINDEX = FININDEX;
FININDEX = DEBINDEX + PAGE; // PAGE = 20 par defaut
if(FININDEX > MAXREC)
{ DEBINDEX = MAXREC - PAGE;
FININDEX = MAXREC
CPTPG = MAXPG;
}
else
CPTPG++;
initCPTPG(PAGE,MAXREC,CPTPG);
delrec();
GetRec(DEBINDEX ,FININDEX,dbXML)
}
function pgPrec_onclick() {
divopt.innerHTML = "";
DEBINDEX -= PAGE;
FININDEX -= PAGE;
MAXREC = dbXML.getElementsByTagName(ITEMTAGNAME).length;
if(DEBINDEX < 0)
{ DEBINDEX = 0;
FININDEX = PAGE;
CPTPG = 1;
}
else
CPTPG--;
initCPTPG(PAGE,MAXREC,CPTPG);
delrec();
GetRec(DEBINDEX ,FININDEX,dbXML)
}
function firstpg_onclick() {
divopt.innerHTML = "";
DEBINDEX = 0;
FININDEX = PAGE ;
MAXREC = dbXML.getElementsByTagName(ITEMTAGNAME).length;
CPTPG = 1;
initCPTPG(PAGE,MAXREC,CPTPG);
delrec()
GetRec(DEBINDEX ,FININDEX,dbXML);
}
function lastpg_onclick() {
divopt.innerHTML = "";
MAXREC = dbXML.getElementsByTagName(ITEMTAGNAME).length;
if(MAXREC <= PAGE) return;
DEBINDEX = MAXREC - PAGE;
FININDEX = MAXREC;
CPTPG = MAXPG;
initCPTPG(PAGE,MAXREC,CPTPG);
delrec()
GetRec(DEBINDEX ,FININDEX,dbXML);
}
function txtNumero_onclick() {
txtNumero.select()
}
function txtNumero_onkeyup() {
if(isNaN(txtNumero.value))
txtNumero.value = txtNumero.value.substring(0,txtNumero.value.length - 1)
txtNumero.style.backgroundColor = "darkgray";
}
function txtNumero_onkeypress() {
if(window.event.keyCode == 13 && txtNumero.value != "")
{ window.event.returnValue = false;
NUMRECMAJ = txtNumero.value;
ListSelectRec(txtNumero.value);
}
}
// ------------ Nouveau abonne ----------
function addItemRec_onclick() {
if(NUMRECMAJ == -1)
{
var blnret = window.confirm("Annuler le travail en cours et créer un nouveau ?")
if(blnret == false) return;
}
NUMRECMAJ = -1
ListSelectRec(NUMRECMAJ)
}
function window_onmouseover() {
window.scrollTo(0,0)
}
//-->
</SCRIPT>
</HEAD>
<BODY bottomMargin=0 leftMargin=0 topMargin=0 rightMargin=0 background="" LANGUAGE=javascript
onload="return window_onload()" >
<TABLE align=center width="914" height="16" style="BACKGROUND-COLOR: darkgray"><TR><TD align=middle HEIGHT="16">
<FONT style="COLOR: white">*** LISTE DES ABONNES ***</FONT></TD></TR></TABLE>
<HR size=2 color=white>
<DIV align=center style="HEIGHT: 200px" id=DIV1>
<TABLE BORDER=1 style="FONT-WEIGHT: normal; LEFT: -8px; FONT-STYLE: normal; POSITION: relative; HEIGHT: 29px">
<THEAD>
<TR>
<TH style="WIDTH: 66px; HEIGHT: 22px" >Numéro</TH>
<TH style="WIDTH: 150px; HEIGHT: 22px" >Nom</TH>
<TH style="WIDTH: 114px; HEIGHT: 22px" >Prénom</TH>
<TH style="WIDTH: 205px; HEIGHT: 22px" >Adresse</TH>
<TH style="WIDTH: 89px; HEIGHT: 22px" >Code Postal</TH>
<TH style="WIDTH: 114px; HEIGHT: 22px" >Ville</TH>
<TH style="WIDTH: 114px; HEIGHT: 22px" >Téléphone</TH>
</TR>
</TABLE>
<DIV id="video" style="OVERFLOW-Y: scroll; WIDTH: 915px; BORDER-TOP-STYLE: inset; BORDER-RIGHT-STYLE: inset;
BORDER-LEFT-STYLE: inset; HEIGHT: 310px; BACKGROUND-COLOR: darkkhaki; BORDER-BOTTOM-STYLE: inset">
<TABLE id="TDBXML" BORDER=1 width=800 style="FONT-WEIGHT: normal; FONT-STYLE: normal" >
<TBODY id=TBODYREC >
</TBODY>
</TABLE>
<DIV id=divopt></DIV></DIV>
<IMG id=addItemRec SRC="img/icoabn.bmp" title="Nouveau abonné" ALIGN=center height=20 width=20
style="CURSOR: hand" LANGUAGE=javascript onclick="return addItemRec_onclick()"></IMG> </IMG>
<INPUT id=txtNumero name=txtNumero style="FONT-WEIGHT: bold; BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid;
BORDER-LEFT-STYLE: solid; BACKGROUND-COLOR: darkgray; TEXT-ALIGN: center; BORDER-BOTTOM-STYLE: solid"
align=middle LANGUAGE =javascript
onclick ="return txtNumero_onclick()"
onkeyup="return txtNumero_onkeyup()"
onkeypress="return txtNumero_onkeypress()"
title=Numéro size=16>
<HR align=center width=100>
<DIV align=center><IMG SRC="img/icofirst.bmp" style="WIDTH: 32px; CURSOR: hand; HEIGHT: 32px" height=32 id=firstpg
LANGUAGE=javascript onclick="return firstpg_onclick()" width=32>
<IMG language=javascript id=pgPrec style="WIDTH: 32px;
HEIGHT:32px" onclick="return pgPrec_onclick()" height=32 alt="" hspace=0 src="img/icol1.bmp" width=32 useMap="" border=0>
<IMG language=javascript id=pgSuiv style="WIDTH: 32px; CURSOR: hand; HEIGHT: 32px" onclick="return pgSuiv_onclick()"
height=32 alt="" hspace=0 src="img/icor1.bmp" width=32 useMap="" border=0 >
<IMG SRC="img/icolast.bmp" style="LEFT: 79px; WIDTH: 32px; CURSOR: hand; TOP: 0px; HEIGHT: 32px" height=32 id=lastpg
LANGUAGE=javascript onclick="return lastpg_onclick()" alt="" hspace=0 width=32 useMap="" border=0>
<BR><SPAN id=NBPG></SPAN></DIV>
</DIV>
<object id=objFS classid=clsid:0D43FE01-F093-11CF-8940-00A0C9054228 VIEWASTEXT></object>
<SCRIPT type="text/javascript" language="javascript">
<!--
function CreateDB(strFILEDB)
{
/* --------- Creation de la base si inexistant --------------*/
var Path = window.document.location.pathname;
var strPath = Path.substr(1,(Path.length - 1) - objFS.GetFileName(Path).length );
strPath = strPath.replace(/\\/g,"\\\\");
if(strFILEDB.match(/:\\/i) )
var strSaveXML = strFILEDB; // Base avec chemin absolu
else
var strSaveXML = strPath + strFILEDB; // Base avec chemin par défaut
strSaveXML = strSaveXML.replace(/%20/g," ");
if(objFS.FileExists(strSaveXML) == false)
savexml("<evideo></evideo>",strSaveXML)
/* -------- Affectation de la base au document XML ----------*/
dbXML.src = strSaveXML;
}
-->
</SCRIPT>
<xml ID="dbXML" ></xml>
<xml id="itemRecXML">
<abonne>
<num_abonne></num_abonne>
<Nom></Nom>
<Prenom></Prenom>
<Adresse></Adresse>
<Code_Postal></Code_Postal>
<Ville></Ville>
<Telephone></Telephone>
</abonne>
</xml>
<div align=center style="POSITION:relative;TOP:0%">
<hr width="90%" color=black SIZE=2>
<img alt="www.aufildutemps.new.fr" hspace=0 src="img/logo.png" vspace=0 border=0 ></div>
</BODY>
</HTML>
Conclusion
Le code est aussi disponible sur mon site : www.aufildutemps.new.fr
Historique
- 07 octobre 2007 19:39:44 :
- changement de l'image de capture
- 09 octobre 2007 20:10:54 :
- Ajout de commentaire supplémentaire.
- 21 octobre 2007 06:26:37 :
- Remplacement du zip existant
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
prob avec Javascipt et accssoirement xml [ par Thepp ]
Mon probl est 2 niveaux- je dispose d'un fichier xml et celui-ci ne comporte pas de rfrence un fichier Xsl (masque d'affichage), je voudrais trouver
a l'aide!!! xml big probleme!!! [ par jed35 ]
bonjour à tous.voilà je cherche un javascript qui permet d'afficher un élément xml par son id.en fait j'arrive à afficher un document xml sous forme "
XML+recherche javascript [ par leneo42 ]
Dites moi ce qui ne vas pas ?? je ne comprend plus bien la pourquoi ca va pas ???"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Lire fichier XML [ par indiana_jules ]
Bonjour,voilà, j'ai une petite question. Je sais qu'on peut en javascript lire dex fichiers XML, notamment en utilisant :var xmldoc = new ActiveXObjec
Kezako RSS ? [ par slachz ]
voilà tout est dans le titre !c koa RSS ? j'ai vus ça sur plusieurs sites (dont codes-sources) mais j'y comprend rien T_T (enfin je vois vite fait men
affichage recursif arbre XML [ par joenbl ]
J'aimerai afficher un fichier XML du type ci dessous en utilisant XSLT afin d'obtenir des menus déroulants (un peu comme l'affichage par défaut de IE
ecrire un fichier [ par daeron ]
Bonjour, j'ai récupéré un flux xml grâce à l'objet xmlhttprequest.Maintenant j'aimerai l'écrire dans un fichier de type xml pour l'utiliser plus tard.
Ecrire/Lire un fichier XML à partir d'un formulaire [ par sbertho ]
Je recherche des informations pour réussir à écrire les résultats d'un formulaire dans un fichier XML, puis de lire ces résultats pour les afficher.Es
lecture d un xml avec javascript et sauvegarde [ par glad777 ]
Bonjour a tous et a toutesj aimerai savoir comment faire pour avoir une fonction javascript qui puisse me lire un fichier xml, j ai lu un code avec va
jeu de memoire [ par gladysxxl ]
bonjour,petit souci avec le jeu de memoire ( http://www.javascriptfr.com/code.aspx?ID=22785 ) qui fonctionne tres bien en local mais lorsque je me le
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
UTILISER UN .JSUTILISER UN .JS par zaikoe
Cliquez pour lire la suite par zaikoe
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|