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 :

Seek de ADOTable n'a jamais fonctionné avec Sql Server


Sujet :

Bases de données Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Seek de ADOTable n'a jamais fonctionné avec Sql Server
    Bonjour,
    à cause de ce 'seek' qui permet la recherche (accès directe) dans une table indexée sur un champ, je me suis converti de VB6 vers DELPHI7, dans l'espoir que ca va fonctionner, mais toujours rien !!!
    je travaille avec SQL Server et Delphi 7 et j'utilise ADO,
    j'ai une table indexée sur le champ 'Nom',
    le problème est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TProc.Button1Click(Sender: TObject);
    begin
    with adotable1
         do begin
            active:=true;                              //(* ça marche  *)
            Connection:=ADOConnection1;     // (* ça marche  *)
            IndexFieldNames:='Nom';             // (* ça marche  *)
            Locate('Adr','aaaa',[loPartialKey]);// (* ça marche  *)
            Sort:='Nom';
            Seek('sarkozy');                // (* ne marche pas *) !!!!!!!!!!!!!!!
            IndexName:='Ix_Nom';   //(* ne marche pas *) !!!!!!!!!!!!!!   
      end;
    end;
    (* message d'erreur: le fournisseur actuel ne prend pas en charge l'interface necessaire pour la fonctionalité d'index *)
    j'ai fais plusieur tentatives et ça m'a pris beaucoup de temps, mais toujours rien.
    ALORS SVP Expliquez moi si vous avez des idées sur le sujet,
    le faite que le seek ne marche pas avec ADO/SQLServer m'a vraiment deçu
    merci pour votre aide.

  2. #2
    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
    Pourrais tu expliquer ce que tu cherches à faire, car ton code comme cela n'aide pas vraiment.
    Autant tu t'y prends mal et c'est pour cette raison que cela ne fonctionne pas.

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    L’application que je suis en cours d’élaborer consiste à effectuer des recherches sur le champs 'numéros d’ordre'.
    En cas ou la recherche aboutie, je dois disposer aussi des enregistrements dont les numéros succèdent ou précèdent cet enregistrement trouvé.
    A savoir ma base pourra contenir 600 000 enregistrements saisis aléatoirement.
    Exemple :
    numéros d’ordre=5000000 se trouve dans la position n°100 de la table
    numéros d’ordre=1000000 se trouve dans la position n°350 000 de la table
    numéros d’ordre=500 se trouve dans la position n°200 000 de la table
    Lors de ma requête de recherche sur le numéro 1000000, je dois disposer du numéro suivant (5000000) et du numéro précédent (500), pour pouvoir faire des traitements sur les différents champs simultanément.

    je rappelle que j'utilise SqlServer2000 /Delphi7/ADO
    Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security
    Info=False;Initial Catalog=gestion;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=poste100;Use Encryption for Data=False;Tag with column collation when possible=False

    J'espère que le sujet vous attire, et je serai content de recevoir vos avis sur le problème en général.
    sinon y'a t'il une autre solution remède
    Bonne journée à tous.

  4. #4
    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 fidelio2007 Voir le message
    Bonjour,
    L’application que je suis en cours d’élaborer consiste à effectuer des recherches sur le champs 'numéros d’ordre'.
    En cas ou la recherche aboutie, je dois disposer aussi des enregistrements dont les numéros succèdent ou précèdent cet enregistrement trouvé.
    A savoir ma base pourra contenir 600 000 enregistrements saisis aléatoirement.
    Exemple :
    numéros d’ordre=5000000 se trouve dans la position n°100 de la table
    numéros d’ordre=1000000 se trouve dans la position n°350 000 de la table
    numéros d’ordre=500 se trouve dans la position n°200 000 de la table
    Lors de ma requête de recherche sur le numéro 1000000, je dois disposer du numéro suivant (5000000) et du numéro précédent (500), pour pouvoir faire des traitements sur les différents champs simultanément.

    je rappelle que j'utilise SqlServer2000 /Delphi7/ADO
    Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security
    Info=False;Initial Catalog=gestion;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=poste100;Use Encryption for Data=False;Tag with column collation when possible=False

    J'espère que le sujet vous attire, et je serai content de recevoir vos avis sur le problème en général.
    sinon y'a t'il une autre solution remède
    Bonne journée à tous.
    Alors je pense déjà que rien que le faites d'utiliser la position dans la base de données est une grosse erreur.
    Le problème que tu risques rencontrer, c'est qu'un numéro ne soit pas le bon car il y a eu des suppressions (donc décalage) d'enregistrements (surtout s'il y a des connexions multiples à ta base de données).

    Sinon, l'utilisation d'un TAdoTable sur une table de 600k enregistrements, ca va pas être du gateau (le temps d'ouverture de la table va être horrible). Il serait préférable de travailler avec des requetes (mais vu la contrainte niveau récupération des données avant et après l'enregistrement, va falloir bien réfléchir à cela).

  5. #5
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci Rayek,
    Bien évidement je ne m’intéresse pas à la position physique des enregistrements, en tout cas les données sont saisies aléatoirement l’un après l’autre lors des ajouts des nouveaux enregistrements, donc forcement chacun prendra sa position en fin de la table, l’un après l’autre, et chacun a un numéro d’ordre différent (500, 100000, 555666, 100, 2, 200000 etc..)
    Effectivement la contrainte que vous avez cité dans la dernière phrase est très importante dans ce projet.
    C’est pour cela que forcement je dois utiliser le ‘seek’ , qui est d’ailleurs le seul remède que j’ai trouvé pour l’instant.
    J’ai trop essayé mais en vain.
    Ma question est la suivante : qu’est ce qu’il faut faire pour le ‘seek’ fonctionne, est ce que c’est un bug ou faut –il faire autre chose pour que ça marche.J’attends avec acharnement vos suggestions, merci a tous

  6. #6
    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
    1- Chose à vérifier : Dans la liste des index possible du composant TAdoTable si l'index, définit dans le code, existe.

    2- : Je pense que tu ne peux modifier un index uniquement dans le cas où la table est fermée. Si non, il est normal que le Seek ne fonctionne pas car tu définis l'index après avoir modifier l'IndexName

    3- : Au vue du fonctionnement du Seek et de ce que tu veux faire autant utiliser une des propriétés de la fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    With AdoTable1 do
    begin
      Close;
      IndexName:='Ix_Nom';  
      Open;
      // Se positionnera juste avant l'enregistrement voulu
      Seek('Breuuhaaa',soBefore); 
     
      // Traitement de l'enregistrement de recherche -1 position
      // ...
      Next;
      // traitement de l'enregistrement recherche
      // ...
      Next;
      // traitement de l'enregistrement recherché +1 position
    end;

  7. #7
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci Rayek d'avoir partager avec moi ce souci,
    je suivrai ce que tu m'a dis et je t'informerai du résultat,
    maintenant je suis occupé par d'autres soucis mais moins epineux que celui ci
    entre temps je te prie de m'informer si tu as d'autres idées à ajouter

  8. #8
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut je laisse tomber l'ADO qui m'a déçu et je passe au BDE
    Bonjour à tous,
    maintenant j'ai presque la certitude que l'ADO n'est pas encore arrivé à ses termes puisqu'il manque de pas mal de fonctions vu l'enquête que j'ai mené pour résoudre mon problème non résolu à ce jour.
    je vous conseille donc d'utiliser le BDE, il est largement meilleur, et on trouvera tout ce quil faut pour manipuler les bases de données sans le moindre souci.
    j'attends vos avis svp, merci à tous...

  9. #9
    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 fidelio2007 Voir le message
    Bonjour à tous,
    maintenant j'ai presque la certitude que l'ADO n'est pas encore arrivé à ses termes puisqu'il manque de pas mal de fonctions vu l'enquête que j'ai mené pour résoudre mon problème non résolu à ce jour.
    Peux tu préciser, car ayant tester les deux, j'ai toujours reussit à faire les même choses avec les deux types de composants.

    Citation Envoyé par fidelio2007 Voir le message
    je vous conseille donc d'utiliser le BDE, il est largement meilleur, et on trouvera tout ce quil faut pour manipuler les bases de données sans le moindre souci.
    j'attends vos avis svp, merci à tous...
    Contrairement à toi, je pense qu'il faut arreter d'utiliser le BDE qui n'est plus mis à jour depuis longtemps et qui tout au long des années va avoir de plus en plus de mal à se connecter avec les bases de données récentes.

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/04/2009, 22h50
  2. ADOTables ou ADOQuery avec sql server
    Par abdelghani_k dans le forum Bases de données
    Réponses: 8
    Dernier message: 21/02/2009, 14h25
  3. Gérer les queue avec sql server ?
    Par devdev dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 17/06/2004, 17h38
  4. Delete on cascade avec SQL server
    Par fadoua dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 14/01/2004, 11h02
  5. Déployer une appli avec SQL SERVER
    Par tiboleo dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 15/10/2003, 14h29

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