Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > AS/400
AS/400 Le Forum d'entraide sur IBM AS/400 - iSeries. RPG.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 09/02/2010, 14h49   #1
Invité de passage
 
Inscription : février 2010
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 10
Points : 0
Points : 0
Par défaut Import tables AS400 avec index dans MS Access

Bonjour a tous,

ce post fait suite a un precedent : ici

Je cherche a importer de grandes quantites de donnees de l'AS400 pour les retravailler dans Access. A date j'utilise client access pour extraire les donnees (en fichier txt), mais malheureusement pas les indexs... Mes connaissances informatiques se limitant a du sql de base et vba, je ne sais pas comment le faire de facon securisee (et rapide) directement dans Access via odbc, pouvez vous me renseigner ?

Par avance merci pour votre aide.

FMB
flodu42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2010, 16h41   #2
Membre Expert
 
Homme
Inscription : mai 2002
Messages : 1 199
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 199
Points : 1 863
Points : 1 863
Bonjour,

Je ne comprend pas bien ce que tu veux faire ?

Un index c'est un fichier logique, qui est une représentation de certaine colonne de ta table sur lequel il est associé (en gros ).

Si tu fais une extraction de donnée tu as déjà toute les données utile non ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2010, 17h01   #3
Invité de passage
 
Inscription : février 2010
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 10
Points : 0
Points : 0
Pardon je ne suis peut être pas tres clair : je souhaite manipuler une quantite importante de données dans Access. A date, j'extrais en fichier txt via client access, puis j'importe dans une table formatée et indexée d'Access, ds le but d'accelerer le traitement par la suite... mais du coup je traite deux fois l'information (un export plus un import).
Mon souhait serait de trouver un moyen d'extraire en meme temps les donnees et les caracteristiques des tables pour gagner du temps.

En esperant avoir ete plus clair

Merci
flodu42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2010, 19h00   #4
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 601
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 601
Points : 2 066
Points : 2 066
Envoyer un message via Skype™ à Hédhili Jaïdane
Bonjour.

Quand tu es sous MS Access tu fais :
- ouvrir
- change le type de fichier en ODBC Database () (fenêtre du bas)
- Onglet "Source de données machine"
- bouton "Nouveau"
- "source de données système"
- "Client Access ODBC Driver (32 bits)
- Terminer
- dans l'onglet Général, complète les champs nom source et système et éventuellement, modifie les options de connexion (user et mot de passe)
- dans l'onglet Conversion, coche Conversion des données binaires
- ok
- choix de la table, le nom de la ressource sera ajoutée dans la fenêtre de tes choix des formats de fichiers
- double clic et le tour est joué.

Je l'avais fait avant et je m'en rappelais plus. Je viens de le refaire et ça marche.

Bonne chance.
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2010, 20h16   #5
Invité de passage
 
Inscription : février 2010
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 10
Points : 0
Points : 0
Merci pour cette reponse, mais en fait j'aurai voulu pouvoir faire mes traitements en local, et non pas directement sur le serveur de production...

Du coup j'ai essayé d'importer la totalite de la table en utilisant le lien créé mais le volume est certainement trop important ("ODBC Query Timeout Property: SQL0666 Estimated Query Processing Time Exceeds Limit")

Sur un site, il y a des elements de reponses, mais l'import se faisant ligne a ligne, il est treeees long... Comment puis je modifier le code pour que l'import se fasse plus rapidement ?

Edit : voici le code dudit site :

Citation:
Option Compare Database
Public Function Imp_CA()

‘ Variables de connexion ADO

Dim CnnAs400 As ADODB.Connection
Dim RsAs400 As ADODB.Recordset
Dim Cnndb As New ADODB.Connection
Dim Rsdb As New ADODB.Recordset
Dim strTabSupprimer As String
Dim strSQL As String
Dim i As Integer
Dim fld As ADODB.Field

' Variables paramètres

Dim Dat As String 'Variable Date de bon
Dim Nas As String 'Variable nom de l'As400
Dim Nus As String 'Variable nom utilisateur
Dim Cus As String 'Variable Code Utilisateur

' Attribue des valeurs aux variables
' Transforme le contrôle date du formulaire d'accueil par exemple 24/10/06 en texte de 6 caractères 061024

Dat = Right(Form_Frm_Accueil.[Txt_DateBon], 2) & Mid(Form_Frm_Accueil.[Txt_DateBon], 4, 2) & Left(Form_Frm_Accueil.[Txt_DateBon], 2)

' Les trois variables suivantes vont chercher leurs valeurs dans la table « Paramètres »

Nas = Nz(Dlookup("Nom_AS400", "Tbl_Parametres"))
Nus = Nz(Dlookup("Identifiant", "Tbl_Parametres"))
Cus = Nz(Dlookup("Mot_Passe", "Tbl_Parametres") )

' Nous supprimons les données de la table "Tbl_Import_Ca"

DoCmd.SetWarnings False
strTabSupprimer = "DELETE * FROM [Tbl_Import_Ca];"
DoCmd.RunSQL strTabSupprimer
DoCmd.SetWarnings True

' Nous lançons la connexion.

Set CnnAs400 = CreateObject("ADODB.connection")
CnnAs400.Open "provider=IBMDA400;data source=" & Nas & "", Nus, Cus
' Attention à l'orthographe, sinon galère
Set Cnndb = CurrentProject.Connection
Set RsAs400 = CreateObject("ADODB.recordset")
RsAs400.ActiveConnection = CnnAs400

'Nous créons la Requête.

strsql = " " & _
" SELECT T01.NOBON ,T01.COVEN ,T01.BONDA||T01.BONDM||T01.BONDJ ," &_
" T01.COCLI ,T01.MOBON ,T02.NOVEN " & _
" FROM GESTCOM.AVENTP1 T01 " & _
"JOIN GESTCOM.BVENDP1 T02 " & _
" On T01.COVEN = T02.COVEN " & _
" WHERE (T01.BONDA||T01.BONDM||T01.BONDJ = '061025' AND " & _
"T01.COVEN = ' V12' "

' Pour avoir notre champ Date1 nous faisons une concaténation et nous mettons dans la condition Where une date quelconque, car l'As400 n'accepte pas directement la variable. ‘Nous ‘remplaçons la valeur bidon de la date par le contenu de la variable

strsql = Replace(strsql, "'061025'", Chr(39) & Dat & Chr(39))
RsAs400.Open strsql
Do Until RsAs400.EOF
i = 1
For Each Fld In RsAs400.Fields
Select Case i
Case 1
Champ1 = Fld.Value
Case 2
Champ2 = Fld.Value
Case 3
Champ3 = Fld.Value
Case 4
Champ4 = Fld.Value
Case 5
Champ5 = Fld.Value
Case 6
Champ6 = Fld.Value
Case Else
End Select
i = i + 1
Next Fld

If Rsdb.State = 0 Then

' Ouverture de la table et remplissage

Rsdb.Open "[Tbl_Import_Ca]", Cnndb, adOpenKeyset, adLockOptimistic
End If

' Attribution des valeurs aux champs correspondants

With Rsdb
AddNew Array("N°_Bon", "Code_Ven", "Date1", "Code_client", "CA_Bon", "Nom_Ven"),
Array(Champ1, Champ2, Champ3, Champ4, Champ5, Champ6).Update

End With
RsAs400.MoveNext
Loop

' Ferme la connexion

RsAs400.Close
Set RsAs400 = Nothing
Set Rsdb = Nothing
Set CnnAs400 = Nothing
Set Cnndb = Nothing

La Table est remplie et il faut maintenant s'occuper du dernier champ qui nous intéresse
c'est à dire le champ "Date_Bon". Nous allons nous servir de la fonction Update.

DoCmd.SetWarnings False 'Stoppe les messages d'alerte
DoCmd.RunSQL "Update Tbl_Import_Ca Set Date_Bon " & _
"= Right([Date1],2) & '/' & Mid([Date1],3,2) & '/' & Left([Date1],2)"
DoCmd.SetWarnings True


End Function

Dernière modification par flodu42 ; 09/02/2010 à 21h10.
flodu42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2010, 20h40   #6
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 601
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 601
Points : 2 066
Points : 2 066
Envoyer un message via Skype™ à Hédhili Jaïdane
Citation:
Envoyé par flodu42 Voir le message
Merci pour cette reponse, mais en fait j'aurai voulu pouvoir faire mes traitements en local, et non pas directement sur le serveur de production...
Il n'y a pas de moyen de sauvegarder sous Access (que je ne connais pas bien) ?
Citation:

Du coup j'ai essayé d'importer la totalite de la table en utilisant le lien créé mais le volume est certainement trop important ("ODBC Query Timeout Property: SQL0666 Estimated Query Processing Time Exceeds Limit")

Sur un site, il y a des elements de reponses, mais l'import se faisant ligne a ligne, il est treeees long... Comment puis je modifier le code pour que l'import se fasse plus rapidement ?
- Aucune idée pour modifier le code, mais tu peux essayer plusieurs imports pour reconstituer la totalité de ta table.
- tu es obligé de faire ça sous Access ?
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 22h07.


 
 
 
 
Partenaires

Hébergement Web