Developpez.com

Plus de 2 000 forums
et jusqu'à 5 000 nouveaux messages par jour

Developpez.com - 4D
X

Choisissez d'abord la catégorieensuite la rubrique :


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.

idea 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 :

/* retourne tous les types de colonne 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 :
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.

idea 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

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

V. Documentation




Valid XHTML 1.1!Valid CSS!

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'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Contacter le responsable de la rubrique 4D