Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Recherche Like avec Firebird et transaction [ Base de données / SQL Server ] (eli42)

dimanche 27 juillet 2008 à 15:20:49 | Recherche Like avec Firebird et transaction

eli42

Bonjour, depuis un moment je me tate pour remplacer mes base access 2003, par Interbase, donc pour l'instant je fais quelque ligne de code pour pouvoir comparer, mais j'ai un sousi avec
je suis bloqué sur les LIKE en fait si je teste ('Select * from CLIENT where NOM like ''%' + Edit1.Text + '%'''); depuis le constructeur SQL ca marche il me trie bien les enregistrements, par contre en mode Transaction rien ne se passe pas de trie, avez une petite idée ou une solution pour rechercher au milieu d'une chaine.
Amicalement.

* Je bose sur Firebird Guardian 2, EMS 2005 et compo pour Delphi FIBplus.

Beau Temps belle Mer


lundi 28 juillet 2008 à 11:55:03 | Re : Recherche Like avec Firebird et transaction

cantador

Membre Club
Bonjour,
ton souci ne vient pas apparemment du mode transactionnel..
une transaction ne peut pas bloquer un select sauf si une erreur se produit
et dans ce cas c'est le rollback qui intervient et qui annule TOUT.

Donc, il doit y avoir une erreur dans ton code quelque part.
mais sans le voir, c'est difficile..

cantador

lundi 28 juillet 2008 à 17:10:59 | Re : Recherche Like avec Firebird et transaction

eli42

Salut Cantador, effectivement si donne rien la charette vas pas avancer  voici le code :

//==============================================================================
// Routine pour eviter a chaque fois de retaper le meme code
//==============================================================================

function TFonc_Client.Insertion_ou_MAJ(instruction: string): BOOLEAN;
begin
  with DM do
  begin
    try
      IBSQL_mvt.Close; // Refermer au cas ou quelle soit ouverte
      IBSQL_mvt.SQL.Clear;
      //recuperation du SQL a executer
      IBSQL_mvt.SQL.Add(instruction);
      try
        IBSQL_mvt.ExecQuery;
        if not IBSQL_mvt.Prepared then IBSQL_mvt.Prepare;
        //Valider modif
        IBSQL_mvt.transaction.CommitRetaining;
        result := True;
      except
        if IBSQL_mvt.transaction.InTransaction then
        begin
          // Annulé Modif
          IBSQL_mvt.transaction.Rollback;
          result := False;
        end;
      end;
    finally
      IBSQL_mvt.Close;
    end;
  end;
end;
//==============================================================================




Appel et mise a jour depuis le Keypress de l'Edit EC1.Text

Fonc_Client.Insertion_ou_MAJ('Select * from CLIENT where FICHE like ''%' + EC1.Text + '%''');


Voili, ca marche bien pour Suppression, Modification et Insertion, par contre contre pour le like, rien meme pas une erreur.

Si tu vois la boulette, il y a forcément une, mais je vois pas, j'avou j'ai attaqué Firebird depuis 48h

A plus


lundi 28 juillet 2008 à 19:04:25 | Re : Recherche Like avec Firebird et transaction

cantador

Membre Club
il te manque une instruction :

  with DM do
  begin
    try
      IBSQL_mvt.transaction.StartTransaction;
      IBSQL_mvt.Close; // Refermer au cas ou quelle soit ouverte
      IBSQL_mvt.SQL.Clear;
      //recuperation du SQL a executer
.....
.....

cantador

lundi 4 août 2008 à 20:57:25 | Re : Recherche Like avec Firebird et transaction

eli42

Désolé réponse tardive, je te remerci Cantador, je vais pouvoir cette semaine contunuer à decortiquer Firebird.

mardi 5 août 2008 à 04:23:07 | Re : Recherche Like avec Firebird et transaction

eli42

Suite à des insonmie je me suis mis dedans illico, malgre le rajout IBSQL_mvt.transaction.StartTransaction;
dans ma function function TFonc_Client.Insertion_ou_MAJ(instruction: string): BOOLEAN;
Alors pour l'instant je contourne le probleme j'ai ecris une fonction que pour la recherche multicritere :

//==============================================================================
// Recherche Multicritere
//==============================================================================

function TFonc_Client.Recherche_Multi(instruction: string): BOOLEAN;
begin
  with FICHE, DM do
  begin
    try
      Client.Active := False;
      Client.SQLs.SelectSQL.Clear;
      Client.SQLs.SelectSQL.Add(Instruction);
      Client.Active := True;
    except
      Exit;
    end;
  end;
end;
//==============================================================================


//==============================================================================
// Convertion signe * en Pourcent
//==============================================================================
function o_StrRemChar(const _str: string; _char: Char; _case: Boolean = False): string;
var
  x: Integer;
  f_s: string;
  f_c: string;
begin
  Result := '';
  f_s := _str;
  f_c := _char;
  if _case then
  begin
    f_s := Ansiuppercase(f_s);
    f_c := Ansiuppercase(f_c);
  end;
  for x := 1 to Length(_str) do
    if f_s[x] <> f_c then
      Result := Result + _str[x] else
      Result := Result + '%';
end;
//==============================================================================

// et dans mes champ Edit je recherche directement sur le FIBDataset sans passer par le FIBTransaction
//==============================================================================
// Convertion signe * en Pourcent
//==============================================================================
Procedure TFICHE.EC1KeyPress(Sender: TObject; var Key: Char);
var C1, C2, C3, C4: string;
begin
  if Key = #13 then
  begin
    C1 := o_StrRemChar(EC1.Text, '*');
    C2 := o_StrRemChar(EC2.Text, '*');
    C3 := o_StrRemChar(EC3.Text, '*');
    C4 := o_StrRemChar(EC4.Text, '*');

    Fonc_Client.Insertion_ou_MAJ('Select * From CLIENT where (FICHE LIKE ''%'
      + C1 + '%'') And (CP LIKE ''%'
      + C2 + '%'') And (VILLE LIKE ''%'
      + C3 + '%'') And (TELEPHONE LIKE ''%'
      + C4 + '%'') Order by FICHE ASC ');

    if DM.CLIENTNFiche.Text = '' then
    begin
      Fonc_Client.Recherche_Multi('Select * From CLIENT Order By FICHE ASC');
    end else
    begin
      DBGCLIENT.SetFocus;
    end;
    Key := #0;
  end;
end;
//==============================================================================


Voila avec ca j'ai bien mes trie sur 4 champs, donc ma question quel est l'interet de la Tansaction?
Beau Temps Belle Mer


mardi 5 août 2008 à 17:27:44 | Re : Recherche Like avec Firebird et transaction

cantador

Membre Club
Réponse acceptée !
désolé eli42, mais j'ai une tonne de boulot qui m'est tombée dessus..
mais je te répond :

Avec firebird, si tu choisis le mode transctionnel
(autocommit à false + un Mode d'isolation)
toutes tes opérations même un simple select (lecture seule) se feront en mode transactionnel (transactions internes au système)
Mais, bien sûr, si tu fais une opération en lecture seule, il est inutile de construire une transaction spécifique, puisque RIEN ne sera écrit dans la base.
Ce n'est que lorsque tu exécutes une opération d'écriture (insert ou update) qu'il est nécessaire de lancer une transaction afin de pouvoir tout annuler en cas d'erreur. (c'est le //Valider modif qui m'a géné..)

C'est une sécurité afin d'assurer l'intégrité de tes informations.

cantador

mardi 5 août 2008 à 17:38:00 | Re : Recherche Like avec Firebird et transaction

eli42

Merci Cantador, ta reponse m'aiguille un peu plus, je pense que je suis dans la bonne voie, mais tout de même sauter de Paradox, Access vers du Firebird il y a tout de même pas mal de boulot, mais cette faisabilité est possible avec un peu de boulot.
@Plus


Beau Temps Belle Mer

mardi 5 août 2008 à 19:20:34 | Re : Recherche Like avec Firebird et transaction

cantador

Membre Club
Réponse acceptée !
Je te conseille également avec firebird de choisir des bons composants DataAware.(IBO, FIB+ ou d'autres il y en a des nvx qui sont sortis)

Le seul ennui est qu'ils sont payants, mais bcp plus performants et plus conviviaux que les composants IBX natifs qui commencent à dater un peu..

cantador



Cette discussion est classé dans : trie, recherche, like, transaction, firebird


Répondre à ce message

Sujets en rapport avec ce message

Problème avec proc de recherche multicritères [ par codial ] Bonsoir, j'essaie d'écrire une procédure de recherche multi critère, qui fonctionne sous VB, mais avec Delphi j'ai un message d'erreur récurrent: comment accelerer la recherche de la semilarite entre deux images dans une grande base de données imades [ par kamicaz2002 ] voila je cherche accelerer le temps de recherche d'une image dans une BDD d'images...j'ai utilisé la methode de la correlation pour faire la comparais Recherche participant pour création d'un RPG [ par NeoFacto ] Salut à tous ! Nous nous présentons, notre petite organisation s'appel NEOFACTO. Nous sommes 3 étudiants en informatique et passionnés de programmatio InterBase ou FireBird ? [ par demande001 ] Bonjour; Quelle est la différence entre InterBase et FireBird</span recherche le positionement d'un caractere dans un fichier [ par Napster ] voila mon problem ces que je voudrais faire une recherche dans un fichier , quand je position mon curseur dans un  caractere un shohint affiche et me Recherche une personne qui s'y connait en 3d [ par NeoFacto ] Bonjour à tous,tout d'abord, merci d'avoir ouvert ce message...J'ai déjà laissé un message dans ce forum pour trouver des gens qui seraient partant po ADOTable trie [ par yvessimon ] BonjourAvec ADOTable  un filtrage est possible avec la propriété  filtre. ADOTable.filtre := .....avec le propriété   sort    un tri montant ou dessed connexion aux bases de données [ par Adminsma ] Comment peut on faire une connexion  a une base de données firebird  à l'aide du compsant dbexpress  mais par programmation..comment peut on ouvrir un Recherche kamikazes... [ par adm 2030 ] J'ai développé dernièrement une application qui permet de surveiller l'utilisation de votre ordinateur en votre absence, puisque j'aimerais bien qu'el Recherche d'un dossier sur le disque [ par PHIL63 ] Bonjour à tous,Après avoir effectué bien des recherches sur le site, je n'ai pas trouvé de solution à mon petit souci...J'ai besoin de retrouver le ch


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,624 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.