Recherche Like avec Firebird et transaction

Résolu
cs_eli42 Messages postés 143 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 juillet 2023 - 27 juil. 2008 à 15:20
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 5 août 2008 à 19:20
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

7 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
5 août 2008 à 19:20
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
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
28 juil. 2008 à 11:55
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
0
cs_eli42 Messages postés 143 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 juillet 2023 1
28 juil. 2008 à 17:10
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
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
28 juil. 2008 à 19:04
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_eli42 Messages postés 143 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 juillet 2023 1
4 août 2008 à 20:57
Désolé réponse tardive, je te remerci Cantador, je vais pouvoir cette semaine contunuer à decortiquer Firebird.
0
cs_eli42 Messages postés 143 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 juillet 2023 1
5 août 2008 à 04:23
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
0
cs_eli42 Messages postés 143 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 juillet 2023 1
5 août 2008 à 17:38
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
0
Rejoignez-nous