Présentation d'une SYNTHESE de l'emploi de SQL.
Vous pouvez télécharger la synthèse. Attention, cela concerne une utilisation PERSONNELLE de ce document, toute reproduction à des fins commerciales est formellement interdite.
Rappel : Enduser4gl emploie toute la puissance de Sql (microjet) : FRLevel1Sql.html
Si votre ordinateur ne possède pas la gestion de base de données : Attention : livré en standard avec Windows XP
Excel,Dbase,FoxPro,Access, vous devez Télécharger ODBC de Microsoft (gratuit)
pour utiliser les fonctions Query et Sql de EndUser4gl:
"http://www.microsoft.com/downloads/release.asp?ReleaseID=25917"
SQL :SYNTHESE D'APPRENTISSAGE
- Attribut : chaque " colonne " de la table est identifiée par un nom (attribut).
- Base de données relationnelles : rangée sous forme de " table " dont les recherches s'effectue à partir des données d'une colonne spécifique (clé) d'une ou des " lignes "(enregistrement) de la " table " (fichier). En exemple, lors d'une recherche dans la base de données relationnelles, on peut associer l'information d'une " colonne " à celle d'une " colonne " correspondante d'une autre " table " afin de produire un troisième rassemblement de certaines " colonnes " des deux tables.
- Clé : Attribut identifiant une ligne ou des lignes de la table;
- Colonnes (columns ) : ensemble de valeurs ou attributs liés à une " ligne " de la table;
- Données : chaque donnée élémentaire appartient à une colonne;
- Ensembliste : C'est la manipulation d'ensemble utilisant le schéma relationnel;
- Ligne (Rows) : Associée à des " colonnes " d'une table.
- Prédicat : expression d'une condition entre deux ou plusieurs constantes ou variables ou autres.
- S.Q.L : Structure Query Language
- S.G.B.D : Systéme de Gestion de Base de Données est un logiciel qui permet de créer,consulter,modifier et supprimer les données de la base.
- Table (table): ensemble de données représentant une structure identifiée par une clé associée à l'ensemble des valeurs ou " colonnes " d'une " ligne " (rows).
1.2 Définition et attendus principaux de S.Q.L :
Définition de S.Q.L : " est le nom générique d'une famille de langages de définition, de manipulation et de contrôle d'une base de données relationnelles " Extrait, Comprendre et évaluer S.Q.L, S.Miranda
1.2.1 Les principaux attendus sont :
1 - Langage de définition du schéma relationnel ou définitions des données ;
2 - Langage de manipulation de la base de données:
il comprend deux sous-ensembles :
- Le langage d'interrogation des données - SELECT -
- des sous-ensembles de commandes : INSERT- UPDATE- DELETE.
3 - Langage de contrôle de la base de données .
il comprend deux sous-ensembles :
- Le langage de contrôle des données - GRANT et REVOKE-
- des sous-ensembles de commandes : CREATE -ALTER-TRUNCATE-DROP- RENAME
1.2.2 Les dimensions de S.Q.L :
- Définition d'une base de données;
- Définition et modification du " schéma " d'une base de données relationnelles;
- Interrogation d'une base de données relationnelles;
- Contrôle de sécurité et d'intégrité de la base de données relationnelles.
1.3 Les différents types d'utilisateurs de S.Q.L :
Ce sont principalement :
- Un utilisateur final exprimant des besoins;
- Un responsable d'application ou un administrateur de base de données en charge de la création des tables et de leurs relations;
- Un développeur d'applications utilisant le langage SQL et un langage de quatrième génération.
C'est l' expression d'une condition entre deux ou plusieurs constantes ou variables ou autres.
C'est la manipulation d'ensemble utilisant le schéma relationnel.
1.6 Les règles de syntaxe SQL :
Les règles ci-après appartiennent au langage SQL
- Introduction;
- Opérations de projection;
- Opérations de sélection;
- Tri du résultat d'un SELECT;
- Expressions et fonctions;
- La jointure;
- Manipulation d'ensemble;
Nota :
| --> les barres verticales indiquent une alternative entre les options;
[ ] --> des crochets entourent des options facultatives;
.... --> des points de suspension représentent un certains nombres d'options;
SELECT | ALL | | DISTINCT | UNIQUE | | select-list |
FROM table-expr
[ WHERE search-condition ]
[ GROUP BY column-name, ... ]
[ HAVING search-condition ]
[ ORDER BY | expression | [ | ASC | ],]
| integer | | DESC|
select-list:
| expression [ AS alias-name ] |, ...
| table-name.* |
table-expr:
|table-spec |
|table-expr join-type table-spec
[ ON join-condition ] |
|( table-expr, ... ) |
table-spec:
[userid . ] table-name [ [AS] correlation-name]
search-condition :
expr rel-op expr
expr [NOT] BETWEEN expr AND
expr [NOT] in (items)
column_name [NOT] LIKE " string " [ESCAPE escape caractere]
column_name [NOT] MATCH " string " [ESCAPE escape caractere]
expr rel-op (ALL | [ANY | SOME] ( SELECT- statement)
expr [NOT] IN ( SELECT- statement)
[NOT] EXISTS ( SELECT- statement)
collumn-name IS [NOT] NULL
1.6.2 Opérations de projection:
1.6.2.1 Projection de toutes les colonnes :
SELECT * from mp30.POI .
Sélectionne toutes les colonnes de la table mp30.POI .
ou SELECT a.* from mp30.POI a .
1.6.2.2 Projection de colonnes d'une table :
SELECT org, nbr-order, vendor, .... from mp30.POI
ou SELECT a.org, a.nbr-order, a.vendor from mp30.POI a .
ou SELECT org[1,3], a.nbr-order, a.vendor from mp30.POI a .
Nota : [x,y] permet de selectionner une colonne à partir du caractère x sur y positions
ou [y] permet de selectionner une colonne à partir du caractère 1 sur y positions
Effectue une opération arithmétique
SELECT a.org, a,amount * 120.6 " MONTANT TTC ", a.vendor from mp30.POI a .
Affiche un intitulé de la colonne
SELECT a.org ORGANISATION, a.vendor FOURNISSEURS from mp30.POI a .
Affiche une constante pour chaque ligne trouvée.
SELECT a.org, a,amount * 120.6 " MONTANT TTC ", a.vendor from mp30.POI a .
1.6.3 Opérations de sélection:
1.6.3.1 Sélection de lignes d'une table
C'est l'utilisation d'un ou de plusieurs prédicat:
Nom de la colonne Opérateur Nom de la colonne
constante constante
expression expression
SELECT (projection)
FROM (nom de table)
WHERE prédicat
Exemple : Afficher toutes les lignes mp30.poi si l'organisation de mp30.poi est connu dans la table mp30.pom
SELECT a.org, a,amount * 120.6 " MONTANT TTC ", a.vendor, b.org
FROM mp30.POI a , mp30.pom
WHERE a.org = b.org
1.6.3.2 Les opérateurs de sélection :
= égal
!= différent
> supérieur
>= supérieur ou égal
< inférieur
<= inférieur ou égal
[NOT] BEETWEEN.... AND ..... [pas] entre .....et ...
[NOT] IN [pas] dans
[NOT] LIKE [pas] comme
IS NULL est indéfini
IS NOT NULL n'est pas indéfini
= | != | > | < | <=| >= ANY au moins 1
SOME
= | != | > | < | <=| >= ALL tout
Exemple : Afficher toutes les lignes mp30.poi si l'organisation de mp30.poi dont toutes les commandes sont comptrise entre 500000 et 1000000
SELECT a.org, a.amount * 120.6 " MONTANT TTC ", a.vendor
FROM mp30.POI a , mp30.pom b
WHERE a.mount BEETWEEN 500000 AND 1000000
Exemple 1 : afficher toutes les commandes dont le nom de l'acheteur commence par'B'
SELECT buyer, id-nbr-ordr, amount
FROM mp30.pom
WHERE buyer LIKE 'B%'
nota : % est un caractère " JOKER " de l'opérateur LIKE remplaçant de 0 à n caractères quelconques
Exemple 2 : afficher toutes les commandes dont le nom de l'acheteur comporte les lettres 'B' et 'X'
SELECT buyer, id-nbr-ordr, amount
FROM mp30.pom
WHERE buyer LIKE '%*BX' ESCAPE '*'
nota : le caractère précisé derrière la clause ESCAPE permet la recherche des 2 caractères " B " et " X " dans la chaine de caractères.
Nota : l'extension de l'opérateur est MATCHES -extension spécifique de " INFORMIX "-
Permet la recherche d'égalité entre la variable et le liste des valeurs
Exemple : Afficher toute les commandes en cours de confirmation
SELECT * FROM mp30.pom
WHERE stts-code in (" 01 " ," 08 " )
1.6.3.6 Opérateurs ANY, SOME et ALL :
Ils se combinent avec l'un des opérateurs arithmétiques
Exemple :
SELECT * FROM mp30.pom
WHERE stts-code = ANY (" 01 " ," 08 " )
l'opérateur ANY est équivalent à l'opérateur SOME
la condition ci-dessus =ANY est équivalente à la condition IN
1.6.3.7 Opérateur IS NULL et IS NOT NULL:
Rappel : NULL = non défini
Exemple : Affiche pour les demandes d'achats dont le fournisseur n'est pas renseigné
SELECT * from mp30.POM
WHERE vendor is NULL
1.6.4 Les prédicats multiples :
Intersection et union dans la selection par les opérateurs logiques AND et OR.
Exemple : Selection des toues les lignes commandes et entete de commande de la même organisation
SELECT a.org, a.amount * 120.6 " MONTANT TTC ", a.vendor
FROM mp30.POI a , mp30.pom b
WHERE a.mount BEETWEEN 500000 AND 1000000
AND a. org = b.org
Nota: Le " AND " est prioritaire sur le " OR "
1.6.5 Les tris d'un SELECT - ORDER BY- :
Les tris s'effectuent d'après les colonnes des tables de façon croissante(ASC) ou décroissante(DESC).
Exemple : tri des commandes par fournisseur et par numéro decommande DECROISSANT.
SELECT a.org,a.id-nbr-ordr, a.amount * 120.6 " MONTANT TTC ", a.vendor
FROM mp30.POI a , mp30.pom b
WHERE a.mount BEETWEEN 500000 AND 1000000
AND a. org = b.org
ORDER BY a.vendor, a. id-nbr-ordr DESC
ou ORDER BY 4,2 DESC
Tri implicite sur les colonnes et élimine les valeurs dupliquées .
Exemple : Afficher une ligne unique de la commande en ignorant les lignes détails de la commande
mp30.poi est la table des lignes détails d'une commande
SELECT DISTINCT id-nbr-ordr
FROM mp30.poi
Sélectionner sur une même ligne RESULTAT des informations issues de plusieurs tables
SELECT a.org, a,amount * 120.6 " MONTANT TTC ", a.vendor, b.org, b.
FROM mp30.POI a , mp30.pom b
WHERE a.org = b.org
deux tables : mp30.POI a , mp30.pom b
1.6.7 La Manipulations d'ensembles:
C'est la manipulation d'ensembles liés par plusieurs opérateurs et employant la clause SELECT.
Les régles sont identiques à celles déjà définies dans les opérations de projection .
SELECT * from mp30.poi
UNION
SELECT * from mp30.pom
1.6.7.1 Les sous interrogations:
evaluela sous interrogation de niveau le plus bas et interroge les niveaux supérieurs avec le résultat trouvé pour chaque niveau.
Exemple : affiche toutes les lignes détails des commandes dont l'entete de commande n'est pas en statut " non libérée.
SELECT a.nbr_id, a.code-sttss
FROM mp30.poi a
WHERE a.ssts not in ( select b.code-stts from mp30.poi b
WHERE b.sttts = (select ..........from
where .........)
1.6.7.2 Les sous interrogations multiples :
SELECT a.nbr_id, a.code-sttss, a.org
FROM mp30.poi a
WHERE a.ssts not in ( select b.code-stts from mp30.poi b
WHERE b.sttts = " 01 ")
AND a.org = (select ..........from
where .........)
1.6.7.3 Les interrogations complexes :
1.6.7.3.1 Opérateurs EXISTS ou NOT EXISTS :
Execute la condition principale selon qu'il existe au moins une ligne répondant
Exemple : affiche le nombre de couples Articles/Fournisseurs inconnus entre 2 tables .
SELECT count(*) INCONNU,
from mp30-vpm a
WHERE NOT EXISTS ( select b.part-nbr, b.vend-id
from mp30-pvv b
WHERE a.part_nbr = b.part_nbr
and a.vend-id = b.vend-id)
1.6.8 Les fonctions de groupe:
Ensemble de lignes regroupées selon un critére de regroupement
1.6.8.1 Liste des fonctions de groupe:
AVG (expr) moyenne
COUNT (expr) nombre
MAX (expr) valeur maxi
MIN (expr) valeur mini
SUM (expr) somme
1.6.8.1.1 La fonction AVG -moyenne -:
Exemple : Calcul la moyenne du chiffre d'affaire d'un fournisseur
SELECT a.vend_id ,
AVG(a.tot_hcur_amt) MOYENNE,
from mp30_pom a
1.6.8.1.2 La fonction SUM -somme -:
SELECT a.vend_id ,
SUM(a.tot_hcur_amt) TOTAL_CA,
from mp30_pom a
1.6.8.1.3 La fonction COUNT -nombre -:
Exemple : affiche le nombre de couples Articles/Fournisseurs inconnus entre 2 tables .
SELECT count(*) INCONNU,
from mp30-vpm a
WHERE NOT EXISTS ( select b.part-nbr, b.vend-id
from mp30-pvv b
WHERE a.part_nbr = b.part_nbr
and a.vend-id = b.vend-id)
1.6.8.2 Création de groupes -GROUP BY-:
Crée à partir d'un ensemble, des sous-ensembles définis.
Exemple : Affiche le nombre de commandes par fournisseur
SELECT a.vend_id, count(*) a.id_ordr_nbr
from mp30_pom a
GROUP BY a.vend_id
1.6.8.3 Selection de groupes - HAVING-:
Permet de sélectionner des groupes répondant à certains critéres.
Exemple : Affiche au moins 5 commandes par fournisseur
SELECT a.vend_id, count(*) a.id_ordr_nbr
from mp30_pom a
GROUP BY a.vend_id
HAVING count (*) > 4
Le verbe UPDATE permet de modifir une ou des colonnes d'une ou de plusieurs lignes
UPDATE table-name SET {column- name = expression [,...]
| {(col_list | * = (expr-list)}
[WHERE condition ]
Exemple : Pratiquer aux transitions de statut des commandes en " attente " en commande en " cours "
UPDATE mp30_pom
set code_stts = " 08 " WHERE code_stts in (" 00 ", "01 ")
ENDUSER4GL et SQL :
Pour utiliser les fonctions Query et Sql , vous devez télécharger le programme EndUser4gl :
|
Exemple : SQL EXCEL : Exemple simple et complet with endUser4gl *1 ) Récup des données d'un fichier Excel *2) generation Txt *3) appel automatique de Excel et conversion du fichier Texte en fichier Excel objectifs : *Recupérer des données d'un fichier Excel : 240 pays"; * lire le fichier Input : 10 lignes"; *Démultiplier les enregistrements lus par pays "; * et constituer un nouveau fichier Excel de 2400 lignes;
|
|
** ****************************************************************************************** * **EndUser4gl : Exemple d'un langage de4 génération ** ******************************************************************************************* ** ** Exemple : SQL EXCEL : Exemple simple et complet with endUser4gl ** 1 ) Récup des données d'un fichier Excel ** 2) generation Txt ** 3) appel automatique de Excel et dconversion Excel ** ** ******************************************** GLOBAL #Include "c:\EndUser4gl\4gl\hlp\IncludeSysEU\includesyseu.h" INTEGER : i,y, X ; CHAR : Filewrite:255 := "C:\EndUser4gl\Excel\Appli1TxtXls\report1.csv" ; CHAR : Table:countrytab:4 Occurs 500 ; CHAR : Table:zfa:10 Occurs 10,zpays:4; ** Structure Output file/fichier en sortie STRUCT : Ref { CHAR fa:10 , s1:1 :=";", fb: 10 , s2:1 :=";", fc:10 , s3:1 :=";", fd:10, s4:1 :=";", fe :10 , s5:1 :=";", ff:10 , s6:1 :=";", fg :10 , s7:1 :=";", fh:10, s8:1 :=";", fi:10, s9:1 :=";", ** tab s10:2 := "\\n" ; ** or return carriage } END_Global BEGIN_Main Tabledelete (Filewrite) ; SetFileAttribute(Filewrite:FILE_ATTRIBUTE_NORMAL); Fileopen(1,Filewrite,Write) Returning (X) ; Message_RETURN_CODE_FILEOPENW(X); DISPlay " " ; SetColorText(Hwdisplay:green,red) ; Display " SVP/Wait .... Formatting "; i :=1; SetColorText(Hwdisplay:black,yellow) ; display " Recupérer des données d'un fichier Excel : 240 pays"; display " lire le fichier Input : 10 lignes"; display " Démultiplier les enregistrements lus par pays "; display " et constituer un nouveau fichier Excel de 2400 lignes"; skip_line 3;
SetColorText(Hwdisplay:yellow,black ) ; display " to recover data of an Excel file : 240 pays"; display " Read file Input : 10 lines"; display " to gear down the recordings read by country "; display " and to constitute a new Excel file of 2400 lines";
** Recupérer des données d'un fichier Excel ** to recover data of an Excel file
skip_line 3; Display "Wait.........";
SetVerSQL{Xls}("Excel 97/2000"); SetVerDriverSQL{Xls}("790"); SetEnvDatabaseSQL{Xls}("C:\EndUser4gl\Excel\Appli1TxtXls\pays.xls"); ExecuteSQLFetch{Xls}(" SELECT * From [Feuil1$] ") ForEachRowFind : ** save into table memory Countrytab[i] := GetDataColumn: 1,CHAR; ** Colonne 1 du fichier Excel /Column 1 Excel file zpays := Countrytab[i]; ** display " pays.. :",zpays, " i : ",i; i++; END_ForEachRow; ** --------------------------------------------------------------------------------- ** ** SELECT ** --------------------------------------------------------------------------------- ** ** ** Recupérer des données d'un fichier Excel ** to recover data of an Excel file ** Démultiplier les enregistrements lus par pays ** to gear down the recordings read by country **
SetVerSQL{Xls}("Excel 97/2000"); SetVerDriverSQL{Xls}("790"); SetEnvDatabaseSQL{Xls}("C:\EndUser4gl\Excel\Appli1TxtXls\Input.xls"); ExecuteSQLFetch{Xls}(" SELECT * From [Feuil1$] ") ForEachRowFind : ** save into memory zfa[1] := GetDataColumn: 1,CHAR; ** Colonne 1 du fichier Excel /Column 1 Excel file zfa[2] := GetDataColumn: 2,CHAR; zfa[3] := GetDataColumn: 3,CHAR; zfa[4] := GetDataColumn: 4,CHAR; zfa[5] := GetDataColumn: 5,CHAR; zfa[6] := GetDataColumn: 6,CHAR; zfa[7] := GetDataColumn: 7,CHAR; zfa[8] := GetDataColumn: 8,CHAR; zfa[9] := GetDataColumn: 9,CHAR; zfa[10] := GetDataColumn: 10,CHAR; for(y :=1 ;y < i;y++) begin_for ref.fa := zfa[1]; ref.fb := zfa[2]; Ref.fc := zfa[3]; Ref.fd := zfa[4]; Ref.fe := zfa[5]; Ref.ff := Countrytab[y]; Ref.fg := zfa[7]; Ref.fh := zfa[8]; Ref.fi := zfa[9];
Fileadd(1,Ref) Returning (X); ** add txt file End_for; END_ForEachRow; Fileclose(1); DestroyEnvSql(); Display "end........"; ** ** Appel Excel/Call Excel ** Connect_MSEXCEL("C:\EndUser4gl\Excel\Appli1TxtXls\Input.xls":Visible); Connect_MSEXCEL(Filewrite:Visible); ** bye, bye.. END_Main /* ******************************** PROCEDURES *************************************** */ PROC Message_RETURN_CODE_FILEOPENW(INTEGER U) BEGIN_Procedure CASE_OF U WHEN 1 : Display " Impossible : read only : file is open by other pgm ",U Column 70 ;exit_pgm(); END_When;
WHEN 2 : Display " path or file no exist or not read only ",U ,FileWrite ; exit_pgm(); END_When;
Otherwise : Display " Open File Ok " ,U Column 60; END_Case ; END_Procedure
|
autre exemple : un Multi FILTRE EXCEL avec envoi automatique du fichier par mail
|
** Exemple : SQL Project by ENDUSER4GL ** ***************************************************************************************** #Include "c:\EndUser4gl\4gl\hlp\IncludeSysEU\includesyseu.h"
INTEGER : Msgsql,X,Messagsql,i; char : file1:255 := "C:\EndUser4gl\Excel\Appli2Filter\InputFilter.xls" ,wcci:128 := "";
char : Filewrite:255 := "C:\EndUser4gl\Excel\Appli2Filter\OutputFilter.xls" ; STRUCT : Ref { CHAR fa:10 , s1:2 :="\\t",** ou appuyer sur la touche TAB fb:20 , s2:2 :="\\t", fc:20 , s3:2 :="\\t", fd:20 , s4:2 :="\\t", fe :20 , s5:2 :="\\t", ff :20 , s6:2 :="\\t", s10:2 :="\\n" ; ** ou appuyer sur la touche return (entrée) } Tableexist(Filewrite) returning (x) ;
/* 2 return codes */ ** x = 0 : Ok , x = 1 Not ok */ if (x void) then Tabledelete (Filewrite) ; Display " TableDelete Ok " ,Filewrite Column 60; ELSE Display "Table Delete Not find"; END_If ;
SetFileAttribute(Filewrite:FILE_ATTRIBUTE_NORMAL); Fileopen(1,Filewrite,Write) Returning (X) ;
** save/copy file ** Fichier de la J-1 ** SetColorText(Hwdisplay:black,green) ; skip_line 3; Display" CHECK FILTER..: Begin";
** **************************************************************************************** SetVerSQL{Xls}("Excel 97/2000"); SetVerDriverSQL{Xls}("790"); display"1 file :",file1 ; setEnvDatabaseSQL{Xls}(file1); i :=0; ** Recherche ** permet de regrouper plusieurs critérés dans 1 seul fichier de sortie ** several criteria in 1 only output file ExecuteSQLFetch{Xls}(" SELECT * From [Feuil1$] WHERE ([Feuil1$].NOM LIKE '%DUPONT%') or ([Feuil1$].NOM LIKE '%DURAND%') or ([Feuil1$].NOM LIKE '%TOTO%') or ([Feuil1$].NOM LIKE '%SIMON%') ") ForEachRowFind : ref.fa := GetDataColumn: 1,CHAR; ref.fb := GetDataColumn: 8,CHAR; Ref.fc := GetDataColumn: 9,CHAR; Ref.fd := GetDataColumn: 10,CHAR; Ref.fe := GetDataColumn: 11,CHAR; ref.ff := "\\t"; Fileadd(1,Ref) Returning (X); i++; END_ForEachRow;
DestroyEnvSql(); Fileclose(1); ** ** envoyer le fichier ........ ** send file ** If (i > 0) then SendMailExt("bergoux@wanadoo.fr", "bergoux@wanadoo.fr", "bergoux@wanadoo.fr",Filewrite, "Suivi Filtre avec un automate..", "Automate ... Nouveau fichier de suivi AUTOMATISE : check + Envoi Mail \\n Ph Bergougnoux \\ liste des Teams : dupont,durand,toto,simon",$DIALOGOUTLOOK:1); end_if; display"appuyer sur une touche p/terminer :" ; enter;
Connect_MSEXCEL(file1:Visible); Connect_MSEXCEL(Filewrite:Visible); |
autre exemple : une jointure EXCEL : rechercher dans 3 fichiers Excel et 1 Seule Feuille Excel avec envoi automatique du fichier par mail
|
** Exemple : SQL avec Excel and endUser4gl ** ***************************************************************************************** ** Cet exemple permet de fusionner plusieurs fichiers Excel en 1 seul ** + ** crée un fichier Excel avec un critère : regrouper tous les DUPONT trouvés dans 1 seul fichier ** + envoi un mail du fichier DUPONT ** ** This example makes it possible to only amalgamate several Excel files into 1 ** + creates an Excel file with a criterion: to gather all DUPONT found in 1 only file ** Send Mail Dupont file
#Include "c:\EndUser4gl\4gl\hlp\IncludeSysEU\includesyseu.h"
char : file1:255 := "C:\EndUser4gl\Excel\Appli3Fusion\Input1.xls" ; char : file2:255 := "C:\EndUser4gl\Excel\Appli3Fusion\Input2.xls" ; char : file3:255 := "C:\EndUser4gl\Excel\Appli3Fusion\Input3.xls" ;
INTEGER : Msgsql,X,Messagsql,i; CHAR : Table1:255 := "C:\EndUser4gl\Excel\Appli3Fusion\OutputFusion.xls" ; char : Filewrite:255 := "C:\EndUser4gl\Excel\Appli3Fusion\OutPutDupont.xls" ;
STRUCT : Ref { CHAR fa:10, s1:2 :="\\t",** ou appuyer sur la touche TAB fb: 15 , s2:2 :="\\t", fc:12 , s3:2 :="\\t", fd:10, s4:2 :="\\t", fe :20 , s5:2 :="\\t", s10:2 :="\\n" ; ** ou appuyer sur la touche return (entrée) }
Tableexist(Table1) returning (x) ;
DISPlay "....." ; SetColorText(Hwdisplay:black,yellow) ; display "Fusion : Excel";
/* 2 return codes */ ** x = 0 : Ok , x = 1 Not ok */ if (x void) then Tabledelete (Table1) ; Display " TableDelete Ok " ,Table1 Column 60; ELSE Display "Table Delete Not find"; END_If ; SetFileAttribute(Filewrite:FILE_ATTRIBUTE_NORMAL); Fileopen(1,Filewrite,Write) Returning (X) ;
SetColorText(Hwdisplay:red,blue) ;
Display " Cet exemple permet de fusionner plusieurs fichiers Excel en 1 seul"; Display " + "; Display "crée un fichier Excel avec un critère : regrouper tous les DUPONT trouvés dans 1 seul fichier"; Display "envoi un mail du fichier DUPONT"; skip_line 3; SetColorText(Hwdisplay:green,black ) ; Display "This example makes it possible to only amalgamate several Excel files into 1"; Display " + "; Display "creates an Excel file with a criterion: to gather all DUPONT found in 1 only file "; Display "Send a mail Dupont file";
** **************************************************************************************** i:=0; SetVerSQL{Xls}("Excel 97/2000"); SetVerDriverSQL{Xls}("790"); display"1 file :",file1 ; setEnvDatabaseSQL{Xls}(file1);
ExecuteSQL{Xls}(" SELECT [Feuil1$].NOM as 'NAME1' ,[Feuil1$].Prenom as 'Prenom/surname' , [Feuil1$].VILLE as 'Ville/town' ,[Feuil1$].PAYS as 'Pays/Contry' into C:\EndUser4gl\Excel\Appli3Fusion\OutputFusion.Input1 from [Feuil1$] ") returning(x); ExecuteSQLFetch{Xls}(" SELECT * From [Feuil1$] WHERE [Feuil1$].NOM LIKE '%DUPONT%' ") ForEachRowFind : ref.fa := GetDataColumn: 8,CHAR; ref.fb := GetDataColumn: 9,CHAR; Ref.fc := GetDataColumn: 10,CHAR; Ref.fd := GetDataColumn: 11,CHAR; Ref.fe := "File INPut1";
i++;
Fileadd(1,Ref) Returning (X);
END_ForEachRow;
DestroyEnvSql(); ** ****************************************************************************************
SetVerSQL{Xls}("Excel 97/2000"); SetVerDriverSQL{Xls}("790"); display"2 file :",file2 ; setEnvDatabaseSQL{Xls}(file2); ExecuteSQL{Xls}(" SELECT [Feuil1$].NOM as 'NAME1' ,[Feuil1$].Prenom as 'Prenom/surname' , [Feuil1$].VILLE as 'Ville/town' ,[Feuil1$].PAYS as 'Pays/Contry' into C:\EndUser4gl\Excel\Appli3Fusion\OutputFusion.Input2 from [Feuil1$] ") returning(x); ExecuteSQLFetch{Xls}(" SELECT * From [Feuil1$] WHERE [Feuil1$].NOM LIKE '%DUPONT%' ") ForEachRowFind : ref.fa := GetDataColumn: 8,CHAR; ref.fb := GetDataColumn: 9,CHAR; Ref.fc := GetDataColumn: 10,CHAR; Ref.fd := GetDataColumn: 11,CHAR; Ref.fe := "File INPut2"; i++; Fileadd(1,Ref) Returning (X); END_ForEachRow;
DestroyEnvSql(); ** ****************************************************************************************
SetVerSQL{Xls}("Excel 97/2000"); SetVerDriverSQL{Xls}("790"); display"3 file :",file3 ; setEnvDatabaseSQL{Xls}(file3); ExecuteSQL{Xls}(" SELECT [Feuil1$].NOM as 'NAME1' ,[Feuil1$].Prenom as 'Prenom/surname' , [Feuil1$].VILLE as 'Ville/town' ,[Feuil1$].PAYS as 'Pays/Contry' into C:\EndUser4gl\Excel\Appli3Fusion\OutputFusion.Input3 from [Feuil1$] ") returning(x); ExecuteSQLFetch{Xls}(" SELECT * From [Feuil1$] WHERE [Feuil1$].NOM LIKE '%DUPONT%' ") ForEachRowFind : ref.fa := GetDataColumn: 8,CHAR; ref.fb := GetDataColumn: 9,CHAR; Ref.fc := GetDataColumn: 10,CHAR; Ref.fd := GetDataColumn: 11,CHAR; Ref.fe := "File INPut3"; i++; Fileadd(1,Ref) Returning (X); END_ForEachRow;
DestroyEnvSql(); Fileclose(1); If (i >0) then SetColorText(Hwdisplay:red,BLACK ) ; display "trouvé/find..DUPONT :",i ; display " appuyer sur une touche ENTREE..pour CONTINUER"; ** envoyer un mail pour KO SendMailExt("bergoux@wanadoo.fr", "bergoux@wanadoo.fr", "bergoux@wanadoo.fr",Filewrite, "Suivi des DUPONT avec un automate..: Philippe.. ", "Automate Check DUPONT Nouveau fichier AUTOMATISE : check + Envoi Mail \\n Philippe ",$DIALOGOUTLOOK:1); enter;
end_if; DISPLAY "END.......... ."; Display "appuyer sur entrée p/terminer"; enter; MSEXCEL_Connect(table1:Visible); MSEXCEL_Connect(Filewrite:Visible);
|
voir l'Intégralité du site Web Enduser4gl chez vous
pour
199 Euros
ttc
(Oct
2004)
(Réception du CD sous 48 heures)
(plusieurs langues/devises possibles)
ou envoyer un chèque à l'adresse suivante :
Bergougnoux Consulting
14 rue Jean Moulin
37550 St Avertin.
( Facture +Tva en retour pour justificatif )
