Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème de Locate et AppendRecord avec Delphi 2006 [ Base de données / Oracle ] (dguehenn)

jeudi 19 octobre 2006 à 17:55:21 | Problème de Locate et AppendRecord avec Delphi 2006

dguehenn

Bonjour,

Lors du passage de mon application de Delphi 7 à Delphi 2006, deux problèmes sont apparus :

Lorsque j'utilise la méthode LOCATE, j'ai des résultats différents entre les deux versions.

Mon code :

 with TABLE do
 Begin
    if not Locate('SESSION_ID;UTI_ID', VarArrayOf(['100', '1']), []) then
    begin
        ...
       
AppendRecord(['100','1']);
        ...
    end
    else
       ...
end;


Ma table "TABLE" contient une ligne avec SESSION_ID=100 et UTI_ID=1 ( les champs sont du type NUMBER )

1er Problème

Sous Delphi 7, LOCATE trouve cette ligne et je passe dans le else.
Sous Delphi 2006, LOCATE ne la trouve pas et j'essaye alors de l'enregistrer à nouveau

Si je modifie le code pour ne rechercher que SESSION_ID qui est l'index de ma table, LOCATE retour TRUE

if not Locate('SESSION_ID', VarArrayOf(['100']), []) then

Mais si je modifie le code pour ne rechercher que USER_ID qui n'est pas l'index de mon tableau, LOCATE retour FALSE

if not Locate('USER_ID', VarArrayOf(['1']), []) then

2eme Problème
Lorsque j'utilise AppendRecord sous Delphi 2006, j'ai un message d'erreur :

Erreur SQL générale
[oracle][odbc][ora]ORA-01722: Nombre non valide



samedi 21 octobre 2006 à 11:11:51 | Re : Problème de Locate et AppendRecord avec Delphi 2006

pers

Membre Club
Bonjour

En ce qui me concerne je préfère quand même exécuter un sql plutôt que d'utliser le locate... mais bon ca ne resoud peut-être pas ton problème ...

A propos je vois que tu as migré de D7 vers D2006 : tu n'as pas rencontré trop de problèmes et tu a acheté la nouvelle version ou upgradé delphi 7 ??

merci d'avance

lundi 23 octobre 2006 à 09:22:18 | Re : Problème de Locate et AppendRecord avec Delphi 2006

dguehenn

Bonjour,

L'ensemble de mon application utilise la méthode du Locate, je prendrai beaucoup trop de temps à modifier mon code pour exécuter une requête à la place.

Pour la migration de mon application de Delphi 7 vers Delphi 2006, j'ai fait un upgrade, mais j'ai rencontré deux problèmes lors de cette migration : Le problème de Locate et le problème de quickreport.

Personne n'a eu ce même problème de Locate?

Merci de votre réponse.

vendredi 27 octobre 2006 à 15:47:07 | Re : Problème de Locate et AppendRecord avec Delphi 2006

dguehenn

J'ai trouvé l'origine de ce problème de locate et de AppendRecord :

Sous Oracle, les champs qui sont de type NUMBER avec une taille définie provoque ce problème

Lors de l'insertion, j'ai alors le message :

Erreur SQL générale
[oracle][odbc][ora]ORA-01722: Nombre non valide

et le locate ne fonctionne plus.

Exemple :

Ma table Oracle

colonne              type de données    taille     echelle
SESSION_ID      NUMBER           
USER_ID             NUMBER            4            0

Si je recherche une ligne avec SESSION_ID, le locate fonctionne mais si je recherche une ligne avec USER_ID, impossible de la trouver.

Avez-vous le même résultat que moi?



mercredi 15 novembre 2006 à 09:29:11 | Re : Problème de Locate et AppendRecord avec Delphi 2006

dguehenn

Réponse acceptée !
Pour résoudre le problème lié au Locate et AppendRecord dans ce cadre là, il faut mettre à jour la version du driver ODBC d'Oracle en version 9.2.0.7.0

mardi 6 novembre 2007 à 04:21:01 | Re : Problème de Locate et AppendRecord avec Delphi 2006

dataconcept

Bonjour,

Il y a un BUG dans la fonction locate. ce bug provoque une lenteur croissante lors de recherche sur des tables uniquement lorsque ces tables sont partagées en réseau par plus d'un utilisateur.

A partir de DELPHI 5, le BDE à subit sa dernière évolution, on lisait dans la doc qu'i était conseillé d'abandonner la fonction GotoKey au profit de locate pour effectuer des recherches dans une table.
Depuis j'ai utiliser locate pour toutes mes applications.

Voici mes constatations :

Dans toutes mes applications BDE j'utilise le format DBase(level7), sont avantage très robuste et facile à maintenir

Locate fonctionne très bien lorsque vous effectuez des recherches en local ou sur une table distante dans un dossier partagé

Lorsqu'il y a plus d'un utilisateur  effectuant une recherche sur la même table, un ralentissement de la recherche se produit, ce ralentissement va croissant jusqu'à l'impossibilité d'utiliser l'application.
 
Ce phénomène se produit sur les tables au format dbf (pas tester sur Paradox) il est possible qu'il se produise également sur d'autre format de fichier.

1- Plus la taille de la table est importante et plus le ralentissement devient conséquent.
2- Lorsque vous effectuer des recherches sur plusieurs grosses tables ca devient catastrophique
3- Cela uniquement lorsque plusieurs utilisateurs effectue des recherches sur ces tables en réseau, avec un utilisateur pas de problème.


J'avais constaté ces phénomène de ralentissement, mais je pensais que c'était un problème hardware puis finalement je pensais que le BDE n'étais pas adapté aux grosses base en réseau.

Lorsque j'ai rencontré un client qui utilise un encore un de mes logiciel développer en delphi 3, sur des très grosses  tables en réseau, celui-ci me dit qu'il ne constate aucun ralentissement, ceci à été le déclic qui à fait que j'ai trouver la cause.

1- Mon application delphi3 avait été recompilé en delphi5 puis 7 : donc ce ne provenait pas de la version de delphi ni du bde, après avoir analyser mon code, j'ai constater que depuis j'utilisais Locate à la place de GotoKey pour mes recherches, après avoir mis des points de suivis avant et apres une fonction locate sur une application réseau, j'ai constater le phénome de ralentissement uniquement lorsque la base était partagée avec d'autres

Après avoir remplacé mes locate par des gotokey, les ralentissements disparaissais.

Ceci est bien la preuve du BUG de la fonction Locate. et comme le BDE n'est plus maintenu, pas de correction disponible...

Après avoir remplacer tous les Locate  :
1- recherche sur un champ unique indexé  par des Gotokey
2- recherche multi champ par un filtre sur la table ou une portée SetRangestart

mon logiciel tourne nikel...

Conseil : ne pas remplacer des locate par un Sql car la réponse est plus lente que Gotokey ou une portée, sql est très rapide sur unn ensemble de résultat mais pas sur un résultat comportant que un enregistrement.

Voilà, depuis lors, j'utilise toujours BDE et des tables Dbase sur des applications réseau avec +- 10 users et des tables de plus ou moin 100000 records (tailles de mes tables 5 à 10 megas) sans soucis de rapidité.

Vive le BDE, les SGBD j'y passe pas encore....





















bobo

mardi 6 novembre 2007 à 04:21:05 | Re : Problème de Locate et AppendRecord avec Delphi 2006

dataconcept

Bonjour,

Il y a un BUG dans la fonction locate. ce bug provoque une lenteur croissante lors de recherche sur des tables uniquement lorsque ces tables sont partagées en réseau par plus d'un utilisateur.

A partir de DELPHI 5, le BDE à subit sa dernière évolution, on lisait dans la doc qu'i était conseillé d'abandonner la fonction GotoKey au profit de locate pour effectuer des recherches dans une table.
Depuis j'ai utiliser locate pour toutes mes applications.

Voici mes constatations :

Dans toutes mes applications BDE j'utilise le format DBase(level7), sont avantage très robuste et facile à maintenir

Locate fonctionne très bien lorsque vous effectuez des recherches en local ou sur une table distante dans un dossier partagé

Lorsqu'il y a plus d'un utilisateur  effectuant une recherche sur la même table, un ralentissement de la recherche se produit, ce ralentissement va croissant jusqu'à l'impossibilité d'utiliser l'application.
 
Ce phénomène se produit sur les tables au format dbf (pas tester sur Paradox) il est possible qu'il se produise également sur d'autre format de fichier.

1- Plus la taille de la table est importante et plus le ralentissement devient conséquent.
2- Lorsque vous effectuer des recherches sur plusieurs grosses tables ca devient catastrophique
3- Cela uniquement lorsque plusieurs utilisateurs effectue des recherches sur ces tables en réseau, avec un utilisateur pas de problème.


J'avais constaté ces phénomène de ralentissement, mais je pensais que c'était un problème hardware puis finalement je pensais que le BDE n'étais pas adapté aux grosses base en réseau.

Lorsque j'ai rencontré un client qui utilise un encore un de mes logiciel développer en delphi 3, sur des très grosses  tables en réseau, celui-ci me dit qu'il ne constate aucun ralentissement, ceci à été le déclic qui à fait que j'ai trouver la cause.

1- Mon application delphi3 avait été recompilé en delphi5 puis 7 : donc ce ne provenait pas de la version de delphi ni du bde, après avoir analyser mon code, j'ai constater que depuis j'utilisais Locate à la place de GotoKey pour mes recherches, après avoir mis des points de suivis avant et apres une fonction locate sur une application réseau, j'ai constater le phénome de ralentissement uniquement lorsque la base était partagée avec d'autres

Après avoir remplacé mes locate par des gotokey, les ralentissements disparaissais.

Ceci est bien la preuve du BUG de la fonction Locate. et comme le BDE n'est plus maintenu, pas de correction disponible...

Après avoir remplacer tous les Locate  :
1- recherche sur un champ unique indexé  par des Gotokey
2- recherche multi champ par un filtre sur la table ou une portée SetRangestart

mon logiciel tourne nikel...

Conseil : ne pas remplacer des locate par un Sql car la réponse est plus lente que Gotokey ou une portée, sql est très rapide sur unn ensemble de résultat mais pas sur un résultat comportant que un enregistrement.

Voilà, depuis lors, j'utilise toujours BDE et des tables Dbase sur des applications réseau avec +- 10 users et des tables de plus ou moin 100000 records (tailles de mes tables 5 à 10 megas) sans soucis de rapidité.

Vive le BDE, les SGBD j'y passe pas encore....





















bobo



Cette discussion est classé dans : problème, delphi, id, locate, appendrecord


Répondre à ce message

Sujets en rapport avec ce message

Problème d'affichage un peu spécial !? [ par minipod ] Je cherche à afficher des caractères japonais avec Delphi. Access et VB me les affichent très bien mais Delphi m'affiche n'importe quoi ! A mon avis c bde et version personnelle [ par jarv ] Bonjour !Pour mon problème de lecture de fichier dbf, on me conseille d'utiliser bde 5.2 mais j'ai eu beau chercher pas de bde sur ma version de delp gros problème de compilation [ par Latchee ] Voila C tout simple, delphi ne veut plus compiler nimporte quelle source ke je lui fait ouvrir, le bouton "run" est grisé.Et malgré moultes bidouillag Problème de libération mémoire avec un variant / Delphi 6 [ par Schreck ] SchreckPetit problème avec Delphi(6) : Dans le code suivant (épuré au maximum ...), la mémoire utilisée par le variant n'est pa libérée (augmentation Lignes non compilées [ par padsou ] Salut !j'ai un gros problème avec delphi : j'ai des lignes qui sont ignorées par le compilateur, et ce n'est pas un problème de syntaxe de mes lignes, problème comparaison reel sous delphi 5.0 [ par momolino ] Bonjour,En fait, je suis en train de finir une application débuté sous delphi 5.0. Dans celle-ci je suis amené à faire pas mal de comparaison entre ré RAVE [ par LeGuepard ] Salut à tous!J'ai une GIGA SUPER GROS problème!!Je développe sous Delphi 7, et je dois faire des impression mais je ne comprend rien, mais alors RIEN Problème impression [ par bouba ] Bonjour, voici le code dont je me suis servis pour tester l'impression d'une simple chaine.procedure TfrmAssistantAvance.Button1Click(Sender: TObject) Passage Delphi 4 -> Delphi 6 [Problème abvec l'opérateur NULL] [ par yoannd ] Bonjour !Je suis en train de passer une appli faite en delphi 4 vers du Delphi 6 et à un endroit, il y a un appel vers une api Windows (ExtractIcon). Problème DDE [ par ccb9902 ] J'ai une form en Delphi 4 avec un DDEClientConv me permettant de faire un liaison DDE et de lancer des macros vers une application VB3 (que je ne peux


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.