IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Connectivité : 4D et Sybase

Produit : 4D 2004, 4D v11 SQL, plugin 4D ODBC Pro · Plateforme : Mac & Win

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Configuration du driver ODBC Sybase

Après avoir installé le client Sybase, vous devriez obtenir, dans la liste des drivers, le driver ODBC de Sybase :

Image non disponible

Configurez une nouvelle source de données avec le driver Sybase et entrez les paramètres demandés selon la configuration de votre serveur Sybase :

Image non disponible

Testez vos paramètres en vous connectant au serveur :

Image non disponible

Si vous obtenez cette erreur :

Image non disponible

Retournez dans les paramètres du driver, onglet « Advanced », entrez « us_english » pour la langue, validez et retestez la connexion :

Image non disponible

Voilà notre source de données ODBC « SybaseTS » configurée :

Image non disponible

II. Exemples de code avec 4D ODBC Pro (4D 2004 et 4D v11 SQL)

Nous pouvons maintenant nous connecter et manipuler les données d'un serveur Sybase en utilisant le plugin 4D ODBC Pro.

Les plugins 4D sous forme de bundle (« plugin.bundle ») sont à placer dans le dossier « Plugins » soit à côté de la structure de la base de données, soit à côté de l'application 4D.

Ci-dessous, une suite de codes exemples simples pour différentes requêtes SQL vers le serveur Sybase.

II-1. SELECT

 
Sélectionnez
init_variables `méthode d'initialisation des variables

  `connexion
C_LONGINT($connectionID)
$result:=ODBC_SQLAllocConnect ($connectionID)
$result:=ODBC_SQLConnect ($connectionID;"SybaseTS";"sa";"")

If ($result=SQL_SUCCESS )  `Connexion OK
      ` allocation
    $result:=ODBC_SQLAllocStmt ($connectionID;$statementID)
      ` préparation de la requête
$sql_statement:="select peopleid, peoplename, peopledatecrea from people"
    $result:=ODBC_SQLPrepare ($statementID;$sql_statement)
      ` binding avec les colonnes de la table
    ARRAY LONGINT(ZeID;0)
    ARRAY TEXT(ZeName;0)
    ARRAY DATE(zeDate;0)
    $result:=ODBC_SQLBindCol ($statementID;1;->ZeID;->zeLength)
    $result:=ODBC_SQLBindCol ($statementID;2;->ZeName;->zeLength)
    $result:=ODBC_SQLBindCol ($statementID;3;->zeDate;->zeLength)
      ` exécution
    $result:=ODBC_SQLExecute ($statementID)
      ` récupération des données dans les deux tableaux
    While ($result#SQL_NO_DATA )
        $result:=ODBC_SQLFetch ($statementID)
    End while 
      `libération du curseur
    $result:=ODBC_SQLFreeStmt ($statementID;SQL_UNBIND )

Else 
    ALERT("Pas de connexion... !")
End if 

  `déconnexion
$result:=ODBC_SQLDisconnect ($connectionID)

II-2. INSERT

 
Sélectionnez
init_variables `méthode d'initialisation des variables

  `connexion
C_LONGINT($connectionID)
$result:=ODBC_SQLAllocConnect ($connectionID)
$result:=ODBC_SQLConnect ($connectionID;"SybaseTS";"sa";"")

If ($result=SQL_SUCCESS )  `Connexion OK
      ` allocation    
    $result:=ODBC_SQLAllocStmt ($connectionID;$statementID)
      ` on va créer 50 enregistrements dans la table people de Sybase, avec la date du jour
    For ($i;1;50)
          ` préparation de la requête
        $sql_statement:="insert into people (peopleid, peoplename, peopledatecrea) "
        $sql_statement:=$sql_statement+"values ("+String($i)+",'"+"people_"+String($i)+"',getdate())"
        $result:=ODBC_SQLPrepare ($statementID;$sql_statement)
          ` exécution        
        $result:=ODBC_SQLExecute ($statementID)
          ` libération du curseur
        $result:=ODBC_SQLFreeStmt ($statementID;SQL_UNBIND )
    End for 
    
Else 
    ALERT("Pas de connexion... !")    
End if 

  ` déconnexion
$result:=ODBC_SQLDisconnect ($connectionID)

II-3. UPDATE

 
Sélectionnez
init_variables `méthode d'initialisation des variables

  `connexion
C_LONGINT($connectionID)
$result:=ODBC_SQLAllocConnect ($connectionID)
$result:=ODBC_SQLConnect ($connectionID;"SybaseTS";"sa";"")

If ($result=SQL_SUCCESS )  `Connexion OK
      ` allocation
    $result:=ODBC_SQLAllocStmt ($connectionID;$statementID)
      ` mise à jour des colonnes 'job' et 'techno' pour tous les enregistrements de la table 'people'
      ` préparation de la requête
    $sql_statement:="update people set job = 1, techno = 1"
    $result:=ODBC_SQLPrepare ($statementID;$sql_statement)
      ` exécution
    $result:=ODBC_SQLExecute ($statementID)
      ` libération du curseur
    $result:=ODBC_SQLFreeStmt ($statementID;SQL_UNBIND )

Else 
    ALERT("Pas de connexion... !")
End if 

  ` déconnexion
$result:=ODBC_SQLDisconnect ($connectionID)

II-4. DELETE

 
Sélectionnez
init_variables `méthode d'initialisation des variables

  `connexion
C_LONGINT($connectionID)
$result:=ODBC_SQLAllocConnect ($connectionID)
$result:=ODBC_SQLConnect ($connectionID;"SybaseTS";"sa";"")

If ($result=SQL_SUCCESS )  `Connexion OK
      ` allocation    
    $result:=ODBC_SQLAllocStmt ($connectionID;$statementID)
      ` on supprime les lignes de la table people dont le nom est 'test'
      ` préparation de la requête
    $sql_statement:="delete people where peoplename='test'"
    $result:=ODBC_SQLPrepare ($statementID;$sql_statement)
      ` exécution        
    $result:=ODBC_SQLExecute ($statementID)
      ` libération du curseur
    $result:=ODBC_SQLFreeStmt ($statementID;SQL_UNBIND )

Else 
    ALERT("Pas de connexion... !")    
End if 

  ` déconnexion
$result:=ODBC_SQLDisconnect ($connectionID)

II-5. EXECUTE (procédure stockée)

Nous allons exécuter une procédure stockée présente sur le serveur Sybase.

La procédure stockée se nomme sp_fieldtypes et voici son code :

 
Sélectionnez
/* retourne tous les types de colonnes de Sybase */
create procedure ps_fieldtypes 
as 
begin 
    select name, length, allownulls 
    from master.dbo.systypes 
    return 0 
end

Exécution de la procédure Sybase sp_fieldtypes avec 4D ODBC Pro :

 
Sélectionnez
init_variables `méthode d'initialisation des variables

  `connexion
C_LONGINT($connectionID)
$result:=ODBC_SQLAllocConnect ($connectionID)
$result:=ODBC_SQLConnect ($connectionID;"SybaseTS";"sa";"")

If ($result=SQL_SUCCESS )  `Connexion OK
    
    $result:=ODBC_SQLAllocStmt ($connectionID;$statementID)
    $sql_statement:="EXECUTE ps_fieldtypes"
    $result:=ODBC_SQLPrepare ($statementID;$sql_statement)
    
      `binding
    ARRAY TEXT(ZeFTName;0)
    ARRAY TEXT(ZeFTLength;0)
    ARRAY BOOLEAN(ZeftAllowNulls;0)
    $result:=ODBC_SQLBindCol ($statementID;1;->ZeFTName;->zeLength) `colonne name
    $result:=ODBC_SQLBindCol ($statementID;2;->ZeFTLength;->zeLength) `colonne length
    $result:=ODBC_SQLBindCol ($statementID;3;->ZeftAllowNulls;->zeLength) `colonne allownulls
    
    $result:=ODBC_SQLExecute ($statementID)
    While ($result#SQL_NO_DATA )
        $result:=ODBC_SQLFetch ($statementID)
    End while 
    $result:=ODBC_SQLFreeStmt ($statementID;SQL_UNBIND )
    
    
Else 
    ALERT("no connection!!")
End if 

$result:=ODBC_SQLDisconnect ($connectionID)

III. Exemples de code avec le moteur SQL de 4D v11

Nous pouvons maintenant nous connecter et manipuler les données d'un serveur Sybase en utilisant le moteur SQL intégré à 4D v11 SQL.

Ci-dessous, une suite de codes exemples simples pour différentes requêtes SQL vers le serveur Sybase.

Les exemples ne sont applicables que pour la version 4D v11 SQL.

III-1. SELECT

 
Sélectionnez
init_variables `méthode d'initialisation des variables

UTILISER BASE EXTERNE("SybaseTS";"sa";"") `on se connecte au serveur Sybase

Si (OK=1)  `connexion OK
    TABLEAU ENTIER LONG(ZeID;0) `la variable qui sera bindée
    TABLEAU TEXTE(ZeName;0) `la variable qui sera bindée
    
    Debut SQL `encapsulation requête SQL
        SELECT peopleid, peoplename FROM people 
        INTO :ZeID, :ZeName
    Fin SQL

Sinon
    ALERTE("Pas de connexion !")
Fin de si

UTILISER BASE INTERNE  ` déconnecte de la base externe

III-2. INSERT

 
Sélectionnez
init_variables `méthode d'initialisation des variables

UTILISER BASE EXTERNE("SybaseTS";"sa";"")

Si (OK=1)  `connection OK

    Debut SQL `encapsulation requête SQL
        INSERT INTO people (peopleid, peoplename, peopledatecrea)
        VALUES (1, 'toto', getdate())
    Fin SQL

Sinon
    ALERTE("Pas de connexion !")
Fin de si

UTILISER BASE INTERNE  ` déconnecte de la base externe

III-3. UPDATE

 
Sélectionnez
init_variables `méthode d'initialisation des variables

UTILISER BASE EXTERNE("SybaseTS";"sa";"")

Si (OK=1)  `connection OK

    Debut SQL `encapsulation requête SQL
        UPDATE people SET job = 1, techno = 1 WHERE peoplename='toto'
    Fin SQL

Sinon
    ALERTE("Pas de connexion !")
Fin de si

UTILISER BASE INTERNE  ` déconnecte de la base externe

III-4. DELETE

 
Sélectionnez
init_variables `méthode d'initialisation des variables

UTILISER BASE EXTERNE("SybaseTS";"sa";"")

Si (OK=1)  `connection OK

    Debut SQL `encapsulation requête SQL
        DELETE people WHERE peoplename='toto'
    Fin SQL

Sinon
    ALERTE("Pas de connexion !")
Fin de si

UTILISER BASE INTERNE  ` déconnecte de la base externe

III-5. EXECUTE (procédure stockée)

 
Sélectionnez
init_variables `méthode d'initialisation des variables

UTILISER BASE EXTERNE("SybaseTS";"sa";"")

Si (OK=1)  `connexion OK
    TABLEAU TEXTE(ZeFTName;0) `la variable qui sera bindée
    TABLEAU TEXTE(ZeFTLength;0) `la variable qui sera bindée
    TABLEAU BOOLEEN(ZeftAllowNulls;0) `la variable qui sera bindée

    Debut SQL `encapsulation requête SQL
        EXECUTE ps_fieldtypes
        INTO :ZeFTName, :ZeFTLength, :ZeftAllowNulls
    Fin SQL

Sinon
    ALERTE("Pas de connexion !")
Fin de si

UTILISER BASE INTERNE  ` déconnecte de la base externe

IV. Notes

Nous traiterons les manipulations d'images et de blobs avec Sybase dans un prochain article.

V. Documentation

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Copyright © 2007 4D s.a. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.