Problème avec ADOQuery.Locate et opération incorrecte!

cs_othland Messages postés 299 Date d'inscription jeudi 18 décembre 2003 Statut Membre Dernière intervention 9 février 2010 - 16 avril 2008 à 14:54
JeremyLecouvert Messages postés 139 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 10 mai 2010 - 12 déc. 2008 à 15:12
Bonjour à tous,
j'utilise le résultat d'un ADOQuery.Locate dans un if mais lors de l'exécution, ça m'affiche 'Opération de variant incorrecte'
mon locate est le suivant :
ADOQuery.Locate('Code', Chaine, [])

sachant que chaine et de type string...
j'ai essayé plusieurs méthodes mais ça n'a pas marché.
c'est quoi le problème SVP?
Merci

11 réponses

cs_othland Messages postés 299 Date d'inscription jeudi 18 décembre 2003 Statut Membre Dernière intervention 9 février 2010 1
16 avril 2008 à 17:59
ReBonjour,
j'ai utilisé toutes les possibilités mais sans succès!
SVP aidez moi!!
merci à vous!
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
16 avril 2008 à 21:04
çà ressemble à un souci de conversion..

ADOQuery.Locate('Code', Chaine, []) 
Code est vraisemblablement de type integer
donc essaie StrToInt(Chaine).

cantador
0
cs_othland Messages postés 299 Date d'inscription jeudi 18 décembre 2003 Statut Membre Dernière intervention 9 février 2010 1
17 avril 2008 à 09:46
merci pour la réponse Cantador,
en fait, le champ 'code' est de type : char(10)
et chaine est de type string.
lorsque j'ai essayé :
ADOQuery.Locate('Code', quotedstr(Chaine), []);
ça m'affiche : "une opération en plusieurs étapes a généré des erreurs. Vérifiez chaque valeur d'état"
que dois je faire dans ce cas??
Merci pour votre aide les amis!
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
17 avril 2008 à 17:37
curieux ce message, visiblement il doit y avoir des erreurs ailleurs..
Peut-être la structure..
il vaut mieux mettre la clé primaire en integer..


j'ai retrouvé une ancienne écriture :


ADOAccident.Locate('id_accident',65092,[]);

qui fonctionne


id-accident est un integer..

cantador
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
softer47 Messages postés 7 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 17 décembre 2008
12 déc. 2008 à 07:46
bonjour,

moi je rencontre un souci avec locate !

je m'explique...........

je passe par un adoconnection + adodataset + datasource et le code suivant

try

locate ( ' date,id_races', date;id_races , [] );
edit;
fieldsbyname('date').value:= date;
fieldsbyname('id_race').value:= id_races;

except;

insert;
fieldsbyname('date').value:= date;
fieldsbyname('id_race').value:= id_races;
post;

end;

.......afin de vérifier si l'enregistrement existe ou pas et ou l'insérer ou le modifier

mon problème est que l'enregistrement existe ou pas c'est toujours en "édit" et ça réecrit toujours sur le 1er enregistrement de ma table
malgrès locate j'ai un prb de detection d'enregistrement car ça n'insère jamais si nouveau enreg

si quelqu'un a la solution ??

encore merci
0
softer47 Messages postés 7 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 17 décembre 2008
12 déc. 2008 à 07:47
avec une base access !!
0
JeremyLecouvert Messages postés 139 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 10 mai 2010 2
12 déc. 2008 à 09:35
Salut,

Softer47: essaie cette syntaxe: Locate('date;id_races', VarArrayOf([date, id_races]), []). Le 1° paramètre doit être séparé par des ';' et pas des ','. Et dans le cas d'une recherche sur plusieurs champs, le 2° paramètre est un tableau de Variant.
ptite suggestion: tu pourrais faire un truc du style:
if Locate('date;id_races', VarArrayOf([date, id_races]), []) then
  begin   //on a trouvé: Locate renvoie True et nous positionne sur l'enr. recherché
     edit;
     ...
  end
else     //on n'a pas trouvé: Locate renvoie False et le curseur du DataSet reste au même endroit
  begin
     insert;
     ...
  end;
ça te permettra de voir tout de suite (en debug) si tu as trouvé ton enregistrement.
Dans ton code tu cherches l'enregistrement, mais si tu ne le trouves pas (Locate renvoie False), tu te mets quand même en Edit pour modifier l'enregistrement courant (celui sur lequel tu étais positionné avant d'appeler Locate, par exemple le premier!).
Je pense que ça règlera ton pb.

Othland: j'arrive certainement un peu (beaucoup) tard, mais bon... je ne travaille jamais avec des types char, mais à tout zazard, tu pourrais essayer de caster ta variable "chaine" en Variant, ou peut-être en char(10).
Voilou!
@+.
0
softer47 Messages postés 7 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 17 décembre 2008
12 déc. 2008 à 13:27
jeremy,

merci de ta réponse mais ma syntaxe est bien celle que tu préconises :

locate('date;id_races',vararrayof([date,id_races]),[]);

donc là c'est bon...............mais même avec if ...then..else......... ça marche pas ( j'avais déja testé )

je comprends pas :(
0
JeremyLecouvert Messages postés 139 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 10 mai 2010 2
12 déc. 2008 à 14:14
Quand tu dis "ça marche pas", est-ce que ça veut dire que tu ne trouves pas un enregistrement qui devrait y être et que tu passes systématiquement dans la clause else? est-ce que tu as essayé sur plusieurs enregistrements ou c'est toujours le même qui déconne? As-tu essayé avec les options (loCaseInsensitive,...)? Désolé, mais j'ai du mal à cibler ton pb.. et en ce qui concerne la syntaxe, ce n'est pas celle que tu as marquée dans ton post, d'où ma précédente suggestion..
0
softer47 Messages postés 7 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 17 décembre 2008
12 déc. 2008 à 14:58
re,

bon effectivement ça marche mais j'ai rajouté du formatage de variable dans vararrayof.........

vararrayof([strtodate(date),strtoint(id_races)])

bizarre car date et id_races sont bien Tdate et integer ?????

enfin c'est ok maintenant !!

merci pour tout !
0
JeremyLecouvert Messages postés 139 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 10 mai 2010 2
12 déc. 2008 à 15:12
Abinvoui... tu n'as pas précisé d'où viennent tes variables, mais effectivement si c'est par exemple des valeurs saisies dans des TEdit, c'est forcément un String que tu récupères... Enfin bon, maintenant ça roule!!

Tchô!
0