Comment Tester une Existence de valeurs dans un StringGrid ?
shao
-
4 août 2020 à 09:20
jacofee
Messages postés12Date d'inscriptionmercredi 12 août 2020StatutMembreDernière intervention16 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.
cs_yanb
Messages postés271Date d'inscriptionlundi 27 octobre 2003StatutMembreDernière intervention 7 juillet 202214 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.
@+
cs_yanb
Messages postés271Date d'inscriptionlundi 27 octobre 2003StatutMembreDernière intervention 7 juillet 202214 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.
@+
jacofee
Messages postés12Date d'inscriptionmercredi 12 août 2020StatutMembreDernière intervention16 août 20201
>
cs_yanb
Messages postés271Date d'inscriptionlundi 27 octobre 2003StatutMembreDerniè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.
4 août 2020 à 13:35
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.
@+
12 août 2020 à 18:02
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,