banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 04 August 2015 10:23

Just-Soft
Participant actif
Lieu: Chlef, Algérie
Date d'inscription: 10 Jun 2009
Messages: 76

Delphi, comment avoir le résultat d'un champs boolean ?

Bonjour

Je veux avoir le contenu d'un champ nommé Prise_en_charge qui est de type boolean. J'ai tenté avec ce code mais il me retourne "" (vide) qui est li'équivalent de False en Delphi alors que j'ai des données avec la valeur "T" ce qui doit correspondre à True. Voici le bout de code

Code:

procedure TfmMain.SynchroniserDataetCarmeMapInfo1Click(Sender: TObject);
var
  nom_commune : string;
  msg_mi: string;
  Prise_en_charge: string[1];
begin
  // briser la relation maitre détail
  if DM.IBCTable_COMMUNE.MasterSource <> nil then
     DM.IBCTable_COMMUNE.MasterSource := nil;
  // Pointer au début de la table
  DM.IBCTable_COMMUNE.First;
  while not(DM.IBCTable_COMMUNE.Eof) do
  begin
    // Renseigner le nom de la commune
    nom_commune := DM.IBCTable_COMMUNENOM_COMMUNE.AsString ;
    // Selectionner la commune sur la carte
    msg_mi := 'Select * from com_zones where commune = ' + '"' + nom_commune + '"';
    fmMain.OleMapInfo.do(msg_mi);
    // Excécution
    msg_mi := 'RUN MENU COMMAND ' + IntToStr(M_QUERY_FIND_SELECTION);
    // Afficher la commune avec un zoom adéquat
    msg_mi := 'Find Using com_zones(COMMUNE) Find ' + '"' + nom_commune + '"' + ' Interactive ';
    // Excécution
    fmMain.OleMapInfo.do(msg_mi);
    msg_mi := 'Select Prise_en_charge from com_zones where commune = ' + '"' + nom_commune + '"';
    // Retout d'info et Excécution
    Prise_en_charge := fmMain.OleMapInfo.Eval(msg_mi);
    // Affichage
    ShowMessage(Prise_en_charge);
    msg_mi := 'Commit Table com_zones';
    // Excécution
    fmMain.OleMapInfo.do(msg_mi);
    msg_mi := 'Close Table Selection';
    // Excécution
    fmMain.OleMapInfo.do(msg_mi);
    // Passer à l'autre enregistrement
    DM.IBCTable_COMMUNE.Next;
  end;
  // Rétablir la relation maitre détail
  if DM.IBCTable_COMMUNE.MasterSource <> nil then
  begin
    DM.IBCTable_COMMUNE.MasterSource := DM.ds_COM;
     DM.IBCTable_COMMUNE.MasterFields := 'CODE_COMMUNE';
  end;
end;

J'arrive pas à avoir la valeur du champs Prise_en_charge, si vous avez d'autres propositions n'hésitez pas.

Merci par avance.


Bon courage ou Bonne Chance (selon le contexte)

Hors ligne

 

#2 Tue 04 August 2015 17:02

Just-Soft
Participant actif
Lieu: Chlef, Algérie
Date d'inscription: 10 Jun 2009
Messages: 76

Re: Delphi, comment avoir le résultat d'un champs boolean ?

Bingo ... résolu
pour toute fin utile voici le code :

Code:

procedure TfmMain.Synchro_DATA_MAPClick(Sender: TObject);
var
  nom_commune : string;
  msg_mi: string;
  Prise_en_charge: string;
  i: Byte;
begin
  i := 0;
  // briser la relation maitre détail
  if DM.IBCTable_COMMUNE.MasterSource <> nil then
     DM.IBCTable_COMMUNE.MasterSource := nil;
  // Pointer au début de la table
  DM.IBCTable_COMMUNE.First;
  fmMain.OleMapInfo.do
      ('Dim value as String ');
  while not(DM.IBCTable_COMMUNE.Eof) do
  begin
    // Renseigner le nom de la commune
    nom_commune := DM.IBCTable_COMMUNENOM_COMMUNE.AsString ;
    // Selectionner la commune sur la carte
    msg_mi := 'Select * from com_zones where commune = ' + '"'
      + nom_commune + '"' + 'into mySelect';
    fmMain.OleMapInfo.do(msg_mi);
    // Retour d'info et Excécution
    fmMain.OleMapInfo.do
      (' Fetch First From mySelect' + #10#13 +
      ' value = mySelect.Prise_En_Charge');
    // Affichage
    Prise_en_charge := fmMain.OleMapInfo.Eval('value');
    fmMain.OleMapInfo.do(msg_mi);
    // Excécution
    msg_mi := 'RUN MENU COMMAND ' + IntToStr(M_QUERY_FIND_SELECTION);
    // Afficher la commune avec un zoom adéquat
    msg_mi := 'Find Using com_zones(COMMUNE) Find ' + '"' + nom_commune + '"' + ' Interactive ';
    // Excécution
    fmMain.OleMapInfo.do(msg_mi);
    if Prise_en_charge = 'F' then
    begin
      Inc(i);
      msg_mi := 'Select * From com_zones Where commune = ' +
          '"' + nom_commune + '"' + 'into TB_MAJ';
      msg_mi := msg_mi + ' Update TB_MAJ Set Prise_en_charge =' + '"' + 'T' + '"' ;
      fmMain.OleMapInfo.do(msg_mi);
      msg_mi := 'Commit Table com_zones';
      // Excécution
      fmMain.OleMapInfo.do(msg_mi);
      msg_mi := 'Close Table TB_MAJ';
      // Excécution
      fmMain.OleMapInfo.do(msg_mi);
    end;
    msg_mi := 'Close Table MySelect';
    // Excécution
    fmMain.OleMapInfo.do(msg_mi);
    // Passer à l'autre enregistrement
    DM.IBCTable_COMMUNE.Next;
  end;
  ShowMessage(Format('Synchronisation de %d commune(s)', [i]));
  // rétablir la relation maitre détail
  if DM.IBCTable_COMMUNE.MasterSource <> nil then
  begin
    DM.IBCTable_COMMUNE.MasterSource := DM.ds_COM;
    DM.IBCTable_COMMUNE.MasterFields := 'CODE_COMMUNE';
  end;
end;

Dernière modification par Just-Soft (Tue 04 August 2015 17:04)


Bon courage ou Bonne Chance (selon le contexte)

Hors ligne

 

#3 Mon 10 August 2015 11:15

nicoboud
Membre
Lieu: Nantes
Date d'inscription: 12 Oct 2007
Messages: 860

Re: Delphi, comment avoir le résultat d'un champs boolean ?

Bonjour,

Merci pour le suivi.

Nicolas.


Co-modérateur du forum Mapinfo
Utilisateur Mapinfo et QGIS

Hors ligne

 

#4 Tue 11 August 2015 14:08

Just-Soft
Participant actif
Lieu: Chlef, Algérie
Date d'inscription: 10 Jun 2009
Messages: 76

Re: Delphi, comment avoir le résultat d'un champs boolean ?

Tout marche assez bien, seul bémol, je n'ai pas trouvé le moyen de récupérer la chaîne proposé dans la boite de dialogue du find. Au fait, je voudrais corriger le nom de la commune de la base de données par celui de la table MapInfo.
Donc au début, je commence par faire une recherche par le biais du code_commune, puis un find sur le nom_commune, si celui-là n'est pas le même avec celui de la base de données j'affiche le nom sélectionné. Je m'explique, le "find using" avec la syntaxe "alternative, propose une liste des chaines qui ont une ressemblance avec la chaîne recherchée, si je choisis une chaîne "X" et que je valide, je voudrais faire une mise à jour avec cette chaîne (pour le moment l'affichage du choix devrait suffire)

j'ai pensé à faire ça :

Code:

msg_mi := 'Find Using com_zones(COMMUNE) Find ' + '"' + nom_commune +
                  '"' + ' Interactive';
        // Excécution
        fmMain.OleMapInfo.do(msg_mi);
        res_search := fmMain.OleMapInfo.Eval('CommandInfo(3)');
        // si le nom n'est pas le même MAJ
        if (res_search <> 11) then
        begin
          // Afficher le nom choisie
        end;

Dernière modification par Just-Soft (Tue 11 August 2015 14:16)


Bon courage ou Bonne Chance (selon le contexte)

Hors ligne

 

Pied de page des forums

Powered by FluxBB