Je me heurte à un problème lorsque je souhaite inclure un GUID et le récupérer via un QueryString...
J'ai une erreur!
Comment faut-il procéder ? Lorsque je fais :
Request.QueryString("s") = strG
sachant que :
- "s" est le GUID (Replication ID dans Access), qui permet d'identifier l'article à éditer ;
- "strG" récupère ce GUID afin de l'insérer dans une requête UPDATE, du genre :
UPDATE Articles SET ID strG, ArTitre txtArTitre.Text, ArAuteur = ddlArAuteur.SelectedItem, ArContenu = esp_ArContenu_Default.Text, ArStatus = rbArStatus.Value
Je ne sais pas si j'ai bien expliqué mon problème...
Et sur la page, s'affiche un contenu dont l'identifiant est "1324-1234-1234-1234", ainsi qu'un lien vers le fichier à télécharger.
Cet identifiant est généré aléatoirement sous forme de GUID donc, pour que le fichier ne soit téléchargé qu'une seule fois par l'utilisateur...
Donc pour expliquer vite fait, lorsqu'un utilisateur s'inscrit pour télécharger le fichier, on génère un GUID, on le stocke dans la base de données. On envoie un mail à l'utilisateur pour lui indiquer le lien de téléchargement (de la forme "page.aspx?s=1324-1234-1234-1234&fichier=8" (8 est l'identifiant du fichier)). Lorsque l'utilisateur a cliqué sur le lien, son enregistrement contenant le GUID dans la base de données est effacé, et donc il ne peut plus télécharger ce fichier, sauf en se réinscrivant sous un autre compte...
Un peu complexe, mais cela permet aux simples utilisateurs enregistrés de ne pas avoir un accès illimité aux fichiers comme les utilisateurs enregistrés comme "VIPs"...
Et d'autre part, si tu as des infos pour utiliser les procédures stockées avec Access (je crois avoir déjà vu ça mais où ?....) je suis preneur ;-))
pour ce qui est de ton problème, je comprend deja mieux le but, et je trouve que c'est une joli solution :) ton problème vient peut etre des tirets, tu peux pas generer un code aléatoire à partir de vb.net, et le mettre dans ta bdd, et le mettre sans les tirets.
Oui je pense aussi que le problème vient des tirets, parce que lorsque j'utilise des identifiants "classiques", du genre 1, 2, 3... ça marche très bien...
Ils appellent ça des requêtes enregistrées plutôt que des procédures stockées.
Sinon sur le lien que tu m'as donné, je viens d'aller voir je n'ai rien trouvé. Par contre il y a quelques trucs sur Access et le langage SQL qui m'ont l'air intéressant vu que j'ai encore des progrès à faire !!!
Voilà, donc je vais essayer de supprimer les tirets du GUID en l'insérant dans une variable de type String, supprimer les tirets et insérer dans la base de données.
Je crois que pour ça il faut utiliser une RegExp non ?
Je n'ai pas réussi à trouver d'informations sur la fonction Replace en SQL, par contre en VB.NET, ça semble marcher!
Donc j'ai fait un Replace("-", "%T") lors de l'insertion pour la preimère fois dans la base de données, et donc le GUID qui circule dans l'URL est déjà formaté, et lors de la récupération du QueryString, je n'ai plus d'erreur !
Merci pour tes indications Cyril je n'avais pas pensé à utiliser Replace ^^
Maintenant il me reste à utiliser les requêtes enregistrées comme tu me l'as suggéré pour plus de sécurité !
Erreur de syntaxe (opérateur absent) dans l'expression 'ID = 653f3e64@5415@49a2@8e2d@392af06f235f'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.OleDb.OleDbException: Erreur de syntaxe (opérateur absent) dans l'expression 'ID = 653f3e64@5415@49a2@8e2d@392af06f235f'.
Source Error:
Line 13: Dim cmd As New OleDbDataAdapter(SQL, conn)
Line 14:
Line 15: cmd.Fill(ds, "Test")
Line 16:
Line 17: DataList1.DataSource = ds.Tables("Test").DefaultView
Source File: C:\WEBSERVER\domaine.com\testGUID\Afficher.aspx.vb Line: 15
Comme on peut le voir j'ai essayé de remplacer dans le GUID, "%T" par des "@" dans le Replace, mais ça me donne toujours cette erreur...
Une idée ? :-S
Voici le code pour le replace :
Sub Page_Load(ByVal source As Object, ByVal e As EventArgs)
Dim strGUID As String = Guid.NewGuid.ToString()
txtID.Text = strGUID.Replace("-", "@")
End Sub
Et celui de la requête de selection :
SELECT champ1, champ2 FROM Test WHERE ID = " & Request.QueryString("s")
Lors de l'insertion dans la base, aucune erreur, ça marche très bien...
ok pour acces effectivement on peut pas faire grand chose avec, et la fonction replace n'est pas pris en compte pour access, l'url que je t'ai donné le dit :)