Interception d’erreur en mode console
Interception d’erreur en mode console
Bonjour à tous,
J’ai écrit un bout de code qui doit être exécuté en mode console depuis un autre programme.
Pour s’exécuter, ce bout de code doit recevoir 1 ou 2 paramètres.
Pour tester le code, je l’ai compilé et je l’appel depuis une console DOS en lui passant les paramètres attendus.
Actuellement, lors de son exécution, une erreur met fin brutalement à son exécution.
Savez-vous comment identifier l’erreur produite depuis ce mode d’appel ou comment passer les paramètres nécessaire si je lance l’exécution depuis l’IDE ?
J’ai écrit un bout de code qui doit être exécuté en mode console depuis un autre programme.
Pour s’exécuter, ce bout de code doit recevoir 1 ou 2 paramètres.
Pour tester le code, je l’ai compilé et je l’appel depuis une console DOS en lui passant les paramètres attendus.
Actuellement, lors de son exécution, une erreur met fin brutalement à son exécution.
Savez-vous comment identifier l’erreur produite depuis ce mode d’appel ou comment passer les paramètres nécessaire si je lance l’exécution depuis l’IDE ?
Re: Interception d’erreur en mode console
Tu peux passer des paramètres en mode IDE
Compilateur > Option du Compilateur > Compiler / Exécuter > Paramètres de l'exécutable
Compilateur > Option du Compilateur > Compiler / Exécuter > Paramètres de l'exécutable
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Interception d’erreur en mode console
Bonjour,
Je ne les ai jamais vraiment utilisés, mais pour communiquer avec un programme compilé il faut utilisé les fonctions Runtime
Maintenant si c'est juste pour voir d'ou vient une erreur, un fichier txt qui logue les erreurs peut convenir.
Je ne les ai jamais vraiment utilisés, mais pour communiquer avec un programme compilé il faut utilisé les fonctions Runtime
Maintenant si c'est juste pour voir d'ou vient une erreur, un fichier txt qui logue les erreurs peut convenir.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: Interception d’erreur en mode console
Voir aussi les fonctions de gestion d'erreur et la fonction
OnErrorCall()
(Compile l'exemple donné, sans le mode debug)
En début de presque tous mes codes, je met ça: (après l'indispensable EnableExplicit)
Et à la fin, ça:
Comme cela, aucun de mes programmes ne se termine par un message d'erreur Windows, ("le programme doit quitter...") même si j'ai oublié de traiter une erreur
OnErrorCall()
(Compile l'exemple donné, sans le mode debug)

En début de presque tous mes codes, je met ça: (après l'indispensable EnableExplicit)
Code : Tout sélectionner
OnErrorGoto(?Global_Error)
Code : Tout sélectionner
Global_Error:
MessageRequester("Error", ErrorMessage(), 16)
Dernière modification par Marc56 le lun. 31/juil./2017 12:49, modifié 1 fois.
Re: Interception d’erreur en mode console
post ici le code de ton prg, on verra (peut etre) ou est le probleme ....
@Marc les parametres se recuperes avec la librairie "Process" de Purebasic
notamment avec
Resultat = CountProgramParameters()
et
Resultat$ = ProgramParameter([Index])
dans une boucle
@Marc les parametres se recuperes avec la librairie "Process" de Purebasic
notamment avec
Resultat = CountProgramParameters()
et
Resultat$ = ProgramParameter([Index])
dans une boucle
Dernière modification par Zorro le lun. 31/juil./2017 12:52, modifié 2 fois.
Re: Interception d’erreur en mode console
Bonjour,
Voici un petit code pour créer un utilitaire qui retourne vrai ou faux suivant que l’exécutable dont le nom est passé en paramètre est actif ou pas.
Utilisation: utilitaire.exe notepad++[.exe]
Teste si notepad++ est lancé.
Si cela peut t'aider.
cage
Voici un petit code pour créer un utilitaire qui retourne vrai ou faux suivant que l’exécutable dont le nom est passé en paramètre est actif ou pas.
Utilisation: utilitaire.exe notepad++[.exe]
Teste si notepad++ est lancé.
Si cela peut t'aider.
cage
Code : Tout sélectionner
EnableExplicit ; all the variables must be declared
OnErrorGoto(?ErrorHandler)
Procedure getNamePID(ProcessName.s,*ptrPID)
; Retrieve the ProcessID according to exe name.
; Note: If many runing exe share the same name,
; Note: this would retrieve the first exe PID that had found,not all.
; Note: If found it, return 1 else 0, ps: .lbool = .l
Protected HSnap.l,Prec.processentry32,result.l=#False
HSnap=CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS,0)
If HSnap=#INVALID_HANDLE_VALUE
ProcedureReturn result
EndIf
Prec\dwSize=SizeOf(prec)
If Not Process32First_(HSnap,Prec)
ProcedureReturn result
EndIf
Repeat
If LCase(GetFilePart(PeekS(@Prec\szexefile)))=LCase(ProcessName)
PokeL(*ptrPID,Prec\th32ProcessID)
result=#True
Break
EndIf
Until Not Process32Next_(HSnap,Prec)
CloseHandle_(HSnap)
ProcedureReturn result
EndProcedure
Define Count = CountProgramParameters()
Define Program$ = #Null$
Define rcode = #False
If Count
Program$ = ProgramParameter(0)
Define ptrPID = 0
Define ExeName$ = GetFilePart(Program$)
If getNamePID(ExeName$, @ptrPID)
rcode = #True
Else
rcode = #False
EndIf
Else
rcode = #False
EndIf
ErrorHandler:
End rcode
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Re: Interception d’erreur en mode console
Merc pour vos réponses.
J'ai utilisé les explications de Marc56 pour passer mes parametres depuis l'IDE mais l'erreur n'est pas visualisée dans la fenêtre de suivi.
Pour le peut de ce que je vois, l'erreur apparait lors du scann des fichiers procedure 'Listefichiers()'...
Comme voous me l'avez suggéré, je vous post le code :
La table 'Partage' contient les chemins à scanner (ne sont pris en comptes que les chemins dont le champ ATraiter est positionné à 1)
La table 'Groupes' contient les dossiers identifiés pour chaque partage
La table 'Fichier' les fichiers trouvés dans les dossiers et sous dossiers listés dans 'groupes'
J'ai utilisé les explications de Marc56 pour passer mes parametres depuis l'IDE mais l'erreur n'est pas visualisée dans la fenêtre de suivi.
Pour le peut de ce que je vois, l'erreur apparait lors du scann des fichiers procedure 'Listefichiers()'...
Comme voous me l'avez suggéré, je vous post le code :
La table 'Partage' contient les chemins à scanner (ne sont pris en comptes que les chemins dont le champ ATraiter est positionné à 1)
La table 'Groupes' contient les dossiers identifiés pour chaque partage
La table 'Fichier' les fichiers trouvés dans les dossiers et sous dossiers listés dans 'groupes'
Code : Tout sélectionner
; Module de scann des disques
; ---------------------------
; Ce module peut être appelé pour 2 fonctions de scanns
; - Inventaire des répertoires disponibles sur les partages sélectionnés parametre
; - Inventaire des fichiers disponibles dans les répertoires sélectionnés
; L'appel de l'une ou l'autre des fonctions est réalisé par les commandes r ou f les deux fonctions peuvent être enchainées.
; Dans le cas d'un appel pour effectuer les 2 scanns, les répertoires seront toujours rafraichis en premiers.
; Les partages à scanner sont ceux positionnés à 1 dans la table "Partages" de la base "Inventaires.sqlite3"
; Initialisation de SQlite
UseSQLiteDatabase()
; Déclaration du tableau de parametres
Global Dim parametres$(1)
OpenConsole() ; Pour les tests
; Procédures de services
; ----------------------
Procedure Trace(type,donnee$)
Select type
Case 0
message$=FormatDate("%dd/%mm/%yyyy - %hh:%ii:%ss",Date())+Chr(9)+donnee$
Case 1 ; Message contient une chaine (xx|yy) pour calculer le pourcentage de xx par rapport à yy
valeurCourant=Val(Left(donnee$,FindString(donnee$,"|")))
valeurCent=Val(Right(donnee$,Len(donnee$)-FindString(donnee$,"|")))
pourcent=(100*valeurCourant)/valeurCent
message$="§00"+Str(pourcent) ; §00 -> Message système pour indiquer un retour en pourcentage
Case 2
message$="§01"+donnee$ ; §01 -> Message système pour indiquer que la chaine doit être affichée dans une barre de statut
EndSelect
; Envoi du texte vers la console
PrintN(message$)
EndProcedure
; Procédures de recherches
; ------------------------
; Procédure de listage des répertoires dans un partage
Procedure ListeRepertoires(base,index,partage$)
; Compter le nombre de dossier pour surveiller l'avancement
dossier=0
If ExamineDirectory(0,partage$,"*.*")
While NextDirectoryEntry(0)
If DirectoryEntryType(0)=#PB_DirectoryEntry_Directory And DirectoryEntryName(0)<>"." And DirectoryEntryName(0)<>"..":dossier+1:EndIf
Wend
EndIf
;trace(Str(dossier)+" dossiers trouvés")
; Enregistrer les dossiers en base
courant=1
If ExamineDirectory(0,partage$,"*.*")
While NextDirectoryEntry(0)
If DirectoryEntryType(0)=#PB_DirectoryEntry_Directory And DirectoryEntryName(0)<>"." And DirectoryEntryName(0)<>".."
; Elaboration de la requete de mise à jour des données
requete$="INSERT INTO Groupes VALUES ("+index+","+Chr(34)+DirectoryEntryName(0)+Chr(34)+")"
If DatabaseUpdate(base,requete$)=0:Trace(0,"Erreur lors de l'éxécution de la requête"+Chr(10)+Chr(13)+Chr(9)+"'"+requete$+"'"+Chr(10)+Chr(13)+Chr(9)+"Erreur : '"+DatabaseError()+"'"):End:EndIf
Trace(1,Str(courant)+"|"+Str(dossier))
courant+1
;Trace(requete$)
EndIf
Wend
FinishDirectory(0)
EndIf
EndProcedure
; Procédure de recherche des fichiers. Cette procèdure est appellée de façon récurcive pour lister tous les fichiers contenus dans les sous répertoires du réprtoire principal
Procedure Listefichiers(base,source$,rek=0) ; Source, indice
;Trace(chemin$)
; Ajoute "\" à la fin du chemin
If Right(source$,1)<>"\" : source$+"\" : EndIf
If ExamineDirectory(rek,source$,"*.*")
While NextDirectoryEntry(rek)
; Nom & Type répertoire source
name$=DirectoryEntryName(rek) ; Nom du chemin trouvé
type=DirectoryEntryType(rek) ; Type du chemin trouvé (répertoire ou fichier)
Select type ; Traitement selon le type trouvé (répertoire ou fichier)
Case #PB_DirectoryEntry_File ; Traitement si le type est "fichier"
; Construire le nom complet du fichier
fullname$=source$+name$
; Récupère les informations du fichier
taille=DirectoryEntrySize(rek) ; Taille du fichier
creation=DirectoryEntryDate(rek,#PB_Date_Created); Date de création du fichier
acces=DirectoryEntryDate(rek,#PB_Date_Accessed) ; Date du dernier accès au fichier
modification=DirectoryEntryDate(rek,#PB_Date_Modified) ; Date de la dernière modification du fichier
; Elaboration de la requete de mise à jour des données
requete$="INSERT INTO Fichiers VALUES ("+Chr(34)+fullname$+Chr(34)+","+taille+","+creation+","+modification+","+acces+")"
; Enregistrer les informations en base
If DatabaseUpdate(base,requete$)=0:Trace(0,"Erreur lors de l'éxécution de la requête"+Chr(10)+Chr(13)+Chr(9)+"'"+requete$+"'"+Chr(10)+Chr(13)+Chr(9)+"Erreur : '"+DatabaseError()+"'"):End:EndIf
trace(2,fullname$)
Case #PB_DirectoryEntry_Directory ; Traitement si type est "dossier"
If name$<>"." And name$<>".." ; Dossier différent de "." et ".."
Listefichiers(base,source$+name$,rek+1) ; Appel de la procédure en mode récurcif
EndIf
EndSelect
Wend
;Libère la mémoire
FinishDirectory(rek)
EndIf
EndProcedure
;----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; Procédures d'indexation
; -----------------------
; Indexation des repertoires
Procedure IndexReps()
;Trace("Indexation répertoire") ; Pour tests
; Rechercher dans la tables "Partages" la liste à indexer
Trace(0,"Etablissement de la liste des partages à indexer")
; Connexion à la base de donnée
MaBase=OpenDatabase(#PB_Any,"Scanns.sqlite3","","",#PB_Database_SQLite)
If(MaBase) ; Si la connexion à réussi
Trace(0,"Connexion à la base réussi")
; Vider la table "Groupes"
If DatabaseUpdate(MaBase,"DELETE FROM Groupes")
Trace(0,"Purge de la table des groupes réalisée")
Else
Trace(0,"Impossible de vider la table des groupes, Erreur : "+DatabaseError())
Trace(0,"Arrêt du traitement")
End
EndIf
; Rechercher les partages à indexer
requete$="SELECT Chrono,Partages FROM Partages WHERE ATraiter=1" ; Construction de la requête
reponse=DatabaseQuery(MaBase,Requete$)
;Trace(Str(reponse)) ; Pour tests
If(reponse<>0)
; Tracer le début du scann des répertoires
requete$="INSERT INTO Dates_Scanns VALUES ("+Date()+","+Chr(34)+"Début scann répertoires"+Chr(34)+")"
If DatabaseUpdate(MaBase,requete$)=0:Trace(0,"Erreur lors de l'éxécution de la requête"+Chr(10)+Chr(13)+Chr(9)+"'"+requete$+"'"+Chr(10)+Chr(13)+Chr(9)+"Erreur : '"+DatabaseError()+"'"):End:EndIf
; Lire les enregistrement remontés
While NextDatabaseRow(MaBase)
Trace(0,"Liste les répertoires trouvés dans : "+GetDatabaseString(MaBase,1))
ListeRepertoires(MaBase,GetDatabaseQuad(MaBase,0),GetDatabaseString(MaBase,1))
Wend
; Tracer la fin du scann des répertoires
requete$="INSERT INTO Dates_Scanns VALUES ("+Date()+","+Chr(34)+"Fin scann répertoires"+Chr(34)+")"
If DatabaseUpdate(MaBase,requete$)=0:Trace(0,"Erreur lors de l'éxécution de la requête"+Chr(10)+Chr(13)+Chr(9)+"'"+requete$+"'"+Chr(10)+Chr(13)+Chr(9)+"Erreur : '"+DatabaseError()+"'"):End:EndIf
Else
Trace(0,"Problème lors de l'exécution de la requête."+Chr(10)+Chr(13)+Chr(9)+requete$+Chr(10)+Chr(13)+Chr(9)+"Erreur : '"+DatabaseError()+"'")
EndIf
CloseDatabase(MaBase)
Trace(0,"Fermeture de la base de données")
Else
Trace(0,"Erreur de connexion à la base de données")
End
EndIf
EndProcedure
; Indexation des fichiers
Procedure IndexFichiers()
Trace(0,"Indexation fichiers") ; Pour tests
; Examen de la liste des dossiers indéxés
; Connexion à la base de donnée
MaBase=OpenDatabase(#PB_Any,"Scanns.sqlite3","","",#PB_Database_SQLite)
If(MaBase) ; Si la connexion à réussi
Trace(0,"Connexion à la base réussi")
; Vider la table des "Fichiers"
If DatabaseUpdate(MaBase,"DELETE FROM Fichiers")
Trace(0,"Purge de la table des fichiers réalisée")
Else
Trace(0,"Impossible de vider la table des fichiers, Erreur : "+DatabaseError())
Trace(0,"Arrêt du traitement")
End
EndIf
; Lecture des chemins à explorer
requete$="SELECT Groupe,Partages FROM Groupes INNER JOIN Partages ON Groupes.Partage=Partages.Chrono"
reponse=DatabaseQuery(MaBase,Requete$)
If(reponse<>0)
; Tracer le début du scann des fichiers
requete$="INSERT INTO Dates_Scanns VALUES ("+Date()+","+Chr(34)+"Début scann fichiers"+Chr(34)+")"
If DatabaseUpdate(MaBase,requete$)=0:Trace(0,"Erreur lors de l'éxécution de la requête"+Chr(10)+Chr(13)+Chr(9)+"'"+requete$+"'"+Chr(10)+Chr(13)+Chr(9)+"Erreur : '"+DatabaseError()+"'"):End:EndIf
; Lire les enregistrement remontés
While NextDatabaseRow(MaBase)
Listefichiers(MaBase,GetDatabaseString(MaBase,1)+"\"+GetDatabaseString(MaBase,0))
;Scan_Directory(GetDatabaseString(MaBase,1)+"\"+GetDatabaseString(MaBase,0))
Wend
; Tracer la fin du scann des fichiers
requete$="INSERT INTO Dates_Scanns VALUES ("+Date()+","+Chr(34)+"Fin scann fichiers"+Chr(34)+")"
If DatabaseUpdate(MaBase,requete$)=0:Trace(0,"Erreur lors de l'éxécution de la requête"+Chr(10)+Chr(13)+Chr(9)+"'"+requete$+"'"+Chr(10)+Chr(13)+Chr(9)+"Erreur : '"+DatabaseError()+"'"):End:EndIf
Else
Trace(0,"Problème lors de l'exécution de la requête."+Chr(10)+Chr(13)+Chr(9)+requete$+Chr(10)+Chr(13)+Chr(9)+"Erreur : '"+DatabaseError()+"'")
EndIf
CloseDatabase(MaBase)
Else
Trace(0,"Erreur de connexion à la base de données")
End
EndIf
EndProcedure
;----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; Procédure principale
; --------------------
Procedure MainProc()
;Trace("Traitement des parametres") ; Pour tests
NbParametre=ArraySize(parametres$())
;Trace("Nombre de paramatre="+NbParametre) ; Pour tests
If(parametres$(0)="f" And NbParametre>1) : Swap parametres$(0),parametres$(1) : EndIf ; Si les parametres ne sont pas dans le bon ordre, les inversser (Toutjour raffraichie ls dossiers avant les fichiers).
; Traiter les parametres
For i=0 To NbParametre-1
;Trace("Parametre "+i+" = "+parametres$(i)) ; Pour tests
Select parametres$(i)
Case "r" ; Indexer les répertoires
Trace(0,"Début d'indexation des répertoires")
IndexReps()
Trace(0,"Fin d'indexation des répertoires")
Case "f" ; Indexer les fichiers
Trace(0,"Début d'indexation des fichiers")
IndexFichiers()
Trace(0,"Fin d'indexation des fichiers")
EndSelect
Next i
EndProcedure
;---------------------------------------------------------------------------------------------------------------------------------------------------------
; Programme principal
; -------------------
; Effectuer le traitement en fonction du nombre de parametre passé au programme
Select CountProgramParameters()
Case 0
; Si pas de parametre
Trace(0,"Pas de parametre") ; Erreur d'appel
Case 1 To 2
; 1 à 2 parametres, appel normal
For i=0 To CountProgramParameters()-1
;trace(0,Str(i)+" -> "+ProgramParameter(i))
;Input() ; Pour les tests
If(i=1) : ReDim parametres$(2) : EndIf ; Si 2 parametres reçus, redimentionner le tableau
If(ProgramParameter(i)<>"r" And ProgramParameter(i)<>"f") ; Erreur dans les parametres d'appel
Trace(0,"Parametre '"+ProgramParameter(i)+"' inconnu")
;Input() ; Pour les tests
End ; Fin de programme
Else
If(ProgramParameter(i)<>" ") : parametres$(i)=ProgramParameter(i) : EndIf ; Enregistrer les parametres passés dans le tableau 'parametres$'
;Trace("Parametre "+i+" "+parametres$(i)) ; Pour tests
EndIf
Next i
; Appel de la procèdure principale
; --------------------------------
MainProc()
Default
; Si plus que 2 parametres
Trace(0,"Trop de parametre") ; Erreur d'appel
EndSelect
Input() ; Pour les tests
; Fin du programme
End
Re: Interception d’erreur en mode console
(Ta procédure Trace n'affiche rien sur la console, alors j'ai utilisé Debug)
Je n'ai pas tout exploré, mais en mettant "r" comme paramètre (dans l'IDE)
et en ajoutant une ligne de Debug au début de la procédure trace
J'obtiens déjà:
Debug est très utile pour voir en temps réel, de plus si la ligne commence par une chaine, il fait un transtypage des valeurs numériques (pas du résultat de fonctions)
L'erreur viens du fait que la base de donnée n'existe pas (sur mon PC)
Il faut alors prévoir d'en construire une "à vide"
Dixit l'aide
Pour créer une nouvelle base de données vide, il suffit de créer un fichier vide à l'aide de CreateFile()
puis ensuite créer la (les) table(s) avec DatabaseUpdate() ... CREATE TABLE etc
Désolé, je n'aurais pas le temps d'explorer plus loin aujourd'hui.
Hope this helps

Je n'ai pas tout exploré, mais en mettant "r" comme paramètre (dans l'IDE)
et en ajoutant une ligne de Debug au début de la procédure trace
Code : Tout sélectionner
...
Procedure Trace(type,donnee$)
Debug "Trace - Type: " + type + " - Donnée: " + donnee$
Select type
...
Code : Tout sélectionner
Trace - Type: 0 - Donnée: Début d'indexation des répertoires
Trace - Type: 0 - Donnée: Etablissement de la liste des partages à indexer
Trace - Type: 0 - Donnée: Erreur de connexion à la base de données

L'erreur viens du fait que la base de donnée n'existe pas (sur mon PC)
Il faut alors prévoir d'en construire une "à vide"
Dixit l'aide

puis ensuite créer la (les) table(s) avec DatabaseUpdate() ... CREATE TABLE etc
Désolé, je n'aurais pas le temps d'explorer plus loin aujourd'hui.
Hope this helps

Re: Interception d’erreur en mode console
Ce qui est normal si la bases de donnée SQLite n'a pas été créée.Marc56 a écrit :Code : Tout sélectionner
Trace - Type: 0 - Donnée: Erreur de connexion à la base de données
La base de données doit s'appeler : "Scanns.sqlite3" est être au meme niveau que l'exécutables
Voci les requettes SQL pour créer les tables de la base :
Code : Tout sélectionner
CREATE TABLE "Partages" (
`Chrono` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`Partages` TEXT NOT NULL UNIQUE,
`ATraiter` INTEGER NOT NULL
)
CREATE TABLE "Groupes" (
`Partage` INTEGER NOT NULL,
`Groupe` TEXT NOT NULL
)
CREATE TABLE "Fichiers" (
`Fichiers` INTEGER NOT NULL,
`Taille` INTEGER NOT NULL,
`DateCrea` INTEGER NOT NULL,
`DateModif` INTEGER NOT NULL,
`DateAcces` INTEGER NOT NULL,
PRIMARY KEY(`Fichiers`,`Taille`,`DateCrea`,`DateModif`,`DateAcces`)
)
CREATE TABLE "Dates_Scanns" (
`Date` INTEGER NOT NULL,
`Commentaires` TEXT,
PRIMARY KEY(`Date`)
)
Pour la même raison que si dessus (pas de base), tu n'as pas le temps de voir la console s'ouvrirMarc56 a écrit : (Ta procédure Trace n'affiche rien sur la console, alors j'ai utilisé Debug)
Re: Interception d’erreur en mode console
je n'ai pas testé ton code, et je n'y connais rien en base de données
mais je vois que tu effectues des requettes a l'interieur de la boucle While-wend dans la procedure Listefichiers(base,source$,rek=0) ; Source, indice
il est possible que ton plantage vienne de la liaison avec la base de données....
a ta place, je ressortirai le dialogue avec la base de données de la boucle , et effectuerai le dialogue en fin de boucle
(en recuperant bien sur dans la boucle les infos qui t"interresse dans une liste ou un tableau
et ainsi reserver le dialogue avec la base dans un deuxieme temps...
car lire le disque, et dialoguer en meme temps avec la base.... me semble funambulesque
(surtout dans une procedure recursive.... )
mais je vois que tu effectues des requettes a l'interieur de la boucle While-wend dans la procedure Listefichiers(base,source$,rek=0) ; Source, indice
il est possible que ton plantage vienne de la liaison avec la base de données....
a ta place, je ressortirai le dialogue avec la base de données de la boucle , et effectuerai le dialogue en fin de boucle
(en recuperant bien sur dans la boucle les infos qui t"interresse dans une liste ou un tableau
et ainsi reserver le dialogue avec la base dans un deuxieme temps...
car lire le disque, et dialoguer en meme temps avec la base.... me semble funambulesque

Re: Interception d’erreur en mode console
J'ai trouvé le problème.
Merci particulièrement à Marc56 qui m'a bien aidé en m’indiquant comment lancer un programme depuis l’IDE en passant des paramètres.
J’ai pu de cette façon utiliser la fenêtre du debuger pour identifier l’erreur.
Petite explication sur l’erreur :
PureBasic est tellement rapide
que j’essayé d’insérer en base 2 valeurs identiques (la date au format original) alors que le champ ne l’accepte pas.
Merci particulièrement à Marc56 qui m'a bien aidé en m’indiquant comment lancer un programme depuis l’IDE en passant des paramètres.
J’ai pu de cette façon utiliser la fenêtre du debuger pour identifier l’erreur.
Petite explication sur l’erreur :
PureBasic est tellement rapide

Pas de problème, je travail sur 2 machines différentes, depuis l'une, je scann les disques de l'autre.Zorro a écrit :lire le disque, et dialoguer en meme temps avec la base.... me semble funambulesque(surtout dans une procedure recursive.... )
Re: Interception d’erreur en mode console
Zorro a écrit :@Marc les parametres se recuperes avec la librairie "Process" de Purebasic
je me rends compte maintenant, que j'etais hors sujet ... sorry Marc
