DB2/400, ODBC & VISUAL BASIC
 
 
 
 
 
ODBC
 
 
 

Si vous souhaitez accéder à la base de donnée AS/400, le plus simple est d'utiliser le driver ODBC (celui de Client Access) :

Dans le cas de l'AS/400, le driver livré avec Client/Access, va établir une session client Access.
  (QZDASOINIT dans QSYSWRK)
   
 

ATTENTION, pour utiliser ODBC vous devez avoir attribué à votre AS/400 un nom de base de données DRDA

par ADDRDBDIRE (wrkrdbdire permet de voir la liste des bases connues):

 
 

L'enchaînement  d'ODBC est le suivant
 
 

Votre application en VB (ou autre)
ODBC.DLL (routine Microsoft) 
CWBODBC.DLL 
Dialogue IP avec l'AS/400  
Réseau (lien Ethernet/ Token ring, ...) 
QZDASOINIT (IP) 
     jobs à démarrage anticipé 
DB2/400 (requête SQL) 

[génération du résultat] 

 

 

Dernier point (Important) toutes les requêtes transmises au driver sont à la syntaxe SQL, et les requêtes sont exécutées sur le serveur. (Ici l'AS)



 

 PARAMETRAGE

 

Le driver ODBC est automatiquement installé sur votre PC avec client Access.
 

Pour le paramétrer :

1/ définir une nouvelle source de données

dans le dossier client access choisir l'icône 


l'image suivante vous est affichée :
 

choisissez "ajouter" pour une nouvelle configuration

les applications PC ne connaissent que ce nom logique.
Sur l'AS/400, limitez cette notion à une bibliothèque ou à une application
(ce qui est souvent la même chose en ce qui concerne les fichiers)
 

Indiquez ici le nom logique de ce paramétrage (aucune incidence sur l'AS/400)
et le nom de votre AS/400.

et sur cet onglet, indiquez la (ou les) bibliothèques. [séparées par ";"].



 

les autres onglets sont d'utilisation moins fréquente et représentent :
 
 
 
Modules Paramétrages des SQL Packages 
(depuis la V3R1M3 ils peuvent être enregistrés sur le disque dur)
Performances paramètres de groupage (taille d'une E/S)
langue critères de tri (tenir compte ou pas des caractéristiques de la langue)
Autre connexion en lecture seule ou en lecture/écriture (facilement modifiable hélas!)
Conversion faut-il convertir (en ANSI) les fichiers avec CCSID 65535
format format des dates/heures, marque décimale et caractère de qualification ("." ou "/")
 
 
 
 
 
 
 

DÉVELOPPEMENT CLIENT/SERVEUR A L'AIDE DE VISUAL BASIC
 
 
 
Exemple : lorsque l'utilisateur clique avec le bouton gauche de la souris sur une zone de texte appelée Text1, la procédure Text1_Click est automatiquement exécutée. - La fenêtre de code qui permet l'édition du code source associé à un objet et à un événement. Cette fenêtre peut être ouverte en double-cliquant sur la feuille, ou en cliquant dans la barre de menu sur Affichage, Code (ou la touche f7).

- la fenêtre de création de menu qui permet de mettre à jour la barre de menu de la feuille active. Cette fenêtre peut être ouverte en cliquant dans la barre de menu sur Outils, Créateur de menus.

- la fenêtre de débogage qui permet d'afficher des données (variables, texte, ...) lors de l'exécution du programme, et facilite ainsi la mise au point de votre application. Cette fenêtre peut être ouverte en cliquant dans la barre de menu sur Affichage, Fenêtre Débogage.

 

ODBC et Visual Basic:

En VB4, il faut :

Passer un ordre OPENDATABASE pour établir la connexion

puis : passer une requête :


 

Manipulation d'une base de données en SQL

Options spécifie les options de contrôle du moteur Microsoft Jet (pour les accès ODBC, n'utilisez que la variable dbSQLPassThrough). Exemples de manipulation d'une base
VB et DB2/400

Vous pouvez (devez ?) utiliser pleinement les possibilités récentes de DB2/400
 

Exemple sur un Ajout d'enregistrement

    DB2_TEST.FRM

    Soit le formulaire de saisie de commande suivant :

==================================================

contenant ce code :

===================

Dim db As database  
Sub Exit_Click () 
 End 
End Sub  
Sub Form_Load () 
 screen.MousePointer = 11 
 Set db = OpenDatabase("Formation", False, False, "ODBC;LOGINTIMEOUT=240;") 
 (nom, (mode exclusif),(lecture seule),type de base,parametre (s).) 
 screen.MousePointer = 0 
End Sub  
Sub Ajouter_Click () 
 Dim insert As String  
 Dim retour As Long  
 screen.MousePointer = 11 
 insert = "INSERT INTO CDEENTP1 VALUES(" & NOCLI.Text 
 insert = insert & ", " & NOCDE.Text & ", '" 
 insert = insert & DATCDE.Text & "' , '" 
 insert = insert & datliv.Text & "')" 
 retour = db.ExecuteSQL(insert) 
 screen.MousePointer = 0 
 MsgBox Str$(retour) & "insere(s) dans le fichier commandes" 
End Sub  

Si vous avez mis en place l'intégrité référentielle, vous recevez le message suivant

Lors de l'ajout de la commande (bouton ajouter) :

=================================================


 


 

Procédures cataloguées

Un ensemble d'actions base de données devant être réalisées sur une base distante peut être demandé par l'appel à une procédure (un programme) stockée sur le serveur distant.

Cela normalise un ordre CALL (en tant qu'ordre SQL), avec passage de paramètres et ce en étant affranchi de l'OS du serveur.

Sur l'AS/400 les procédures cataloguées peuvent être écrites dans n'importe quel langage et leur déclaration est optionnelle, alors qu'avec ORACLE il ne peut s'agir que du PL/SQL et la procédure doit avoir été enregistrée.

Divers

Une procédure cataloguée invoquée par ODBC peut renvoyer explicitement un groupe d'enregistrement par :

SET RESULT SETS CURSOR xxx (le curseur xxx, résultat dune requête)

SET RESULT SETS ARRAY yyy (la table[tableau] yyy, chargée comme bon vous semble)

Exemple avec Le data Control DBGRID

Il faut d'abord définir un objet data control qui fait le lien avec la base de données en indiquant les propriétés suivantes :

1/ Table

- vous travaillez en direct sur le fichier et en mode mise à jour.(pas de sélection)

2/ Dynaset

- Index local pointant sur un fichier en mode mise à jour, vous pouvez faire des sélections et de la recherche

3/ Snapshot

- copie locale (ou extrait) du fichier sur le micro, vous êtes en consultation.
 
 

1/ Un nom de fichier (PF ou LF ou Vue)

2/ Un SELECT SQL

3/ Un appel à une procédure cataloguée
 
 
 

Puis l'objet DBGrid doit faire référence à data1 par la propriété DATASOURCE

(Data1 peut ne pas apparaître à l'exécution, comme tous les objets VB en indiquant Visible = False)

Examinons ensemble les trois méthodes pour la propriété Record source
 

A/ un nom de fichier

le contenu du fichier est chargé dans la grille.
 

B/ Un select SQL

Dim requete 
requete = "select * from AF400.af4mbrp1 where af4txt like '%" & Trim(Text1.Text) & "%'" 
Data1.Options = dbSQLPassThrough ' mode transparent pour un serveur 
Data1.RecordSource = requete 
Data1.Refresh 
End Sub 
   

C/ un appel à un programme RPG ou COBOL contenant du SQL

sous la forme «CALL BIB.PGM (param1, param2, ...)»

structure générale du pgm

DECLARE c1 CURSOR FOR SELECT ......

puis OPEN c1

et enfin SET RESULT SETS CURSOR c1

le curseur Ouvert constitue alors le jeu d'enregistrement renvoyé à l'application

 ATTENTION :

    la procédure DOIT avoir été déclarée par l'ordre SQL suivant

    create procedure VBCALL (:sujet CHAR(10))
    RESULT SETS 1
    (EXTERNAL NAME AF4SRCT/VBCALL
    LANGUAGE RPGLE SIMPLE CALL)
 

Sources :

Visual Basic

    Private Sub Command2_Click() 
     Dim requete 
     ' il faut passer le paramètre en lg fixe 
     Dim sujet As String * 10 
     sujet = Trim(Text1.Text) 
     Form1.MousePointer = 11 
     requete = "call AF4SRCT.VBCALL ('" & sujet & " ')" 
     Data1.Options = dbSQLPassThrough 
     Data1.RecordSource = requete 
     Data1.Refresh 
     Form1.MousePointer = 0 
    End Sub  

SQLRPGLE
 

 
 
 
OCX de Client Access

IBM a développédes objets à la norme OLE (des OCX) utilisables en VB pour manipuler :

Il faut charger l'objet OCX par Outils/Controles personnalisés et choisir parcourir

le fichier est dans « program Files\IBM\Client Access\Shared » et il s'appelle CWBCTRL.OCX

et le fichier d'aide est CWBCTRL.HLP dans « program Files\IBM\Client Access\mri2928 »

Vous devez voir apparaitre trois nouvelles icones dans la boite à outils
 

CWBSystemListBox

Charge automatiquement la liste des système

Propriétés remarquables

  • 0 = tous les systèmes configurés
  • 1 = Uniquement les systèmes connectés
  • 2= uniquement les systèmes non connectés Autres propriétés
  • Méthodes
  • GetItemText(CurrentSel) donne le nom du système choisi
  • (même utilisation que GetItemText) CWBRemoteCommandButton

    Passe une commande sur l'AS/400

    Propriétés remarquables

    Autres propriétés Méthodes CWBDataQueueTextBox

    Gestion des DTAQ

    Propriétés remarquables

    1 = Réception 2 <> 3 >= 4 > 5 =< 6 < Méthodes (val de comp, lg) pour un accès par clé (NULL, 0) pour un accès séquentiel