Comment Tester une Existence de valeurs dans un StringGrid ?

shao - 4 août 2020 à 09:20
jacofee Messages postés 12 Date d'inscription mercredi 12 août 2020 Statut Membre Dernière intervention 16 août 2020 - 12 août 2020 à 18:02
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

cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 14
Modifié le 4 août 2020 à 11:20
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.
@+
0
cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 14
4 août 2020 à 13:35
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.
@+
0
jacofee Messages postés 12 Date d'inscription mercredi 12 août 2020 Statut Membre Dernière intervention 16 août 2020 1 > cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022
12 août 2020 à 18:02
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,
0
Rejoignez-nous