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 :

DROP TABLE suivi d'une autre action


Sujet :

Bases de données Delphi

  1. #1
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut DROP TABLE suivi d'une autre action
    Bonjour à tous,

    le code suivant va chercher dans un fichier texte le nom des requêtes créées dans ma DB ACCESS et les place dans un TStringList. Une boucle qui exécute ces requêtes et un test sur une des requêtes ([Query 01 Création Tableau Zmir0678 aujourdhui]). Ensuite je fait appel à GetTableNames pour tester l'existance d'une table bien précise (Zmir0678 aujourdhui) => si elle existe, je la supprime avec un DROP TABLE sinon j'exécute la requête qui s'occupe de créer la table. Le problème c'est que même si le DROP fonctionne j'ai un message lors de l'exécution de cette requête me disant que la table 'Zmir0678 aujourdhui' existe déja (Alors que dans ACCESS, la table a bien disparu) !!! je comprend pas !!

    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
    procedure TfrmMain.btnqueryClick(Sender: TObject);
    var
    i,j:integer;
    SL: TStringList;
    begin
      SL:=TStringList.Create;
      ADOConnection1.GetTableNames(SL,False);
      for i:=0 to strlistQuery.Count-1 do
      begin
        self.Cursor:=crHourGlass;
        shape1.Brush.Color:=clred;
        Panel1.Caption:='Requête "'+strlistQuery[i]+'" en cours d''exécution ...';
        adocommand1.CommandText:=strlistQuery[i];
     
        if strlistQuery[i]='[Query 01 Création Tableau Zmir0678 aujourdhui]' then
        begin
          if frmdatevalue.ShowModal=mrOk then
          begin
            adocommand1.Parameters.AddParameter;
            adocommand1.Parameters[0].DataType:=ftDate;
            adocommand1.Parameters[0].Value:=formatdatetime('dd/mm/yyyy',frmDateValue.varvalue);
     
            for j:=0 to SL.Count-1 do
            begin
              if SL[j]='Zmir0678 aujourdhui' then
              begin
                ADOQuery1.Close;
                ADOQuery1.SQL.Text:='DROP TABLE [Zmir0678 aujourdhui]';
                ADOQuery1.ExecSQL;
                Break;
              end;
            end;
          end;
     
        end;
        Application.HandleMessage;
        adocommand1.Execute;
        Application.ProcessMessages;
      end;
      shape1.Brush.Color:=$0000CE00;
      //PlaySound(PChar(ExtractFilePath(Application.ExeName)+'/leon.wav'),Handle,SND_ASYNC);
     
      self.Cursor:=crDefault;
      Panel1.Caption:='En attente d''instruction'
    end;
    Avez-vous une idée ?
    Merci d'avance pour votre aide !
    [Il était une fois Delphi ....]


  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Encore ton problème avec cette requête qui fait une insertion dans une table créé à la volée ?

    Franchement je ne sais pas quoi te dire Access c'est

    Peut-être auras-tu plus de chance en posant ta question au niveau du forum Access

    Par contre quand tu expliques ton problème penses bien à indiquer que cet espèce d'ancêtre de la procédure stockée ([Query 01 Création Tableau Zmir0678 aujourdhui]) insère ses données dans une table créée à la volée (n'hésite pas à mettre le code) et expliquer ton problème de manière pas orientée code Delphi mais "parler Access".
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  3. #3
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Et oui, encore ce problème !

    J'ai bien peur que tu ais raison à propos d'ACCESS, mais malheureusement ce n'est pas mon choix !

    Le problème c'est qui si je post sur le forum ACCESS ils ne pourront sans doute pas me répondre car lorsque je fais tourner cette requete directement dans ACCESS, je n'ai pas de problème donc pas vraiment de question à poser.

    je me demande si ACCESS à le temps de comprendre que j'ai virer la table ?
    [Il était une fois Delphi ....]


  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Ça dépend comment tu présentes les choses, tu peux très bien leur dire que justement lorsque tu fais tourner la requête dans Access même cela fonctionne très bien mais que dès que tu veux exécuter la même requête depuis un programme qui se connecte à la base via ADO (si c'est bien ADO) plantage et problème de table déjà existante.

    De toute façon tu n'as rien à perdre, précises bien cependant que tu n'es pas maître sur la DB ou les requêtes et que donc il faut se débrouiller "en l'état".

    As-tu vérifié que la boucle pour lancer le DROP TABLE fonctionne correctement i.e. qu'il rentre bien dedans si la table existe ?

    As-tu vérifié que si tu exécute un DROP TABLE la table est bel et bien supprimer dans Access (on sait jamais ) ?
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  5. #5
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Effectivement je n'ai rien à perdre et vais donc le faire.

    Il s'agit bien d'une connection ADO et oui j'ai bien vérifié qu'il passait dans la boucle et la table est bien supprimée.

    Quelle M... ACCESS

    Merci de ton aide
    [Il était une fois Delphi ....]


  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    je vais peut-être dire une connerie (je ne travaille pas (rarement) avec ACCESS et pour cause )
    as-tu essayé après le drop de la table une déconnexion / reconnexion
    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

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut

    1) je regarde ton code et la je commence a avoir un doute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SL:=TStringList.Create;
      ADOConnection1.GetTableNames(SL,False);
      for i:=0 to strlistQuery.Count-1 do
    C'est quoi strlistQuery ???
    2) tu peu peut être placer un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.processmessages
    pour laisser respirer windows
    3) donc tu créer une table pour la détruire ensuite ???
    4) ceci n'est surement pas une requette valide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query 01 Création Tableau Zmir0678 aujourdhui
    5) si tu nous disait ce que tu veut obtenir exactement

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  8. #8
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    je vais peut-être dire une connerie (je ne travaille pas (rarement) avec ACCESS et pour cause )
    as-tu essayé après le drop de la table une déconnexion / reconnexion
    oui j'ai déja essayé mais ça change rien !

    je regarde ton code et la je commence a avoir un doute
    strlistquery c'est un TStringList contenant le nom des query à exécuter qui est rempli à la création de l'appli !!

    donc tu créer une table pour la détruire ensuite ???
    oui, j'exécute une requête se trouvant dans ACCESS (que mon boss à écrite) qui supprime la table, la recrée et la rempli avec le contenu d'une autre table.

    Bon, le but de cette appli c'est :

    chaque matin au boulot nous devons utiliser cette DB (celle sur laquelle je travaille) . Faire tourner toute une série de requête dans un ordre bien précis et ça fonctionne très bien mais je trouve cela très lourd (attendre la fin d'exécution d'une requête pour pouvoir lancer la suivante ), c'est pourquoi j'ai décidé de développer un interface faisant tout ça comme une grande.

    Le plus étrange c'est que parfois mon interface fonctionne 3 fois de suite et puis c'est le plantage avec le message "la table Zmir0678 aujourdhui existe déja".

    je ne comprend plus rien !
    [Il était une fois Delphi ....]


  9. #9
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    snif snif

    je viens de lancer mon appli une dizaine de fois et à la 11è patatrac : message d'erreur me disant : "L'enregistrement a été supprimé"


    [Il était une fois Delphi ....]


  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Est-il possible d'interragir entre plusieurs DB ACCESS, et si oui, essaye de créer cette table de travail dans une autre base, ainsi tu supprime carrément la base, et tu la récrée totalement ... si évidemment, la suite du process l'autorise (effectivement, devoir tous les matins, faire ses requêtes, ça doit faire chier et faire perdre du temps ...)

    Si c'est n'est pas possible, j'ignore comment tu souhaite manipulé tes données par la suite, mais si c'est pour Report ou un balayage while EOF Next, tu pourrais voir pour un stockage à court terme dans un XML du TClientDataSet (DBClient.pas et MidasLib.dcu), encore une fois, l'application qui doit utiliser la base, peut-elle le supporter sans tout devoir refaire ...

    Ton application fonctionne-t-elle au moins systèmatiquement la 1ère fois ?
    Si oui, tu as une fuite mémoire, ou un truc du genre, ou une rémanence dans les objets ADO, tu dois partir à la chasse des objets (fermer tout DataSet, détruire et recréer la connexion par exemple)
    Si non, c'est bcp plus chiant, c'est que tu as un bug imprévisible qui ne dépend même pas d'une erreur de ton application ou de la couche ADO
    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
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Encore une fois, ce n'est pas ma base et je préfère donc la tripoter un minimum. c'est à dire que je veux absolument me contenter d'exécuter les requêtes existantes ni plus ni moins !

    Ton application fonctionne-t-elle au moins systèmatiquement la 1ère fois ?
    dans 80% des cas oui mais dans les 20 autres % j'ai ce foutu message "L'enregistrement est supprimé" et toujours après le "DROP TABLE". C'est complètement aléatoire et c'est pour ça que j'ai plus tendance à dire que c'est soit un problème mémoire soit un problème de gestion de file d'attente !

    Est-ce que les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ProcessMessage
    sont judicieusement placés ?
    [Il était une fois Delphi ....]


  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Erreur dès la première execution, ça c'est génant, ... car le problème mémoire n'est pas de ton ressort, par contre, de file d'attente surement plus !

    Alors, les Application.ProcessMesssages, hum, essaye de sleep(10) avant ! dans une lib que j'ai utilisé c'était nécessaire pour que le thread qui envoyait les requêtes, ne les cumulent pas parce qu'il n'a pas assez de temps pour envoyer les requêtes aussi vite que l'on les génère ...
    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

  13. #13
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    hum ... le sleep ? vais essayer ça
    dans tous les cas merci

    malheureusement même le sleep ne résoud pas mon problème (dont je ne connait pas la source) !

    je ne sais plus quoi faire !!

    N'y a t'-il pas moyen que je file mon projet et la DB (les DB parce qu'il y a des table liées) à quelqu'un pour une petite analyse ?

    please please please help me

    via mon ftp par exemple

    y a t-il une âme charitable parmi vous ?
    [Il était une fois Delphi ....]


  14. #14
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Où as-tu mis le Sleep ?
    Je ne vois qu'après le ExecSQL ou avant le Execute, pourque cela ait un effet mais faudrait que le driver ACCESS soit Asynchrone, cela me semble peu probable ...
    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

  15. #15
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    j'ai mis le sleep juste après le ExecSQL et j'ai essayé en le mettant avant le exécute mais rien n'y fait

    ce qui est troublant, c'est que j'ai lancé l'exécution avec uniquement cette requête (donc je n'en demande pas de trop) et le problème est toujours présent !
    [Il était une fois Delphi ....]


  16. #16
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    C'est comme si il y avait un tampon ...
    tu ouvres la connexion
    tu créés l'objet query
    tu lance la requête de création de la table -> BOOM
    tu ne fais rien d'autre ?

    essaye de fermer\ré-ouvrir la connexion avant de lancer la requête
    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

  17. #17
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    - j'ouvre la connection
    - je DROP la table avec l'objet TADOQuery si je la trouve avec GetTables Names()
    - je lance la requête avec l'objet TADOCommand et comme tu dis ==> BOOM

    ni plus ni moins

    j'ai déja essayé de fermer/ouvrir la connection

    ce qui m'énerve c'est que je ne sais pas si le problème vient d'ACCESS ou de la connection ADO
    [Il était une fois Delphi ....]


  18. #18
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    As tu essayé, de juste lancer la requête de Création (en effaçant toi même la table via ACCESS) pour voir si c'est en fait le DROP qui foire sans le dire ...

    peut-être en boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Connexion
    GetTableNames
    while Table.Exists do
    begin
      Drop 
      Deconnexion (Free du composant carrément)
      Connexion (un autre TADOConnexion)
      GetTableNames
    end;
    Connexion (encore un autre TADOConnexion)
    Create
    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

  19. #19
    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
    Avec des requêtes en séries, il serait bien d'utiliser les transactions

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    procedure TfrmMain.btnqueryClick(Sender: TObject);
    var
    i,j:integer;
    SL: TStringList;
    begin
      SL:=TStringList.Create;
      ADOConnection1.GetTableNames(SL,False);
      // début de la transaction
      AdoConnection1.BeginTrans;
      try
      for i:=0 to strlistQuery.Count-1 do
      begin
        self.Cursor:=crHourGlass;
        shape1.Brush.Color:=clred;
        Panel1.Caption:='Requête "'+strlistQuery[i]+'" en cours d''exécution ...';
        adocommand1.CommandText:=strlistQuery[i];
     
        if strlistQuery[i]='[Query 01 Création Tableau Zmir0678 aujourdhui]' then
        begin
          if frmdatevalue.ShowModal=mrOk then
          begin
            adocommand1.Parameters.AddParameter;
            adocommand1.Parameters[0].DataType:=ftDate;
            adocommand1.Parameters[0].Value:=formatdatetime('dd/mm/yyyy',frmDateValue.varvalue);
     
            for j:=0 to SL.Count-1 do
            begin
              if SL[j]='Zmir0678 aujourdhui' then
              begin
                ADOQuery1.Close;
                ADOQuery1.SQL.Text:='DROP TABLE [Zmir0678 aujourdhui]';
                ADOQuery1.ExecSQL;
                Break;
              end;
            end;
          end;
     
        end;
        Application.HandleMessage;
        adocommand1.Execute;
        Application.ProcessMessages;
      end;
      // validation de la transaction
      AdoConnection1.commitTrans;
      shape1.Brush.Color:=$0000CE00;
      //PlaySound(PChar(ExtractFilePath(Application.ExeName)+'/leon.wav'),Handle,SND_ASYNC);
     
      self.Cursor:=crDefault;
      Panel1.Caption:='En attente d''instruction'
      Except on E:Exception do
        begin
          // annulation de la transaction
          AdoConnection1.rollbackTrans;
          Panel1.Caption := 'Erreur : ' + E.Messages;
        end;
      end;
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  20. #20
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Citation Envoyé par Rayek Voir le message
    Avec des requêtes en séries, il serait bien d'utiliser les transactions
    Faudrait déjà que ces requêtes fonctionnent, ACCESS supporte les Transactions ?
    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

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/04/2007, 06h27
  2. Créer une table à partir d'une autre dans un script
    Par Dam)rpgheaven dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 24/06/2005, 10h55
  3. remplir un champ d'une table à partir d'une autre table
    Par MrsFrizz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/02/2005, 16h48
  4. Réponses: 5
    Dernier message: 06/01/2005, 12h07
  5. UPDATE : table à partir d'une autre
    Par Laura dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/10/2003, 21h34

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