Connectivité : 4D et Sybase
Date de publication : 08/11/2007
Par
Stéphanie Tirtiat (Intl Tech Support)
Produit : 4D 2004, 4D v11 SQL, plugin 4D ODBC Pro · Plateforme : Mac & Win
I. Configuration du driver ODBC Sybase
II. Exemples de code avec 4D ODBC Pro (4D 2004 et 4D v11 SQL)
1. SELECT
2. INSERT
3. UPDATE
4. DELETE
5. EXECUTE (procédure stockée)
III. Exemples de code avec le moteur SQL de 4D v11
1. SELECT
2. INSERT
3. UPDATE
4. DELETE
5. EXECUTE (procédure stockée)
IV. Notes
V. Documentation
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 :
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 :
Testez vos paramètres en vous connectant au serveur :
Si vous obtenez cette erreur :
Retournez dans les paramètres du driver, onglet "Advanced", entrez "us_english" pour la langue, validez et retestez la connection :
Voilà notre source de données ODBC "SybaseTS" configurée :
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.
1. SELECT
| code 4D |
init_variables `méthode d'initalisation 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)
|
2. INSERT
| code 4D |
init_variables `méthode d'initalisation 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)
|
3. UPDATE
| code 4D |
init_variables `méthode d'initalisation 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)
|
4. DELETE
| code 4D |
init_variables `méthode d'initalisation 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)
|
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 :
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 :
| code 4D |
init_variables `méthode d'initalisation 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.
|
1. SELECT
| code 4D |
init_variables `méthode d'initalisation des variables
UTILISER BASE EXTERNE("SybaseTS";"sa";"") `on se connecte au serveur Sybase
Si (OK=1) `connection 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 connection !")
Fin de si
UTILISER BASE INTERNE ` déconnecte de la base externe
|
2. INSERT
| code 4D |
init_variables `méthode d'initalisation 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 connection !")
Fin de si
UTILISER BASE INTERNE ` déconnecte de la base externe
|
3. UPDATE
| code 4D |
init_variables `méthode d'initalisation 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 connection !")
Fin de si
UTILISER BASE INTERNE ` déconnecte de la base externe
|
4. DELETE
| code 4D |
init_variables `méthode d'initalisation 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 connection !")
Fin de si
UTILISER BASE INTERNE ` déconnecte de la base externe
|
5. EXECUTE (procédure stockée)
| code 4D |
init_variables `méthode d'initalisation des variables
UTILISER BASE EXTERNE("SybaseTS";"sa";"")
Si (OK=1) `connection 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 connection !")
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


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