DUNOD2015 SQLfast

Affichages
De LIBD.
(Différences entre les versions)
m (ENGLISH VERSION)
m (ENGLISH VERSION)
Ligne 104 : Ligne 104 :
 
     <td valign=top>
 
     <td valign=top>
 
<tt><b>openDB</b> CLICOM.db;<br>
 
<tt><b>openDB</b> CLICOM.db;<br>
<b>select</b> NCLI,NOM <b>from</b> CLIENT;</tt>
+
<font color=blue><b>select</b> NCLI,NOM <b>from</b> CLIENT;</font></tt>
 
     </td>
 
     </td>
 
     <td valign=top>
 
     <td valign=top>
Ligne 184 : Ligne 184 :
 
<big>Comparing GUI code</big>
 
<big>Comparing GUI code</big>
  
<img align=center src="http://www.info.fundp.ac.be/~dbm/Documents/Tutorials/SQLfast/ThreeFieldBox.jpg">
+
<!--
 +
<img src="http://www.info.fundp.ac.be/~dbm/Documents/Tutorials/SQLfast/ThreeFieldBox.jpg">
 +
-->
 +
 
 +
[[Image:src="http://www.info.fundp.ac.be/~dbm/Documents/Tutorials/SQLfast/ThreeFieldBox.jpg]]
  
 
<table>
 
<table>
Ligne 201 : Ligne 205 :
 
<b>set</b> pid = PA60;<br>
 
<b>set</b> pid = PA60;<br>
 
<b>set</b> q  = 75;<br>
 
<b>set</b> q  = 75;<br>
<b>ask-u</b> oid,pid,q = [/bSaisie données DETAIL]<br>
+
<font color=blue><b>ask-u</b> oid,pid,q = [/bSaisie données DETAIL]<br>
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{COMMANDE}|IdCom:[!<b>select</b> NCOM <b>from</b> COMMANDE]<br>
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{COMMANDE}|IdCom:[!<b>select</b> NCOM <b>from</b> COMMANDE]<br>
&nbsp;&nbsp;&nbsp;&nbsp;||{PRODUIT}|IdPro:|Quantité:[(1,2,5,10,20,50)];<br>
+
&nbsp;&nbsp;&nbsp;&nbsp;||{PRODUIT}|IdPro:|Quantité:[(1,2,5,10,20,50)];</font><br>
 
</tt>
 
</tt>
 
     </td>
 
     </td>

Version du 10 octobre 2015 à 12:12

Page en construction


VERSION FRANCAISE (English version below)

  1. Qu'est-ce que SQLfast ?

Le nom SQLfast désigne, d'une part, un langage permettant de rédiger des scripts de manipulation de bases de données relationnelles, et d'autre part, un logiciel permettant à des utilisateurs tant novices qu'experts de développer, tester et exécuter des scripts SQLfast de toute nature et de complexité quelconque. Langage et logiciel SQLfast ont été conçus pour couvrir une large gamme de scénarios d'utilisation, depuis l'apprentissage (autonome ou supervisé) des bases de données et du langage SQL jusqu'au développement et à l'exploitation d'applications complexes.

Le langage SQLfast est une extension de SQL. Ses instructions comprennent, d'une part, les commandes SQL2 et d'autre part, des instructions d'échange de données avec l'utilisateur (boites de dialogue), des variables, des instructions de contrôle (if, for, while, procédures), des métadonnées ainsi que de riches bibliothèques de fonctions et d'interaction avec l'environnement. Un script peut être constitué d'une seule requête SQL mais des scripts complexes, tels que des gestionnaires de bibliothèques ou des générateurs de prototypes, peuvent comporter plusieurs milliers d'instructions (voire plusieurs centaines de millions pour des scripts de chargement de données).

Le langage SQL a été conçu dans un objectif de simplicité d'utilisation. A l'instar de son noyau, SQL, il offre une courbe d'apprentissage linéaire : un problème simple sera résolu en quelques lignes, dont la rédaction ne nécessite que quelques minutes d'apprentissage. Les arcanes des interactions avec les données (BD, fichiers, images) ainsi que celle des dialogues avec l'utilisateur sont entièrement cachées car gérées par le moteur SQLfast. Une boite de saisie de données constituée de trois champs est définie en 1 instruction SQLfast et exige plus de 100 instructions Python/Tkinter. De même, la consultation des données d'une table nécessite 2 instructions en SQLfast (openDB CLICOM.db; select * from CLIENT) mais plus de 23 instructions en Java/JDBC.

SQLfast est un logiciel dit portable, qui ne nécessite pas d'installation à proprement parler et qui ne modifie pas les paramètres du système sur lequel il fonctionne. Il peut notamment être installé, avec une collection de bases de données et de scripts, sur une clé USB transportable d'une machine à l'autre.

Le logiciel SQLfast offre une interface graphique particulièrement conviviale permettant aux utilisateurs novices d'apprendre et d'expérimenter le développement de requêtes SQL et plus généralement de scripts SQLfast. Il dispose d'une fonction d'aide programmable permettant la rédaction et l'intégration au logiciel de tutoriels personnalisés. Son interface se décline en trois variantes :

  • Learning SQL : familiarisation avec le concept de base de données et apprentissage du langage SQL.
  • Learning SQLfast : apprentissage de la programmation sur bases de données à l'aide du langage SQLfast.
  • SQLfast development : développement d'applications interactives en SQLfast.

Le logiciel SQLfast est économe en ressources. Avec tous ses composants (y compris les bibliothèques graphiques, le SGBD, les fichiers d'aide, des bases de données de test et quelques scripts de démonstration), il n'occupe guère plus de 15 Mo sur disque et tourne sans accroc sur des machines de faible puissance. Il est cependant évident que l'exploitation intensive de grandes bases de données (plusieurs centaines de Go) nécessitera des ressources plus importantes.

SQLfast est développé en Python 2.7, mais son utilisation ne nécessite pas la présence de l'environnement Python. Il inclut le SGBD SQLite 3.8.10 et la bibliothèque graphique standard Tkinter. La version actuellement disponible fonctionne sous les systèmes MS Windows à partir de XP.

Des versions tournant sous OS X et Linux ont été testées avec succès mais ne sont pas diffusées pour l'instant. Des versions basées sur MySQL et MS Access existent mais ne sont pas disponibles pour l'instant.


  2. Installation et démarrage

Le package d'installation comprend trois parties : le logiciel, le guide d'installation et une brève introduction à l'utilisation du logiciel.

  • SQLfast : le logiciel. Le logiciel SQLfast et ses ressources sont téléchargeables sous la forme d'une archive zip de 8 Mo (SQLfast.zip) qui contient un répertoire nommé (sans surprise !) SQLfast. L'installation consiste à placer ce répertoire sur un support quelconque tel que le disque C ou D, simplement sur le bureau ou encore sur une clé USB. Dès que la copie est réalisée, SQLfast est prêt à fonctionner (exécuter SQLfast.exe). L'archive est disponible ici. [dernière maj 2015-07-4]
  • SQLfast : Guide d'installation. Ce document fournit quelques conseils pour faciliter sa première utilisation. Ce guide est disponible ici. [dernière maj 2015-06-25]
  • SQLfast : Premiers pas. Ce document est une version pdf du fichier d'aide Menu>Getting started du logiciel SQLfast. Il décrit brièvement l'environnement offert par la fenêtre principale du logiciel SQLfast, ses fenêtres et leurs principales fonctions. Il introduit pas à pas l'utilisateur à la création, à l'exécution, à la correction et au sauvetage d'un premier script. Document disponible ici. [dernière maj 2015-06-25]


  3. Documentation sur SQLfast

Il existe deux sources principales de documentation concernant l'outil et le langage SQLfast : les documents de la fonction d'aide (Help) du logiciel et le tutoriel de SQLfast.

  • 3.1 Menu Help du logiciel SQLfast.
  • Menu Help>Getting started. Ce document décrit brièvement l'environnement offert par la fenêtre principale du logiciel SQLfast, ses fenêtres et leurs principales fonctions. Il introduit pas à pas l'utilisateur à la création, à l'exécution, à la correction et au sauvetage d'un premier script. Ce document est également disponible sous la forme d'un [document pdf] [dernière maj 2015-06-25]
  • Menu Help>Survival guide. Collection d'une quarantaine de modèles de scripts commentés permettant d'aborder en confiance la résolution de problèmes de toute nature, depuis la simple consultation d'une base de données jusqu'à la génération de code à partir des métadonnées d'une base de données. Ce document est également disponible sous la forme d'un [document pdf] [dernière maj 2015-07-4]
  • Groupe Help>SQLfast references. Des documents de référence relatifs au logiciel et au langage SQLfast.
  • SQLfast environment. Description détaillée de la fenêtre principale, de ses fenêtres secondaires et de leurs fonctions. [dernière maj 2015-06-25]
  • SQLfast commands. Liste des principales instructions du langage SQLfast, accompagnées d'une brève description et d'exemples. Ce document est majoritairement encore en anglais. Il constitue une synthèse du document SQLfast commands and parameters disponible sur le site de l'outil (SQLfast commands) [dernière maj 2015-06-20]
  • Help mini-language. Description et exemples du langage de rédaction de documents Help. Ce langage permet à l'utilisateur de modifier les documents existants et de développer ses propres documents, notamment des tutoriels personnels. [dernière maj 2015-06-25]
  • Groupe Help>SQLfast tutorials. Permet de sélectionner et d'activer les tutoriels développés par l'utilisateur. Un tutoriel est un fichier d'extension .tuto présent dans le répertoire courant des fichiers d'aide. Il est rédigé dans le mini-langage des fichiers d'aide.
  • 3.2 Le tutoriel de SQLfast. La page consacrée à SQLfast offre un tutoriel détaillé (en anglais) consacré à l'utilisation du langage et à la résolution de problème de natures variées. Les chapitres de ce tutoriel sont disponibles ici. [dernière maj 2015-05-11]

Les documents d'aide de SQLfast sont disponibles en français et en anglais (du moins le seront-ils lorsque leur rédaction et leur traduction seront terminées). Ils sont normalement localisés dans les répertoires par défaut SQLfastHelp_FR et SQLfastHelp_EN localisés dans le répertoire général SQLfast selon la langue désirée. Le répertoire courant est spécifié par le paramètre helpDirectory du fichier d'initialisation SQLfast.ini :

helpDirectory = SQLfastHelp_FR

ENGLISH VERSION

  1. What is SQLfast ?


  2. Installing SQLfast and Getting started


  3. SQLfast Documentation


Comparing DB access code

     SQLfast
     Java/JDBC

openDB CLICOM.db;
select NCLI,NOM from CLIENT;

import java.net.URL;
import java.io.*;
import ...;
import java.sql.*;
import java.util.*;
String url = "jdbc:interbase://server1/ORDERS.gdb";
String user ="myLogin";
String pw="myPassword";
String querySelect = "select NCLI,NOM from CLIENT"
String CiD;
String Cnam;
Class.forName("interbase.interclient.Driver");
Connection conn = DriverManager.getConnection(url,user,pw);
Statement stmt = conn.createStatement ();
ResultSet rs1 = stmt.executeQuery (query1);
System.out.println("NCLI, NOM");
while (rs.next()) {
      CiD = rs.getString("CustID");
      Cnam = rs.getString("Name");
      System.out.println(CiD + ", " + Cnam);
      }
rs.close();
stmt.close();
conn.close();

+------+-----------+
| NCLI | NOM       |
+------+-----------+
| B112 | HANSENNE  |
| C123 | MERCIER   |
| B332 | MONTI     |
| F010 | TOUSSAINT |
| K111 | VANBIST   |
| S127 | VANDERKA  |
| B512 | GILLET    |
| B062 | GOFFIN    |
| C400 | FERARD    |
| C003 | AVRON     |
| K729 | NEUMAN    |
| F011 | PONCELET  |
| L422 | FRANCK    |
| S712 | GUILLAUME |
| D063 | MERCIER   |
| F400 | JACOB     |
+------+-----------+
NCLI, NOM
B112,MERCIER
B332,MONTI
F010,TOUSSAINT
K111,VANBIST
S127,VANDERKA
B512,GILLET
B062,GOFFIN
C400,FERARD
C003,AVRON
K729,NEUMAN
F011,PONCELET
L422,FRANCK|
S712,GUILLAUME
D063,MERCIER
F400,JACOB





Comparing GUI code


Fichier:Src="http://www.info.fundp.ac.be/~dbm/Documents/Tutorials/SQLfast/ThreeFieldBox.jpg

     SQLfast
     Python/Tkinter

set oid = 30186;
set pid = PA60;
set q = 75;
ask-u oid,pid,q = [/bSaisie données DETAIL]
      {COMMANDE}|IdCom:[!select NCOM from COMMANDE]
    ||{PRODUIT}|IdPro:|Quantité:[(1,2,5,10,20,50)];

from Tkinter import *
import ttk
import sqlite3

def setComboBoxColors():
    styl = ttk.Style()
    styl.map("TCombobox",fieldbackground =
               [('!readonly','!focus','white'),
                ('readonly', '!focus','white')] )
    return

class EntryBox():

    def __init__(self,parent,title):
        self.Parent = parent
        self.Parent.title(title)
        self.mainFr = Frame(parent,relief=FLAT,bd=1)
        self.initial_focus = self.body()
        self.mainFr.pack(padx=5,pady=5)
        self.buttonbox()
        self.Parent.protocol("WM_DELETE_WINDOW",self.cancel)
        self.Parent.mainloop()
        return

    def body(self):
        M1 = Message(self.mainFr,text=Comment,
            font=('Helvetica',9,'bold'),anchor=W,
            justify=LEFT,relief=SUNKEN,bd=1,
            width=300)
        M1.grid(row=0,column=0,columnspan=4,padx=2,
            pady=2,ipadx=1,ipady=1,sticky=N+W+E)
        M2 = Message(self.mainFr,text="COMMANDE",font=("Helvetica",9,
            "bold"),anchor=W, justify=LEFT,
            bd=1,width=300)
        M2.grid(row=1,column=0,columnspan=2,pady=1,padx=3,sticky=W)
        Label(self.mainFr,text="IdCom:").grid(row=2,column=0,sticky=E)
        self.fr0v1 = StringVar()
        self.fr0e1 = ttk.Combobox(self.mainFr,width=15,
            height=20,state='readonly',
            textvariable=self.fr0v1)
        self.fr0e1.grid(row=2,column=1,
            pady=1,padx=3,sticky=W+E)
        self.fr0e1["values"] = vList1
        M3 = Message(self.mainFr,text="PRODUIT",
            font=("Helvetica",9,"bold"),anchor=W,
            justify=LEFT,bd=1,width=300)
        M3.grid(row=1,column=2,columnspan=2,pady=1,padx=3,sticky=W)
        Label(self.mainFr,text="IdPro:").grid(row=2,column=2,sticky=E)
        self.fr0e2 = Entry(self.mainFr,relief=SUNKEN,width=22)
        self.fr0e2.grid(row=2,column=3,
        pady=3,padx=3,sticky=W+E)
        Label(self.mainFr,text="Quantité:").grid(row=3,column=2,sticky=E)
        self.fr0v3 = StringVar()
        self.fr0e3 = ttk.Combobox(self.mainFr,width=15,
            height=20,textvariable=self.fr0v3)
        self.fr0e3.grid(row=3,column=3,
            pady=1,padx=3,sticky=W+E)
        self.fr0e3["values"] = vList2
        self.fr0v1.set(oid)
        self.fr0e2.insert(0,pid)
        self.fr0v3.set(q)
        self.Parent.bind("<Return>", self.ok)
        self.Parent.bind("<Escape>", self.cancel)
        setComboBoxColors()
        return

    def buttonbox(self):
        buttonFr = Frame(self.Parent)
        Ok = Button(buttonFr,text="OK",relief=RAISED,
            overrelief=SUNKEN,width=10,command=self.ok)
        Ok.pack(side=LEFT, padx=5, pady=5)
        Can = Button(buttonFr,text="Cancel",relief=RAISED,
            overrelief=SUNKEN,width=10,command=self.cancel)
        Can.pack(side=LEFT,padx=5,pady=5)
        buttonFr.pack()
        return

    def apply(self):
        ndx1 = self.fr0e1.current()
        if ndx1 > -1:
            actVal = vList1[ndx1]
        else:
            actVal = ""
        self.result.append(actVal)
        self.result.append(self.fr0e2.get())
        ndx3 = self.fr0e3.current()
        if ndx3 > -1:
            actVal = vList2[ndx3]
        else:
            actVal = self.fr0v3.get()
        self.result.append(actVal)
        return

    def ok(self,event=None):
        self.result = ["OK"]
        self.apply()
        self.Parent.destroy()
        self.Parent.quit()
        return

    def cancel(self,event=None):
        self.result = ["Cancel"]
        self.Parent.destroy()
        self.Parent.quit()
        return


conn = sqlite3.connect('CLICOM.db')
c = conn.cursor()
c.execute('select NCOM from COMMANDE order by NCOM')
vList1 = []
for row in c:
    vList1.append(row[0])
c.close()
root = Tk()
root.withdraw()
Comment = 'Saisie données DETAIL'
vList2 = [1,2,5,10,20,50]
BoxTitle = "[ User data entry ]"
oid = "30186"
pid = "PA60"
q = 75
d = EntryBox(root,BoxTitle)
DIALOGbutton = d.result[0]
if DIALOGbutton == 'OK':
    oid = d.result[1]
    pid = d.result[2]
    q = int(d.result[3])
print DIALOGbutton,oid,pid,q
c.close()
conn.close()

-->

Outils personnels