IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Equivalent de Findkey BDE en INTERBASE ?


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 98
    Points : 50
    Points
    50
    Par défaut Equivalent de Findkey BDE en INTERBASE ?
    Bonjour à tous,

    Je viens de quitter BDE pour aller vers INTERBASE plus stable et C/S. Mais malheureusement je rencontre quelques difficultés.

    1) Comment lire directement un enregistrement avec une clé en INTERBASE ?

    A) En paradox je fais : Table1.FindKey([DBEDIT1.TEXT,DBEDIT3.TEXT]).
    Quel est son equivalent en INTERBASE ?

    B) En paradox je fais : Table3.FindNearest([DBEDIT1.TEXT,DBEDIT3.TEXT]);
    Quel est son equivalent en INTERBASE ?

    C) En paradox je fais : Table3.IndexName:='XLIBE'; // INDEX SECONDAIRE
    Quel est son equivalent en INTERBASE ?

    D) En paradox je fais : Table3.IndexName:=''; // INDEX PRIMAIRE
    Quel est son equivalent en INTERBASE ?

    Merci à tous ceux qui nous aide .

  2. #2
    Inscrit
    Inscrit en
    Juin 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 103
    Points : 77
    Points
    77
    Par défaut
    Bonjour,
    Si tu utilise les composant IBX , tu a IBquery et faire des requettes.
    bon courrage.

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 98
    Points : 50
    Points
    50
    Par défaut
    Avec IBquery je dois filtrer pour une certaine clé puis tester si la recherche est true ou false, ça mache de cette maniére. Quand la table est de taille
    réduite le temps de réponse est acceptable , mais si la table est volumuneuse
    je crois que la recherche sera longue , n'est ce pas ?

    Mais moi je veux accéder directement à une IBtable comme je l'ai toujours fait
    avec BDE , DBASE IV ou COBOL. Possible ou non ?

    Si j'ai bien compris en INTERBASE on doit toujours utiliser les requêtes via
    IBquery pour accéder au données de IBtable. D'ailleurs c'est ce que je fais
    pour le moment car je n'ai pas d'autre choix. "A DEFAUT DE GRIVES ON MANGES DES MERLES ".

    Merci pour m'avoir diriger vers IBquery , c'est tjrs utile de faire des requêtes.

  4. #4
    Inscrit
    Inscrit en
    Juin 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 103
    Points : 77
    Points
    77
    Par défaut
    bon soir ,
    il ne faut pas oublier l'utilisation des Procedures stockés.
    Lien utile :

    http://levieux.developpez.com/tutops...s/tutopsib.pdf

    bon courage.

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    FAUTE DE MERLES MANGEONS PLUTÔT DES GRIVES

    C'est plutôt ainsi qu'il faudrait voir les choses lorsque l'on parle de Query (je devrais plutôt dire SQL) et d'environnement C/S .

    Je vais essayer de démontrer cela , en schématisant et grossissant un peu les traits

    Que fais le BDE ou un IBTable (d'ailleurs) ils sélectionnent tous les enregistrement d'une table se trouvant sur le Disque Dur pour les envoyer en mémoire sur le Client (vous remarquerez donc une forte augmentation du trafic réseau non ? ) bref c'est l'équivalent d'une query
    SELECT * FROM MATABLE ORDER BY UNINDEX (n'oublions pas l'index pour faire comme BDE, ce qui répond déjà a une question )

    A contrario en utilisant un SQL , bien écrit cela s'entend , on ne demandera au serveur que les champs (ou colonnes si l'on parle d'une SGBD) et les enregistrements (ou lignes 'raws') nécessaires
    SELECT A1,A2,A3 FROM MATABLE WHERE MESCONDITIONS ORDER BY MON INDEX

    ce qui bien entendu , fera un trafic moindre sur le réseau et moins de travail pour le serveur

    voici un test "simple" prenez un grosse table de 1000000.... enregistrements et recherchez à l'intérieur de celle-ci un enregistrement particulier (le fameux findkey que l'on remplace par un Locate )
    Que se passe t-il sur le réseau ?
    Avec IBTable
    le serveur envoi toute la table sur le client et le client fait sa recherche
    Pour moi ceci est un merle

    Avec une Query
    le serveur n'envoi que l'enregistrement demandé . Oui , mais me demanderez-vous : "et le choix de l'index" , et bien c'est le serveur qui s'en charge selon votre clause WHERE (ou selon le PLAN que vous avez indiqué mais là , je m'égare)
    : "Et si l'enregistrement n'existe pas" , et bien les valeurs retournées seront égales à null , un simple test après le open suffira à savoir si l'enregistrement demandé existait ou non .
    pour moi ceci est une grive

    Pour vraiment vous en convaincre , faites l'essai avec un VPN et non en réseau local et comparez les temps de réponse


    Cette petite démonstration répondant même aux questions posées

    A : SELECT .... FROM ... WHERE
    C,D: SELECT .... FROM ... WHERE .... ORDER BY .....

    Reste B qui restera avec un Locate (je doit avouer que j'utilise très peu)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    Question complémentaire à @SergioMaster.

    Je suis convaincu depuis longtemps par l'efficacité de SQL. Cependant, je me pose une question depuis quelque temps.

    Sans faire une utilisation importante de Locate, il m'est parfois nécessaire pour me positionner sur un enregistrement dans un Grid.

    Supposons que je fasse la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select Col1, col2, Col3 From Table Where Condition Order By Col1
    La condition représente 10 enregistrements présentés sur 1000 enregistrements présents dans la base. Ils sont numérotés de 1 à 10 dans la col1.

    Si je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query.Locate('Col1', 5, [])
    quel va être le trafic sur le réseau ?

    Les 10 premiers enregistrements étant en mémoire, le Locate ne va parcourir que les 10 présents en mémoire ou va-t-il charger toute les enregistrements de la base (1000 dans le cas présent) pour retrouver le n° 5.

    Personnellement, je pense qu'il va se limiter au 10 présents en mémoire, mais je voudrais bien que tu me confirmes ou m'infirmes mon raisonnement.

    D'autre part, existe-il une autre méthode pour se positionner sur l'enregistrement d'un Grid sans utiliser Locate ?

    Merci de ta réponse.

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par seabs Voir le message
    Personnellement, je pense qu'il va se limiter au 10 présents en mémoire, mais je voudrais bien que tu me confirmes ou m'infirmes mon raisonnement.
    Je te confirmes ce que tu penses

    Citation Envoyé par seabs Voir le message
    D'autre part, existe-il une autre méthode pour se positionner sur l'enregistrement d'un Grid sans utiliser Locate ?
    Pour ma part, je n'ai pas connaissances d'un autre moyen (First, Une boucle avec un next + comparaison sur le champ )
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    @Rayek

    Merci pour ta réponse, ainsi qu'à tous ceux qui sont intervenus sur ce sujet. J'ai acquis une confirmation qui m'évitera de me poser des questions lorsque j'utilise Locate

    A plus

Discussions similaires

  1. L'equivalent de "computed by" d'interbase en pg
    Par Socrat dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 02/08/2008, 15h06
  2. bde et interbase 6
    Par lucho.66 dans le forum InterBase
    Réponses: 1
    Dernier message: 04/08/2006, 15h36
  3. Interbase 5.6 et bde sur machine puissante
    Par delphi5user dans le forum InterBase
    Réponses: 3
    Dernier message: 19/05/2005, 12h03
  4. Réponses: 2
    Dernier message: 28/01/2005, 06h43
  5. Equivalence de SPOOL (Oracle) pour interbase?
    Par Cerberes dans le forum InterBase
    Réponses: 1
    Dernier message: 02/12/2004, 09h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo