Comment Tester une Existence de valeurs dans un StringGrid ?

Signaler
-
Messages postés
12
Date d'inscription
mercredi 12 août 2020
Statut
Membre
Dernière intervention
16 août 2020
-
Bonjour,
Je suis nouveau dans l'environnement delphi et j'ai un Jalon qui me blogue depuis la semaine passée.

J'aimerais faire un teste d'Existence de valeurs dans un StringGrid pour ainsi faire une comparaison avec une table se trouvant dans ma BD SQL SERVER.
1 - J'ai chargé un fichier XLS dans mon StringGrid
2- Je veux tester si les valeurs des cellules du StringGrid n'existe pas encore dans la base avant de faire une insertion ou une mise à jour.

Je serais vraiment ravis d'avoir une aide experte.

Merci d'avance.

1 réponse

Messages postés
257
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
20 août 2020
8
Salut,
il aurait fallut nous dire le type, le nombre de donnée, les composants utilisés, si il y a déjà un préfiltrage sur la table, si plusieur colonne à rechercher etc...
voici un exemple au plus simple tapé en live et non testé à améliorer à ton besoin...
procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  S: string;
begin
  ADODataSet1.First;//On se place au début des valeurs (composant AdoDataSet par exemple)
  while not ADODataSet1.Eof do//On boucle jusqu'à la fin des valeurs du AdoDataSet
  begin
    for I := 0 to StringGrid1.RowCount - 1 do//On regarde chaque ligne de la StringGrid
    begin
      S := StringGrid1.Cells[0,I];//On place la valeur du stringgrid de la colonne 0 en fonction du numéro de la ligne J dans S
      if ADODataSet1.Fields[0].AsString = S then//On compare à la field 0 (colonne) du AdoDataSet
      begin
        ShowMessage(Format('Valeur " %s " trouvée en ligne : %d',[S, I]));//Si on trouve une valeur on indique par message sa valeur et sa ligne dans le stringgrid
        //On enregistre le numéro de ligne doublon du stringgrid ici par exemple pour exclure les lignes lors de l'enregistrement ultérieur des valeurs OK
        Break;//Si on a trouvé une valeur on arrête de chercher
      end;
    end;
    ADODataSet1.Next;//On passe à l'enregistrement suivant du AdoDataSet
  end;
end;

Il faudra peut-être faire l'inverse recherche StringGrid dans ADODataSet pour les perfs...ou enregistrer directement si on a pas trouvé de doublon à la fin de la boucle, les méthodes et solutions restent multiples...mais ceci te donne les pistes de recherche à ton problème.
@+
Messages postés
257
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
20 août 2020
8
re,
par contre un truc me viens, pourquoi ne pas tout faire à partir du SQL avec UPDATE, INSERT, IF etc...il me semble de souvenir que ceci est possible avec un fichier Excel et SQL SERVER,...ceci serait plus simple que de passer par un StringGrid pour des mises à jour futur.
@+
Messages postés
12
Date d'inscription
mercredi 12 août 2020
Statut
Membre
Dernière intervention
16 août 2020
1 >
Messages postés
257
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
20 août 2020

Bonjour,

Il est en effet possible d'insérer le contenu d'une feuille Excel directement dans une table SQL Server, soit via le management studio (procédure manuelle), soit avec SSIS. Une fois la table créée, on peut copier les lignes dans la table cible par un INSERT ou, ce qui est bien plus souple, à l'aide de l'instruction MERGE qui permet d'insérer, mettre à jour ou supprimer des lignes selon les critères définis.
Si l'on ne veut pas gérer la table créée lors de l'import de la feuille Excel, il suffit de la créer dans la base temporaire. Elle sera automatiquement effacée à la fin de la session.

Cordialement,