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.