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

Delphi Discussion :

Contrôle de clé d'une table Mysql


Sujet :

Delphi

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2020
    Messages : 44
    Points : 0
    Points
    0
    Par défaut Contrôle de clé d'une table Mysql
    Bonjour le forum.
    Aidez moi à contrôler la clé d'une table à 3 champs dans le boucle while. J'ai utilisé findkey mais ça ne marche pas correctement

  2. #2
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Bonjour

    Un indice sur la structure de la table, le type de boucle, le traitement qui y est fait ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2020
    Messages : 44
    Points : 0
    Points
    0
    Par défaut
    Stocker ( codpro,DatStock,heure,
    Nature,QteIni,Qte,QteFin)
    La boucle est lié à une table tampon que j'ai créé mais qui prends les données qui correspondent aux données de la table stocker

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2020
    Messages : 44
    Points : 0
    Points
    0
    Par défaut
    La clé est Codpro, datstock, nature

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    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 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Contrôler une clé Qu'est-ce que vous entendez par là ?
    La boucle est liée à une table tampon que j'ai créé mais qui prends les données qui correspondent aux données de la table stocker
    légère éclaircie dans le flou du premier post il s'agirait donc de savoir si le triplet Codpro, datstock, nature existe déjà dans la table cible.

    donc, en consultant ma boule de cristal pas complétement cassée la matin je vois un traitement de ce type

    tant que source n'est pas en fin de fichier
    faire
    si destination existe alors traitement en modification sinon traitement en insertion
    enregistrement suivant de source
    fin faire
    et vous auriez des difficultés avec la partie "si destination existe" que vous traitez en utilisant un findkey.

    Cette technique de findkey aurait pu fonctionner sur un fichier Paradox ou si toute la table destination avait été chargée dans un Dataset, mais dans le cadre d'un SGBD cela n'est pas forcément le cas (ni le besoin) de plus le SQL existe autant s'en servir

    Remplacez findkey par sur une table par Select dans une requête paramétrée exemple :
    SELECT Codpro, datstock, nature from Stocker where codepro=:c and datastock=:d and nature:=nsi codepro est null, ou le nombre d'enregistrement=0 alors la clé n'existe pas

    bien sûr toute la phrase
    si destination existe alors traitement en modification sinon traitement en insertion
    peut aussi se traiter de manière plus "SQL" exemple

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO table (Codpro,datstock,heure,nature,QteIni,Qte,qtefin) VALUES(:code,:datestock,:heure,:nature,:qteini,:qte,:qtefin) 
    ON DUPLICATE KEY UPDATE ...Qte=Qte+:qte, <autres>
    Remarquez l'utilisation extensive de paramètres

    Attention quand même, je ne suis pas un spécialiste MySQL et le DUPLICATE KEY doit certainement s'appliquer sur une clé unique , lisez la doc
    ma boule de cristal ne sait pas lire

    En conclusion : Donner toutes les informations dans votre demande apportera de bien meilleures réponses
    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 émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 483
    Points : 2 734
    Points
    2 734
    Billets dans le blog
    10
    Par défaut
    Peut être faire une requête via un select distinct sur les trois première colonne citées et des fonction d'agrégation pour les autres colonnes

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2020
    Messages : 44
    Points : 0
    Points
    0
    Par défaut
    Justement c'est ce que ça affiche comme message quand je lance l'exécutable "duplicate key" et ça bloque le processus en cours. Au faites dans la boucle de la table tampon le champ codpro de la table stocker prend la valeur code de la table tampon pour faire le contrôle. Ce qui n'a pas marché. Utiliser Query n'est pas la solution.

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    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 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Tant que vous ne nous mettrez pas un tant soit peu de votre code nous ne pourrons que spéculer !
    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

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2020
    Messages : 44
    Points : 0
    Points
    0
    Par défaut
    Je vous envoie le code écris alors :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Tampon1.First;
    While not Tampon1.Eof do
    begin
    If Produit.FindKey([Tampon1.Fields[0].asstring]) then
    begin
    Produit.Edit;
    Produit.FieldByName('Stock').AsFloat := Produit.FieldByName('Stock').AsFloat-Tampon1.Fields[3].asfloat;
    Produit.Post;
    end;
    Vente.AppendRecord([Edit5.Text, Tampon1.Fields[0].AsString, Tampon1.Fields[3].AsFloat, Tampon1.Fields[5].Asfloat, Tampon1.Fields[6].Asfloat]);
    som := som + Tampon1.Fields[6].AsInteger;
    //Tot := Tot + Tampon1.Fields[7].AsInteger;
    tampon.First;
    while not tampon.Eof do
    begin
    if (tampon.FieldByName('CodTam').AsString = Tampon1.Fields[0].asstring)then
    begin
    tampon.Edit;
    tampon.Fields[3].AsFloat := tampon1.FieldByName('QteFin').AsFloat;
    tampon.Post;
    break;
    end
    else
    tampon.Next;
    end;
    Stocker.First;
    if Stocker.FindKey([Tampon1.Fields[0].AsString, Datetimepicker1.DateTime, 'Sortie']) then
    begin
    Stocker.Edit;
    Stocker.FieldByName('Qte').AsFloat := Stocker.FieldByName('Qte').AsFloat + tampon1.FieldByName('Qte').AsFloat;
    Stocker.FieldByName('QteFin').AsFloat := tampon1.FieldByName('QteFin').AsFloat;
    Stocker.FieldByName('Heure').AsString := edit12.Text;
    Stocker.Post;
    end
    else
    begin
    Stocker.Insert;
    Stocker.FieldByName('CodPro').AsString := Tampon1.Fields[0].AsString;
    Stocker.FieldByName('DatStock').AsDateTime := Datetimepicker1.DateTime;
    Stocker.FieldByName('Heure').AsString := edit12.Text;
    Stocker.FieldByName('Nature').AsString := 'Sortie';
    Stocker.FieldByName('QteIni').AsFloat := tampon1.FieldByName('QteIni').AsFloat;
    Stocker.FieldByName('Qte').AsFloat := tampon1.FieldByName('Qte').AsFloat;
    Stocker.FieldByName('QteFin').AsFloat := tampon1.FieldByName('QteFin').AsFloat;
    Stocker.Post;
    end;
    Tampon1.Next;
    end;

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 429
    Points : 24 794
    Points
    24 794
    Par défaut
    Locate serait plus lisible ! non ?
    Avez-vous vérifier in IndexName ou IndexFieldNames qu'ils sont bien comme prévu pour FindKey

    Il ne serait pas plus simple d'écrire un script SQL avec quelques paramètres, au besoin une table temporaire ?
    Cela sera en plus nettement plus performant pour ce type de recodage de masse

    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    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 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Les lignes 26 à 46 sont remplaçables par le INSERT INTO .... ON DUPLICATE UPDATE
    ne sachant pas de quels composants de données il s'agit difficile de faire un code exact.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // en dehors de la boucle
    Stocker.SQL.text:='INSERT INTO table (Codpro,datstock,heure,nature,QteIni,Qte,qtefin) ';
    Stocker.SQL.add(VALUES(:codepro,:datestock,:heure,:nature,:qteini,:qte,:qtefin));
    Stocker.SQL.add('ON DUPLICATE KEY UPDATE Qte=Qte+:uqte,qtefin=:uqtefin,Heure=:uheure');
    Stocker.Prepare;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Stocker.FieldByName('uQte').AsFloat := tampon1.FieldByName('Qte').AsFloat;
    Stocker.ParamByName('uQteFin').AsFloat := tampon1.FieldByName('QteFin').AsFloat;
    Stocker.ParamByName('uHeure').AsString := edit12.Text;
     
    Stocker.ParamByName('CodPro').AsString := Tampon1.Fields[0].AsString;
    Stocker.ParamByName('DatStock').AsDateTime := Datetimepicker1.DateTime;
    Stocker.ParamByName('Heure').AsString := edit12.Text;
    Stocker.ParamByName('Nature').AsString := 'Sortie';
    Stocker.ParamByName('QteIni').AsFloat := tampon1.FieldByName('QteIni').AsFloat;
    Stocker.ParamByName('Qte').AsFloat := tampon1.FieldByName('Qte').AsFloat;
    Stocker.ParamByName('QteFin').AsFloat := tampon1.FieldByName('QteFin').AsFloat;
    Stocker.ExecSQL;


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Tampon1.First;
    While not Tampon1.Eof do
    begin
    //If Produit.FindKey([Tampon1.Fields[0].asstring]) then
    // begin
    //Produit.Edit;
    //Produit.FieldByName('Stock').AsFloat := Produit.FieldByName('Stock').AsFloat-Tampon1.Fields[3].asfloat;
    //Produit.Post;
    //end;
    remplacable par, si firedac, un simple  
      FDConnexion.ExecSQL('UPDATE PRODUIT SET STOCK=STOCK+:Q WHERE CODEPRO=:C',[Tampon1.Fields[3].asfloat,Tampon1.Fields[0].asstring]);
    sinon  par une requête, un passage de paramètre et un execsql
    Les lignes 13 à 25 me posent beaucoup de doutes

    un petit pour ShaiLeTroll et son Locate, en effet je suis parti sur le fait que Codpro,datstock,nature formaient la clé primaire mais il faudrait me le prouver
    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

  12. #12
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 076
    Points : 5 541
    Points
    5 541
    Par défaut
    Citation Envoyé par Pascal AFATONDJI Voir le message
    Justement c'est ce que ça affiche comme message quand je lance l'exécutable "duplicate key" et ça bloque le processus en cours. Au faites dans la boucle de la table tampon le champ codpro de la table stocker prend la valeur code de la table tampon pour faire le contrôle. Ce qui n'a pas marché. Utiliser Query n'est pas la solution.
    C'est un peu normal !!!

    Les blocs try except c'est fait pour ça... Mais je vois dans ton code qu'il n'y en a pas... Donc la procédure en cours d'exécution stoppe tout simplement sur l'erreur
    Et tu n'a pas de transaction non plus, bonjour l'intégrité de ta base...

    On doit fait ceci lorsque l'on traite des mises à jour de base de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    try
    // Début de transaction
    // Boucle
    // Execution des requêtes ici
    // Fin de boucle
    // Validation de la transaction
    except on E:Exception do
        begin
        // Annuler la transaction
        // Traiter l'erreur (affiche un message, autre traitement, etc...
        end;
    end;
    Après faut lire aussi la doc MySQL...

    Comme te l'a dit SergioMaster plus haut : INSERT IGNORE et INSERT... ON DUPLICATE UPDATE... ça doit bien servir à quelque chose... Ou alors ils l'ont juste fait pour se faire plaisir à toi de voir....

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2020
    Messages : 44
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Pascal AFATONDJI Voir le message
    Je vous envoie le code écris alors :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Tampon1.First;
    While not Tampon1.Eof do
    begin
    If Produit.FindKey([Tampon1.Fields[0].asstring]) then
    begin
    Produit.Edit;
    Produit.FieldByName('Stock').AsFloat := Produit.FieldByName('Stock').AsFloat-Tampon1.Fields[3].asfloat;
    Produit.Post;
    end;
    Vente.AppendRecord([Edit5.Text, Tampon1.Fields[0].AsString, Tampon1.Fields[3].AsFloat, Tampon1.Fields[5].Asfloat, Tampon1.Fields[6].Asfloat]);
    som := som + Tampon1.Fields[6].AsInteger;
    //Tot := Tot + Tampon1.Fields[7].AsInteger;
    tampon.First;
    while not tampon.Eof do
    begin
    if (tampon.FieldByName('CodTam').AsString = Tampon1.Fields[0].asstring)then
    begin
    tampon.Edit;
    tampon.Fields[3].AsFloat := tampon1.FieldByName('QteFin').AsFloat;
    tampon.Post;
    break;
    end
    else
    tampon.Next;
    end;
    Stocker.First;
    if Stocker.FindKey([Tampon1.Fields[0].AsString, Datetimepicker1.DateTime, 'Sortie']) then
    begin
    Stocker.Edit;
    Stocker.FieldByName('Qte').AsFloat := Stocker.FieldByName('Qte').AsFloat + tampon1.FieldByName('Qte').AsFloat;
    Stocker.FieldByName('QteFin').AsFloat := tampon1.FieldByName('QteFin').AsFloat;
    Stocker.FieldByName('Heure').AsString := edit12.Text;
    Stocker.Post;
    end
    else
    begin
    Stocker.Insert;
    Stocker.FieldByName('CodPro').AsString := Tampon1.Fields[0].AsString;
    Stocker.FieldByName('DatStock').AsDateTime := Datetimepicker1.DateTime;
    Stocker.FieldByName('Heure').AsString := edit12.Text;
    Stocker.FieldByName('Nature').AsString := 'Sortie';
    Stocker.FieldByName('QteIni').AsFloat := tampon1.FieldByName('QteIni').AsFloat;
    Stocker.FieldByName('Qte').AsFloat := tampon1.FieldByName('Qte').AsFloat;
    Stocker.FieldByName('QteFin').AsFloat := tampon1.FieldByName('QteFin').AsFloat;
    Stocker.Post;
    end;
    Tampon1.Next;
    end;

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2020
    Messages : 44
    Points : 0
    Points
    0
    Par défaut
    Monsieur Sergio Merci pour votre appui mais j'ai essayé votre code mais ça ne prends pas. il me dit même ExecSQL n'est pas declaré. je fais comment

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2020
    Messages : 44
    Points : 0
    Points
    0
    Par défaut
    Comment integré alors la fonction Try alors

  16. #16
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    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 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Pascal AFATONDJI Voir le message
    Monsieur Sergio Merci pour votre appui mais j'ai essayé votre code mais ça ne prends pas.
    Oui, j'ai fait une erreur en recopiant bêtement tout les fieldByname pour garder une cohérence avec votre programme et ai oublié de les remplacer par des ParambyName. Oubli qui est réparé
    il me dit même ExecSQL n'est pas declaré. je fais comment
    En nous disant déjà de quel type de composant de connexion aux bases de données il s'agit !
    pour moi , avec Firedac ce serait : un FDConnection, Stocker : un FDQuery

    @Sergio_is_Back je n'ai même pas voulu m'embarquer dans les parties transactions, et même les possibilités d'ArrayDML de Firedac ou encore plus étonnant le LocalSQL, on n'a même pas la version de Delphi utilisée
    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

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2020
    Messages : 44
    Points : 0
    Points
    0
    Par défaut
    il y a pas une autre fonction a part Query sinon j'ai essayé le remplaçant mais ça n'a pas marché
    sinon au faite ça fait le contrôle mais ça ratte par moment et bloque le processus d'établissement de la facture.
    je veux aussi vous faire comprendre que Mysql fonctionne ici comme paradox

  18. #18
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    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 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Pascal AFATONDJI Voir le message
    je veux aussi vous faire comprendre que Mysql fonctionne ici comme paradox
    j'ai une mercedes (je ne ferais pas la grâce de qualifier MySQL de plus que ça) et je m'en sers comme une deux chevaux
    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

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2020
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2020
    Messages : 44
    Points : 0
    Points
    0
    Par défaut
    excusez moi j'utilise delphi7

  20. #20
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 076
    Points : 5 541
    Points
    5 541
    Par défaut
    Citation Envoyé par Pascal AFATONDJI Voir le message
    je veux aussi vous faire comprendre que Mysql fonctionne ici comme paradox
    Non MySQL ne fonctionnera jamais comme Paradox !!!

    C'est comme si tu prend une voiture et un hélicoptère : c'est un moyen de transport mais ça marche pas pareil !
    T'as déjà essayé de prendre une autoroute avec un hélicoptère, le péage ça doit être coton !!!

    Faut déjà commencer par implémenter des try except dans ton code, exemple plus concret, si je reprend un bout de ton code :

    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
    18
    19
    20
    21
    22
     
    Stocker.First;
    if Stocker.FindKey([Tampon1.Fields[0].AsString, Datetimepicker1.DateTime, 'Sortie']) then
    begin
    Stocker.Edit;
    Stocker.FieldByName('Qte').AsFloat := Stocker.FieldByName('Qte').AsFloat + tampon1.FieldByName('Qte').AsFloat;
    Stocker.FieldByName('QteFin').AsFloat := tampon1.FieldByName('QteFin').AsFloat;
    Stocker.FieldByName('Heure').AsString := edit12.Text;
    Stocker.Post;
    end
    else
    begin
    Stocker.Insert;
    Stocker.FieldByName('CodPro').AsString := Tampon1.Fields[0].AsString;
    Stocker.FieldByName('DatStock').AsDateTime := Datetimepicker1.DateTime;
    Stocker.FieldByName('Heure').AsString := edit12.Text;
    Stocker.FieldByName('Nature').AsString := 'Sortie';
    Stocker.FieldByName('QteIni').AsFloat := tampon1.FieldByName('QteIni').AsFloat;
    Stocker.FieldByName('Qte').AsFloat := tampon1.FieldByName('Qte').AsFloat;
    Stocker.FieldByName('QteFin').AsFloat := tampon1.FieldByName('QteFin').AsFloat;
    Stocker.Post;
    end;
    On transforme comme ça

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    try
        Stocker.Insert;
        Stocker.FieldByName('CodPro').AsString := Tampon1.Fields[0].AsString;
        Stocker.FieldByName('DatStock').AsDateTime := Datetimepicker1.DateTime;
        Stocker.FieldByName('Heure').AsString := edit12.Text;
        Stocker.FieldByName('Nature').AsString := 'Sortie';
        Stocker.FieldByName('QteIni').AsFloat := tampon1.FieldByName('QteIni').AsFloat;
        Stocker.FieldByName('Qte').AsFloat := tampon1.FieldByName('Qte').AsFloat;
        Stocker.FieldByName('QteFin').AsFloat := tampon1.FieldByName('QteFin').AsFloat;
        Stocker.Post;
    except on E:Exception do
        // Si on tombe ici, il y a eu une erreur, il faut savoir laquelle !!!
        begin
            if Pos('DUPLICATE',E.Message)>0 then
            begin
                  // C'est juste une clé dupliquée, on fait alors un update
                  Stocker.CancelUpdates;
                  Stocker.Edit;
                  Stocker.FieldByName('Qte').AsFloat := Stocker.FieldByName('Qte').AsFloat + tampon1.FieldByName('Qte').AsFloat;
                  Stocker.FieldByName('QteFin').AsFloat := tampon1.FieldByName('QteFin').AsFloat;
                  Stocker.FieldByName('Heure').AsString := edit12.Text;
                  Stocker.Post;
            end
            else
            begin
                 // C'est pas une valeur dupliquée, c'est plus grave
                 MessageDlg(E.Message,mtError,[mbOk],0);
            end;
        end;
    end;
    Bon alors bien sur, j'écris ça brut sans tester, faudra peu être adapter un peu, mais ça devrai aller sans faire de gros changements
    Du coup plus besoin du Find, ça va drôlement accélérer ta routine !!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Es-ce possible de créer une table MySQL avec MS Excel
    Par pierrot10 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 16/10/2005, 07h30
  2. Vider une table MySQL suite à javascript:confirm()
    Par anutka dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 16/09/2005, 13h16
  3. Connaître le type d'un champs d'une table Mysql
    Par xoran dans le forum Langage SQL
    Réponses: 1
    Dernier message: 20/07/2005, 10h29
  4. Comment importer un document CSV dans une table MySql ?
    Par magic8392 dans le forum Requêtes
    Réponses: 6
    Dernier message: 04/02/2005, 12h03

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