Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBScript ADO ACCESS 2000

11 réponses
Avatar
---DGI972---
Bonjour,
Je dois mettre à jour un fichier txt qui possède des anciens N° de
clients.
On me fournit un fichier client de maj en txt en 3 colonnes:
ANCIEN NOUVEAU NOM
000007730 120352544 Mr TEST
000007731 120352548 Mme TEST
Je l'ai mis dans une base de donnée du type MS Access 2000
j'ai créée une connection ODBC sur la base DBDTEST.mdb
Avant de me lancer dans un Script de remplacement sur la totalité de
mon fichier, je me suis fait un petit bout de Script de test pour
comprendre et voir comment cela fonctionne
Voici le code

---8<---Début---8<---
Dim obj_Con
Dim obj_Rec
Dim ch_Source
Dim ch_SQL

set obj_Con=CreateObject("ADODB.connection")
ch_Client = "DRIVER=Microsoft Access Driver (*.mdb);DBQ="
ch_Source = "C:\TEST\DBDTEST.mdb"
obj_Con.Open ch_Client & ch_Source
ch_SQL = "SELECT ANCIEN,NOUVEAU FROM DBDTEST WHERE ANCIEN ='000007730'"
set obj_Rec = obj_Con.Execute(ch_SQL)
Nouv = obj_Con.value
MsgBox "Le nouveau Numéros est: "& Nouv &" qui remplace l'ancien
000007730", vbInformation, "Nouveau CPTE"
obj_Rec.close
obj_Con.close
Set obj_Rec = Nothing
Set obj_Con = Nothing
---8<---Fin---8<---

Le pb c'est je n'arrive pas a récupurer la valeur du champ NOUVEAU
(j'ai pas compris comment cela fonctionne).
Suis sur la bonne voie ?
Mon fichier a corriger contient 1000 lignes à redresser je m'inquiète
sur les temps d'accés.

Merci d'avance

10 réponses

1 2
Avatar
Fred
Dans : news:,
---DGI972--- disait :
Bonjour,
Je dois mettre à jour un fichier txt qui possède des anciens N° de
clients.


[...]


set obj_Rec = obj_Con.Execute(ch_SQL)
Nouv = obj_Con.value


Hello,
De mémoire, c'est l'objet obj_Rec qui te renvoie le valeurs de cette
façon :
Nouv = obj_Rec("NOUVEAU")
Anc = obj_Rec("ANCIEN")
obj_Rec.MoveNext
etc ...

Si cela ne fonctionne pas avec les noms de champs, tu dois pouvoir le
faire avec l'indice du champ.



--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
---DGI972---
Fred a émis l'idée suivante :
Dans : news:,
---DGI972--- disait :
Bonjour,
Je dois mettre à jour un fichier txt qui possède des anciens N° de
clients.


[...]


set obj_Rec = obj_Con.Execute(ch_SQL)
Nouv = obj_Con.value


Hello,
De mémoire, c'est l'objet obj_Rec qui te renvoie le valeurs de cette façon :
Nouv = obj_Rec("NOUVEAU")
Anc = obj_Rec("ANCIEN")
obj_Rec.MoveNext
etc ...

Si cela ne fonctionne pas avec les noms de champs, tu dois pouvoir le faire
avec l'indice du champ.


merci
effectivement
obj_Rec.Fields(1) me retourne la valeur de NOUVEAU
Il me reste a fabriquer un fonction que me retournera la nouvelle
valeur qui sera apellée dans un boucle récursive qui balayera ma
totalité de mon fichier.

A+


Avatar
---DGI972---
---DGI972--- avait soumis l'idée :
Fred a émis l'idée suivante :
Dans : news:,
---DGI972--- disait :
Bonjour,
Je dois mettre à jour un fichier txt qui possède des anciens N° de
clients.


[...]


set obj_Rec = obj_Con.Execute(ch_SQL)
Nouv = obj_Con.value


Hello,
De mémoire, c'est l'objet obj_Rec qui te renvoie le valeurs de cette façon
:
Nouv = obj_Rec("NOUVEAU")
Anc = obj_Rec("ANCIEN")
obj_Rec.MoveNext
etc ...

Si cela ne fonctionne pas avec les noms de champs, tu dois pouvoir le faire
avec l'indice du champ.


merci
effectivement
obj_Rec.Fields(1) me retourne la valeur de NOUVEAU
Il me reste a fabriquer un fonction que me retournera la nouvelle valeur qui
sera apellée dans un boucle récursive qui balayera ma totalité de mon
fichier.

A+
Bonjour,

Voici la suite et je bute sur un Pb:
Wscript utilise 100% du processeur le fichier des Numéros de client a
changer est créé (L_ANC.txt)mais reste vide et le VBSCript ne sort pas
de la boucle.
Mon fichier contient 2500 lignes, mais seulement 400 lignes génère une
requête dans la base ACCESS.
Est ce que je peux laissé la connection ouverte en début de Script
avec: obj_Con.Open ch_Client & ch_Source ?

J'ai pas compris la différence avec obj_con et obj_rec ?

NB:Pour l'instant je fais la même requête plusieur fois avec les mêmes
valeur c'est pour voir les temps de réponses du VBScript.

Merci d'avance

Dim fso, inFile1, outfile, cpt, lct, lct1
On Error Resume next
Const ForReading = 1
Const ForWriting = 2
f1 = fso.GetFile("C:TESTPROGRAML_ANC.TXT") ' suprimme le fichiers
antérieur
f1.Delete
Set fil2 = fso.CreateTextFile("C:TESTPROGRAML_ANC.TXT", True)
'Fichier qui contient les lignes a changer
Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile1 = fso.OpenTextFile("C:TESTFICH", ForReading,False)
Set outfile = fso.OpenTextFile("C:TESTPROGRAML_ANC.TXT",
ForWriting,True)
Cpt = 1

Dim obj_Con
Dim obj_Rec
Dim ch_Source
Dim ch_SQL
Set obj_Con=CreateObject("ADODB.connection")
ch_Client = "DRIVER=Microsoft Access Driver (*.mdb);DBQ="
ch_Source = "C:TESTDBDTEST.mdb"
obj_Con.Open ch_Client & ch_Source
ch_SQL = "SELECT ANCIEN,NOUVEAU,CLIENT FROM DBDTEST
='0125441252'"
Set obj_Rec = obj_Con.Execute(ch_SQL)

Do While inFile.AtEndOfStream <> True
lct = inFile.ReadLine ' Lecture de la ligne complète
lct1 = Mid(lect,1,2)' extraction des 2 premiers caractères
If lct1="40" then ' si @ il faut remplacer le numéros de client
lct2 = Mid(test,39,12) ' extraction du N° Client (0+11)
lct3 = Mid(test,16,5) ' extraction de l'index
outfile.writeline("ANCIEN: " & obj_Rec.Fields(0) & " NOUVEAU: " &
obj_Rec.Fields(1) & " CLIENT: " & obj_Rec.Fields(2) & " "
& cpt)
End If

Cpt = Cpt + 1
Loop

' Libère les variables objets.
obj_Rec.close
obj_Con.close
Set obj_Rec = Nothing
Set obj_Con = Nothing
Set dic = Nothing
Set fso = Nothing
Set inFile = Nothing
Set outfile = Nothing



Avatar
Fred
Dans : news:,
---DGI972--- disait :

Bonjour,


Hello Gilles,

Est ce que je peux laissé la connection ouverte en début de Script
avec: obj_Con.Open ch_Client & ch_Source ?


Oui.

J'ai pas compris la différence avec obj_con et obj_rec ?


Tu te connectes à la base avec obj_con et obj_rec est assimilable à une
grille de résultats que tu obtiens après exécution d'une requête. Dans
ton cas, c'est une grille à une ligne car, logiquement, tu n'as qu'un
client qui correspond à chaque numéro.
C'est d'ailleurs ce que tu oublies de faire : relancer la requête après
le traitement de chaque client. Et tu as une erreur de syntaxe SQL me
semble-t-il. À moins que ce soit un copier/coller malheureux. Vois la
suite, je replace l'instruction au bon endroit.


Dim fso, inFile1, outfile, cpt, lct, lct1
On Error Resume next
Const ForReading = 1
Const ForWriting = 2
f1 = fso.GetFile("C:TESTPROGRAML_ANC.TXT") ' suprimme le fichiers
antérieur
f1.Delete
Set fil2 = fso.CreateTextFile("C:TESTPROGRAML_ANC.TXT", True)
'Fichier qui contient les lignes a changer
Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile1 = fso.OpenTextFile("C:TESTFICH", ForReading,False)
Set outfile = fso.OpenTextFile("C:TESTPROGRAML_ANC.TXT",
ForWriting,True)
Cpt = 1

Dim obj_Con
Dim obj_Rec
Dim ch_Source
Dim ch_SQL
Set obj_Con=CreateObject("ADODB.connection")
ch_Client = "DRIVER=Microsoft Access Driver (*.mdb);DBQ="
ch_Source = "C:TESTDBDTEST.mdb"
obj_Con.Open ch_Client & ch_Source


'Une petite modif ici :
ch_SQL = "SELECT ANCIEN,NOUVEAU,CLIENT " & _
"FROM DBDTEST WHERE ANCIEN="

'ligne suivante à supprimer et à copier plus loin (c'est fait)
'Set obj_Rec = obj_Con.Execute(ch_SQL)

Do While inFile.AtEndOfStream <> True
lct = inFile.ReadLine ' Lecture de la ligne complète
lct1 = Mid(lect,1,2)' extraction des 2 premiers caractères
If lct1="40" then ' si @ il faut remplacer le numéros de client
lct2 = Mid(test,39,12) ' extraction du N° Client (0+11)


'Voilà où il faut exécuter la requête
Set obj_Rec = obj_Con.Execute(ch_SQL & "'" & lct2 & "'")
'De mémoire, il faut ensuite se positionner sur le premier
enregistrement
'Je ne teste pas si il y a bien un enregistrement, je suppose
que oui (?)
obj_Rec.MoveFirst

lct3 = Mid(test,16,5) ' extraction de l'index
outfile.writeline("ANCIEN: " & obj_Rec.Fields(0) & " NOUVEAU: " &
obj_Rec.Fields(1) & " CLIENT: " & obj_Rec.Fields(2) & " "
& cpt)


'Je crois qu'il faut fermer le RecordSet avant de le réutiliser
'À vérifier
pbj_Rec.Close

End If

Cpt = Cpt + 1
Loop

' Libère les variables objets.
obj_Rec.close
obj_Con.close
Set obj_Rec = Nothing
Set obj_Con = Nothing
Set dic = Nothing
Set fso = Nothing
Set inFile = Nothing
Set outfile = Nothing


Dis-nous si cela va mieux ainsi.
Je vois que tu as acquis de bonnes bases depuis cet été :-)

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
Do Re Mi chel La Si Do
Bonsoir !


<PUB>
En utilisant Paradox, je peux t'indiquer que, effectuer une requête de
remplacement, qui va modifier 1000 enregistrements, sur 2500, prendra moins
d'une seconde sur un ordinateur, et moins de 2 secondes en réseau local non
optimisé. D'ailleurs, chez moi, en réseau, cela prend 0.2 seconde.
</PUB>


@-salutations

Michel Claveau
mél : http://cerbermail.com/?6J1TthIa8B
sites : http://mclaveau.com http://bergoiata.org http://ponx.org
newsgroups (utilisateur: "zoo" passe: "entrer") :
news://news.zoo-logique.org/programmation.Paradox
news://news.zoo-logique.org/ponx
news://news.zoo-logique.org/éàç`?°çïa&ô|~?§@.µ#'
Avatar
---DGI972---
Fred a émis l'idée suivante :
Dans : news:,
---DGI972--- disait :

Bonjour,


Hello Gilles,

Est ce que je peux laissé la connection ouverte en début de Script
avec: obj_Con.Open ch_Client & ch_Source ?


Oui.

J'ai pas compris la différence avec obj_con et obj_rec ?


Tu te connectes à la base avec obj_con et obj_rec est assimilable à une
grille de résultats que tu obtiens après exécution d'une requête. Dans ton
cas, c'est une grille à une ligne car, logiquement, tu n'as qu'un client qui
correspond à chaque numéro.
C'est d'ailleurs ce que tu oublies de faire : relancer la requête après le
traitement de chaque client. Et tu as une erreur de syntaxe SQL me
semble-t-il. À moins que ce soit un copier/coller malheureux. Vois la suite,
je replace l'instruction au bon endroit.


Dim fso, inFile1, outfile, cpt, lct, lct1
On Error Resume next
Const ForReading = 1
Const ForWriting = 2
f1 = fso.GetFile("C:TESTPROGRAML_ANC.TXT") ' suprimme le fichiers
antérieur
f1.Delete
Set fil2 = fso.CreateTextFile("C:TESTPROGRAML_ANC.TXT", True)
'Fichier qui contient les lignes a changer
Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile1 = fso.OpenTextFile("C:TESTFICH", ForReading,False)
Set outfile = fso.OpenTextFile("C:TESTPROGRAML_ANC.TXT",
ForWriting,True)
Cpt = 1

Dim obj_Con
Dim obj_Rec
Dim ch_Source
Dim ch_SQL
Set obj_Con=CreateObject("ADODB.connection")
ch_Client = "DRIVER=Microsoft Access Driver (*.mdb);DBQ="
ch_Source = "C:TESTDBDTEST.mdb"
obj_Con.Open ch_Client & ch_Source


'Une petite modif ici :
ch_SQL = "SELECT ANCIEN,NOUVEAU,CLIENT " & _
"FROM DBDTEST WHERE ANCIEN="

'ligne suivante à supprimer et à copier plus loin (c'est fait)
'Set obj_Rec = obj_Con.Execute(ch_SQL)

Do While inFile.AtEndOfStream <> True
lct = inFile.ReadLine ' Lecture de la ligne complète
lct1 = Mid(lect,1,2)' extraction des 2 premiers caractères
If lct1="40" then ' si @ il faut remplacer le numéros de client
lct2 = Mid(test,39,12) ' extraction du N° Client (0+11)


'Voilà où il faut exécuter la requête
Set obj_Rec = obj_Con.Execute(ch_SQL & "'" & lct2 & "'")
'De mémoire, il faut ensuite se positionner sur le premier
enregistrement
'Je ne teste pas si il y a bien un enregistrement, je suppose que oui
(?)
obj_Rec.MoveFirst

lct3 = Mid(test,16,5) ' extraction de l'index
outfile.writeline("ANCIEN: " & obj_Rec.Fields(0) & " NOUVEAU: " &
obj_Rec.Fields(1) & " CLIENT: " & obj_Rec.Fields(2) & " " &
cpt)


'Je crois qu'il faut fermer le RecordSet avant de le réutiliser
'À vérifier
pbj_Rec.Close

End If

Cpt = Cpt + 1
Loop

' Libère les variables objets.
obj_Rec.close
obj_Con.close
Set obj_Rec = Nothing
Set obj_Con = Nothing
Set dic = Nothing
Set fso = Nothing
Set inFile = Nothing
Set outfile = Nothing


Dis-nous si cela va mieux ainsi.
Je vois que tu as acquis de bonnes bases depuis cet été :-)


Salut Fred !
Tu m'as reconnu !!!
J'ai modifié le code:

Dim fso, inFile1, outfile, cpt, lct, lct2, lct3, lct1
On Error Resume next
Const ForReading = 1
Const ForWriting = 2
f1 = fso.GetFile("C:TESTPROGRAML_ANC.TXT") ' suprimme le fichiers
f1.Delete
Set fil2 = fso.CreateTextFile("C:TESTPROGRAML_ANC.TXT", True)
'Fichier qui contient les lignes a changer
Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile1 = fso.OpenTextFile("C:TESTFICH", ForReading,False)
Set outfile = fso.OpenTextFile("C:TESTPROGRAML_ANC.TXT",
ForWriting,True)
Cpt = 1

Dim obj_Con
Dim obj_Rec
Dim ch_Source
Dim ch_SQL
Set obj_Con=CreateObject("ADODB.connection")
ch_Client = "DRIVER=Microsoft Access Driver (*.mdb);DBQ="
ch_Source = "C:TESTDBDTEST.mdb"
obj_Con.Open ch_Client & ch_Source
ch_SQL = "SELECT ANCIEN,NOUVEAU,CLIENT FROM DBDTEST WHERE ANCIEN
="

Do While inFile.AtEndOfStream <> True
lct = inFile.ReadLine ' Lecture de la ligne complète
lct1 = Mid(lct,1,2)' extrac des 2 premiers caractères
If lct1="40" then ' si @ il faut remplacer le numéros de client
lct2 = Mid(lct1,40,9) ' extrac du N° Client (9)
lct3 = Mid(lct1,16,5) ' extraction de l'index
Set obj_Rec = obj_Con.Execute(ch_SQL & "'" & lct2 & "'")
obj_Rec.MoveFirst
outfile.writeline("INDEX: " & lct3 & " ANCIEN: " & lct2 & "
NOUVEAU: " & obj_Rec.Fields(1) & " CLIENT: " & obj_Rec.Fields(2)
& " " & cpt)
obj_Rec.Close

End If

Cpt = Cpt + 1
Loop

' Libère les variables objets.
obj_Rec.close
obj_Con.close
Set obj_Rec = Nothing
Set obj_Con = Nothing
Set dic = Nothing
Set fso = Nothing
Set inFile = Nothing
Set outfile = Nothing

Il avait beaucoup d'erreur de variable, mais toujours pareil:
avec ou sans obj_Rec.Close
100 % du processeur a fond, le fichier outfile L_ANC.TXT est créé mais
reste vide et le Script ne s'arrête pas 1/4 heure aprés il pédale
toujours.
Au secours HELP SOS Please.


Avatar
Fred
dans : news:
---DGI972--- disait :

Salut Fred !


Salut,

Tu m'as reconnu !!!


Bien sûr :-)

J'ai modifié le code:

Dim fso, inFile1, outfile, cpt, lct, lct2, lct3, lct1


Essaie d'enlever le On Error Resume Next
Il y a peut-être une erreur qui passe inaperçue.

On Error Resume next
Const ForReading = 1
Const ForWriting = 2
f1 = fso.GetFile("C:TESTPROGRAML_ANC.TXT") ' suprimme le fichiers
f1.Delete
Set fil2 = fso.CreateTextFile("C:TESTPROGRAML_ANC.TXT", True)
'Fichier qui contient les lignes a changer
Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile1 = fso.OpenTextFile("C:TESTFICH", ForReading,False)
Set outfile = fso.OpenTextFile("C:TESTPROGRAML_ANC.TXT",
ForWriting,True)
Cpt = 1

Dim obj_Con
Dim obj_Rec
Dim ch_Source
Dim ch_SQL
Set obj_Con=CreateObject("ADODB.connection")
ch_Client = "DRIVER=Microsoft Access Driver (*.mdb);DBQ="
ch_Source = "C:TESTDBDTEST.mdb"
obj_Con.Open ch_Client & ch_Source
ch_SQL = "SELECT ANCIEN,NOUVEAU,CLIENT FROM DBDTEST WHERE ANCIEN
="


La boucle à l'air correcte. Je ne vois pas pourquoi tu n'en sort pas (si
c'est bien ce qui se passe)

Do While inFile.AtEndOfStream <> True
lct = inFile.ReadLine ' Lecture de la ligne complète
lct1 = Mid(lct,1,2)' extrac des 2 premiers caractères
If lct1="40" then ' si @ il faut remplacer le numéros de client
lct2 = Mid(lct1,40,9) ' extrac du N° Client (9)
lct3 = Mid(lct1,16,5) ' extraction de l'index
Set obj_Rec = obj_Con.Execute(ch_SQL & "'" & lct2 & "'")
obj_Rec.MoveFirst
outfile.writeline("INDEX: " & lct3 & " ANCIEN: " & lct2 & "
NOUVEAU: " & obj_Rec.Fields(1) & " CLIENT: " &
obj_Rec.Fields(2) & " " & cpt)
obj_Rec.Close

End If

Cpt = Cpt + 1
Loop

' Libère les variables objets.


'Attention ici : si tu fermes le recordset dans la boucle,
'tu vas avoir une erreur à la ligne qui suit. Supprime.
obj_Rec.close

obj_Con.close
Set obj_Rec = Nothing
Set obj_Con = Nothing


'Il faut fermer les fichiers.
inFile.Close
outFile.Close

Set dic = Nothing
Set fso = Nothing
Set inFile = Nothing
Set outfile = Nothing

Il avait beaucoup d'erreur de variable, mais toujours pareil:
avec ou sans obj_Rec.Close
100 % du processeur a fond, le fichier outfile L_ANC.TXT est créé mais
reste vide et le Script ne s'arrête pas 1/4 heure aprés il pédale
toujours.
Au secours HELP SOS Please.



À mon avis, le fait de supprimer le On Error Resume Next devrait
t'apporter des informations supplémentaires.
Je vois que tu prend les deux premiers caractères de chaque ligne. Es-tu
sûr que chaque ligne contient au moins deux caractères ?

Ah, je viens de voir LE problème. Tu ouvres un fichier inFile et tu
utilises ensuite inFile (sans le 1)
Je crois que c'est la principale cause de ta boucle infinie (avec le
Resume next)

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
---DGI972---
Bonsoir !


<PUB>
En utilisant Paradox, je peux t'indiquer que, effectuer une requête de
remplacement, qui va modifier 1000 enregistrements, sur 2500, prendra moins
d'une seconde sur un ordinateur, et moins de 2 secondes en réseau local non
optimisé. D'ailleurs, chez moi, en réseau, cela prend 0.2 seconde.
</PUB>


@-salutations

Michel Claveau
mél : http://cerbermail.com/?6J1TthIa8B
sites : http://mclaveau.com http://bergoiata.org http://ponx.org
newsgroups (utilisateur: "zoo" passe: "entrer") :
news://news.zoo-logique.org/programmation.Paradox
news://news.zoo-logique.org/ponx
news://news.zoo-logique.org/éàç`?°çïa&ô|~?§@.µ#'


Bonjour,

Escuse mon ignorance mais Who is Paradox un language de programmation
une base de donnée ? mon fichier de référence est en txt et il fait 178
000 lignes et le Pc qui doit effectuer les remplacement et en W95 ???

Gilles

Avatar
---DGI972---
Fred a couché sur son écran :
dans : news:
---DGI972--- disait :

Salut Fred !


Salut,

Tu m'as reconnu !!!


Bien sûr :-)

J'ai modifié le code:

Dim fso, inFile1, outfile, cpt, lct, lct2, lct3, lct1


Essaie d'enlever le On Error Resume Next
Il y a peut-être une erreur qui passe inaperçue.

On Error Resume next
Const ForReading = 1
Const ForWriting = 2
f1 = fso.GetFile("C:TESTPROGRAML_ANC.TXT") ' suprimme le fichiers
f1.Delete
Set fil2 = fso.CreateTextFile("C:TESTPROGRAML_ANC.TXT", True)
'Fichier qui contient les lignes a changer
Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile1 = fso.OpenTextFile("C:TESTFICH", ForReading,False)
Set outfile = fso.OpenTextFile("C:TESTPROGRAML_ANC.TXT",
ForWriting,True)
Cpt = 1

Dim obj_Con
Dim obj_Rec
Dim ch_Source
Dim ch_SQL
Set obj_Con=CreateObject("ADODB.connection")
ch_Client = "DRIVER=Microsoft Access Driver (*.mdb);DBQ="
ch_Source = "C:TESTDBDTEST.mdb"
obj_Con.Open ch_Client & ch_Source
ch_SQL = "SELECT ANCIEN,NOUVEAU,CLIENT FROM DBDTEST WHERE ANCIEN
="


La boucle à l'air correcte. Je ne vois pas pourquoi tu n'en sort pas (si
c'est bien ce qui se passe)

Do While inFile.AtEndOfStream <> True
lct = inFile.ReadLine ' Lecture de la ligne complète
lct1 = Mid(lct,1,2)' extrac des 2 premiers caractères
If lct1="40" then ' si @ il faut remplacer le numéros de client
lct2 = Mid(lct1,40,9) ' extrac du N° Client (9)
lct3 = Mid(lct1,16,5) ' extraction de l'index
Set obj_Rec = obj_Con.Execute(ch_SQL & "'" & lct2 & "'")
obj_Rec.MoveFirst
outfile.writeline("INDEX: " & lct3 & " ANCIEN: " & lct2 & "
NOUVEAU: " & obj_Rec.Fields(1) & " CLIENT: " &
obj_Rec.Fields(2) & " " & cpt)
obj_Rec.Close

End If

Cpt = Cpt + 1
Loop

' Libère les variables objets.


'Attention ici : si tu fermes le recordset dans la boucle,
'tu vas avoir une erreur à la ligne qui suit. Supprime.
obj_Rec.close

obj_Con.close
Set obj_Rec = Nothing
Set obj_Con = Nothing


'Il faut fermer les fichiers.
inFile.Close
outFile.Close

Set dic = Nothing
Set fso = Nothing
Set inFile = Nothing
Set outfile = Nothing

Il avait beaucoup d'erreur de variable, mais toujours pareil:
avec ou sans obj_Rec.Close
100 % du processeur a fond, le fichier outfile L_ANC.TXT est créé mais
reste vide et le Script ne s'arrête pas 1/4 heure aprés il pédale
toujours.
Au secours HELP SOS Please.



À mon avis, le fait de supprimer le On Error Resume Next devrait
t'apporter des informations supplémentaires.
Je vois que tu prend les deux premiers caractères de chaque ligne. Es-tu
sûr que chaque ligne contient au moins deux caractères ?

Ah, je viens de voir LE problème. Tu ouvres un fichier inFile et tu
utilises ensuite inFile (sans le 1)
Je crois que c'est la principale cause de ta boucle infinie (avec le
Resume next)


Merci fred de ton soutien moral et concret.
Effectivement il y avait encore des erreurs de variable:
j'ai beaucoup de mal de partir d'un feuille blanche et j'utilise des
anciens Script.
En enlevant le Resume next c'est la catastrophe:
Erreur :Objet requis sur la ligne f1 = fso.GetFile (comprends pas j'ai
toujours déclaré mes variables comme cela).
Erreur :BOF ou EOF est égal à True ou l'enregistrement a été suprimmé
sur la ligne obj_Rec.MoveFirst.
J'ai auusi un pb sur ma ligne outfile.writeline
J'ai mis en commentaire les ligne a pb et le verdic est le suivant:
11 Minutes pour sortir de la boucles sans même écrire dans le fichier
de sortie les Numéros de clients erronés INVENDABLE !!!!!
Je vois ou optimiser les temps d'accés ou de traitement.

voila le code corrigé

Dim fso, f1, f2, infile, outfile, cpt, lct, lct2, lct3, lct1
Const ForReading = 1
Const ForWriting = 2
'f1 = fso.GetFile("C:TESTPROGRAML_ANC.TXT") ' suprimme le fichiers
'f1.Delete
'Set f2 = fso.CreateTextFile("C:TESTPROGRAML_ANC.TXT", True)
'Fichier qui contient les lignes a changer
Set fso = CreateObject("Scripting.FileSystemObject")
Set infile = fso.OpenTextFile("C:TESTFICH", ForReading,False)
Set outfile = fso.OpenTextFile("C:TESTPROGRAML_ANC.TXT",
ForWriting,True)
Cpt = 1

Dim obj_Con
Dim obj_Rec
Dim ch_Source
Dim ch_SQL
Set obj_Con=CreateObject("ADODB.connection")
ch_Client = "DRIVER=Microsoft Access Driver (*.mdb);DBQ="
ch_Source = "C:TESTDBDTEST.mdb"
obj_Con.Open ch_Client & ch_Source
ch_SQL = "SELECT ANCIEN,NOUVEAU,CLIENT FROM DBDTEST WHERE ANCIEN
="

Do While inFile.AtEndOfStream <> True
lct = infile.ReadLine ' Lecture de la ligne complète
lct1 = Mid(lct,1,2)' extrac des 2 premiers caractères
If lct1="40" then ' si @ il faut remplacer le numéros de client
lct2 = Mid(lct1,40,9) ' extrac du N° Client (9)
lct3 = Mid(lct1,16,5) ' extraction de l'index
Set obj_Rec = obj_Con.Execute(ch_SQL & "'" & lct2 & "'")
'obj_Rec.MoveFirst
'outfile.writeline("INDEX: " & lct3 & " ANCIEN: " & lct2 & "
NOUVEAU: " & obj_Rec.Fields(1) & " CLIENT: " & obj_Rec.Fields(2)
& " " & cpt)

End If

Cpt = Cpt + 1
Loop

' Libère les variables objets.
infile.Close
outfile.Close
obj_Rec.close
obj_Con.close
Set obj_Rec = Nothing
Set obj_Con = Nothing
Set dic = Nothing
Set fso = Nothing
Set inFile = Nothing
Set outfile = Nothing


Avatar
Do Re Mi chel La Si Do
Bonsoir !

Paradox est un logiciel intègré, qui contient :
- un SGBD
- un GUI (un interface graphique) très intégré au SGBD, avec gestion des
verrous (pessimiste), avec un rafraîchissement automatique, etc.
- des accès à d'autres SGBD (SQL-server, Oracle, DB2, ODBC, Txt,
BTrieve, etc.)
- un environnement de développement
- un langage, Object-PAL, orienté application, pas très simple, mais
bien adapté au développement d'applis de gestion.

Et, pour Paradox, j'ai conçu PONX, un serveur de fonctionnalités, qui ajoute
de (très) nombreuses possibilités.

Paradox a été créé par Ansa, développé par Borland, et est actuellement
édité par Corel.

C'est un outil sans équivalent, pour la rapidité de développement d'applis
des gestion (une fois qu'on le connaît). Malheureusement, il reste marginal,
malgré une communauté active (surtout en France et aux états-unis).

@-salutations

Michel Claveau
1 2