Interception d’erreur en mode console

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Aliass
Messages : 23
Inscription : lun. 17/sept./2012 8:09

Interception d’erreur en mode console

Message par Aliass »

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 ?
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Interception d’erreur en mode console

Message par Marc56 »

Tu peux passer des paramètres en mode IDE

Compilateur > Option du Compilateur > Compiler / Exécuter > Paramètres de l'exécutable
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Interception d’erreur en mode console

Message par microdevweb »

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.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Interception d’erreur en mode console

Message par Marc56 »

Voir aussi les fonctions de gestion d'erreur et la fonction

OnErrorCall()

(Compile l'exemple donné, sans le mode debug)


:idea:
En début de presque tous mes codes, je met ça: (après l'indispensable EnableExplicit)

Code : Tout sélectionner

OnErrorGoto(?Global_Error)
Et à la fin, ça:

Code : Tout sélectionner

Global_Error:
MessageRequester("Error", ErrorMessage(), 16)
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
Dernière modification par Marc56 le lun. 31/juil./2017 12:49, modifié 1 fois.
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Interception d’erreur en mode console

Message par Zorro »

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
Dernière modification par Zorro le lun. 31/juil./2017 12:52, modifié 2 fois.
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Interception d’erreur en mode console

Message par cage »

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

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
Aliass
Messages : 23
Inscription : lun. 17/sept./2012 8:09

Re: Interception d’erreur en mode console

Message par Aliass »

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'

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
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: Interception d’erreur en mode console

Message par Marc56 »

(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

Code : Tout sélectionner

...
Procedure Trace(type,donnee$)
     Debug "Trace - Type: " + type + " - Donnée: " + donnee$
     Select type
...
J'obtiens déjà:

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
:idea: 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
:arrow: 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
:wink:
Aliass
Messages : 23
Inscription : lun. 17/sept./2012 8:09

Re: Interception d’erreur en mode console

Message par Aliass »

Marc56 a écrit :

Code : Tout sélectionner

Trace - Type: 0 - Donnée: Erreur de connexion à la base de données
Ce qui est normal si la bases de donnée SQLite n'a pas été créée.

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`)
)
Ne pas oublier de de rensegner au moins 1 enregistrement de la table "Partages" avec dans le champ 'Partages' le chemin source à examiner et positionner le champ 'ATraiter' à 1
Marc56 a écrit : (Ta procédure Trace n'affiche rien sur la console, alors j'ai utilisé Debug)
Pour la même raison que si dessus (pas de base), tu n'as pas le temps de voir la console s'ouvrir
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Interception d’erreur en mode console

Message par Zorro »

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.... )
Aliass
Messages : 23
Inscription : lun. 17/sept./2012 8:09

Re: Interception d’erreur en mode console

Message par Aliass »

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 :D que j’essayé d’insérer en base 2 valeurs identiques (la date au format original) alors que le champ ne l’accepte pas.

Zorro a écrit :lire le disque, et dialoguer en meme temps avec la base.... me semble funambulesque :) (surtout dans une procedure recursive.... )
Pas de problème, je travail sur 2 machines différentes, depuis l'une, je scann les disques de l'autre.
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Interception d’erreur en mode console

Message par Zorro »

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 :)
Répondre