Page 1 sur 1
Invalid memory access
Publié : lun. 07/août/2006 16:14
par wolfjeremy
Salut,
J'ai une erreur du compilateur "Invalid memory access" quand j'esseye de faire marcher mon code sql... (sur l'autre que j'avais fait j'avais pas sa pourtant c'est presque le meme

)
Voila la ligne qui pose problème :
Si je fait un debug de real_query, j'ai pourtant une adresse memoire :
Pouvez vous m'aider ?
Merci d'avance pour votre aide.
Publié : lun. 07/août/2006 16:51
par KarLKoX
Ce n'est pas parce que tu as une adresse que tout est ok, en général, ça arrive si on appel pas comme il faut la fonction (param invalide) ou parce que la fonction appelée n'a pas réussi à faire ce qu'elle doit faire justement à cause de mauvais params.
Ca peut aussi être un problème de convention d'appel, essaye avec CallCFunctionFast.
Publié : lun. 07/août/2006 17:13
par wolfjeremy
Marche pas non plus avec CallC...
Voila une partie de mon code :
Enumeration
#libmysql
#Erreur
#Verif_ok
#Not_actif
#Acces_ok
EndEnumeration
If OpenLibrary ( #libmysql , "libmySQL.dll" ) ;charger la dll et choper l'adresse des fonctions
Global init = GetFunction( #libmysql , "mysql_init" )
Global close = GetFunction( #libmysql , "mysql_close" )
Global list_tables = GetFunction( #libmysql , "mysql_list_tables" )
Global real_connect=GetFunction( #libmysql , "mysql_real_connect" )
Global num_rows=GetFunction( #libmysql , "mysql_num_rows" )
Global fetch_row=GetFunction( #libmysql , "mysql_fetch_row" )
Global free_result=GetFunction( #libmysql , "mysql_free_result" )
Global query = GetFunction( #libmysql , "mysql_query" )
Global store_result = GetFunction( #libmysql , "mysql_store_result" )
Global real_query = GetFunction( #libmysql , "mysql_real_query" )
Global field_count = GetFunction( #libmysql , "mysql_field_count" )
Global affected_rows = GetFunction( #libmysql , "mysql_affected_rows" )
Global num_fields = GetFunction( #libmysql , "mysql_num_fields" )
Global num_rows = GetFunction( #libmysql , "mysql_num_rows" )
Global fetch_row = GetFunction( #libmysql , "mysql_fetch_row" )
Global fetch_lengths = GetFunction( #libmysql , "mysql_fetch_lengths" )
dbHnd = CallCFunctionFast (init,0)
If dbHnd = 0
MessageRequester ( "Erreur" , "Impossible d'initialiser la connection" , #PB_MessageRequester_Ok )
End
EndIf
Else
MessageRequester ( "Erreur" , "Impossible de charger libmysql.dll" , #PB_MessageRequester_Ok )
End
EndIf
; Entrez les infos sur votre base sql
IPsql$ = "127.0.0.1"
user$ = "root"
pass$ = ""
portsql =0
pipe$ = ""
conconf =0
;connection a la base de donnée
CallFunctionFast (real_connect,dbHnd, IPsql$, user$, pass$, "ssa" , portsql, pipe$, conconf)
Procedure client_verif(site$, login$, pass$, pcname$)
;initialisation de la requete
SQL$ = "SELECT ID, actif$, site$, pseudo$, pass$, pcname$ FROM secu WHERE site = '" + site$ + "' AND login = '" + login$ + "' AND pass = '" + pass$ + "' AND pcname = '" + pcname$ + "'"
Debug real_query
If CallFunctionFast (real_query, dbHnd, SQL$, Len (SQL$)) ;note c'est un peu bizzare, mais real_query renvoie 0 QUAND ELLE MARCHE et des infos QUAND ELLE NE MARCHE PAS. Je suis resté bloqué comme un con à cause de ca xD
ProcedureReturn #Erreur
Else
*mysqlResult= CallFunctionFast (store_result,dbHnd)
If *mysqlResult=0
If CallFunctionFast (field_count,dbHnd)
ProcedureReturn #Erreur
Else
EndIf
Else
affRows = CallFunctionFast (affected_rows,dbHnd)
*mysqlRow= CallFunctionFast (fetch_row,*mysqlResult)
*mysqlLen= CallFunctionFast (fetch_lengths,*mysqlResult)
length= PeekL (*mysqlLen+4*(0))
fieldptr= PeekL (*mysqlRow+4*(0))
If PeekS (fieldptr,length) = "1"
ProcedureReturn #Verif_ok
Else
ProcedureReturn #Not_actif
EndIf
EndIf
EndIf
EndProcedure
Publié : lun. 07/août/2006 19:07
par KarLKoX
A part que je ne comprend pas pourquoi tu utilises CallCFunctionFast pour l'init et CallFunctionFast pour les autres fonctions, je ne vois pas d'erreur particulière.
Check le retour de real_connect histoire d'être sûr que tout s'est bien passé.
Publié : lun. 07/août/2006 19:50
par wolfjeremy
J'ai oublier d'enlever le C mais normalement j'utilise CallFunctionFast lol
EDIT : apparement c'est un problème avec real_connect, tu a bien vu

je vais chercher le prob. Surement ouvrir un port.
Publié : lun. 07/août/2006 20:05
par wolfjeremy
Bon ben j'ai ouvert le port 3306 et je passe par l'ip "127.0.0.1:3306" et real_connect n'a plus de problème, par contre sa marche toujour pas toujour le problème d'invalid error access

Publié : lun. 07/août/2006 20:26
par KarLKoX
J'ai vu comment fonctionne mysql_real_connect et cette fonction à besoin de l'adresse d'une variable pour y stocker la structure MYSQL, peut être que vu que tu ne passais pas l'adresse, ça fait foirer le reste des fonction mysql.
Code : Tout sélectionner
CallFunctionFast (real_connect,@dbHnd, IPsql$, user$, pass$, "ssa" , portsql, pipe$, conconf)