Bonjour,

J'utilise FireDAC depuis peu, j'apprend principalement grâce à l'aide DELPHI. Malheureusement, l'aide ne répond pas toujours à mes attentes. J'aurais donc aimé être aiguillé vers un tutoriel (s'il en existe un).

Par la même occasion, j'en profite pour poser 2-3 questions concernant mon code.
(Pour toutes les questions qui vont suivre, j'utilisais de base le composant ADO. Il est donc possible que certaines parties soient totalement incohérentes avec les composants FireDAC)

Pour la connexion avec mon serveur, je procède de la façon suivante :

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
 
  with FDConnectionEvent do Begin
    DriverName := 'MSSQl';
    LoginPrompt := false;
    with ResourceOptions do begin
      CmdExecMode := amAsync;
    end;
    with params do Begin
      Database := CatalogEvent;
      DriverID := 'mssql';
      Password := mdp;
      Pooled := false;
      username := User_ID;
      Add('server=' + Nom_Serveur);
      Add('Database=' + CatalogEvent);
      Add('DriverID=MSSQL');
    End;
  End;
 
  FDConnectionEvent.Close();
 
  try
    FDConnectionEvent.Open();
  except
    ConsoleTrace('Probleme dans l''ouverture de la connexion MSSQl.',Debugglevel1);
  end;
J'arrive à tester la connexion. J'ai cependant un problème dans le temps de retour de la non connexion. C'est à dire que l'application prend entre 15-30 secondes pour me retourner qu'elle n'est pas connectée. Y'aurait il un paramètre (style TimeOut ou ConnectionTimeOut) à implémenter pour que ça prenne moins de temps.

Pour ce qui est de la lecture et de l'écriture, voici mon 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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
           with FDConnection do Begin
                        DriverName := 'MSSQl';
                        LoginPrompt := false;
                        with ResourceOptions do begin
                          CmdExecMode := amAsync;
                        end;
                        with params do Begin
                          Database := Catalog;
                          DriverID := 'mssql';
                          Password := mdp;
                          Pooled := false;
                          username := User_ID;
                          Add('server=' + Nom_Serveur);
                          Add('Database=' + Catalog);
                          Add('DriverID=MSSQL');
                        End;
                      End;
 
                      FDConnection.Close();
 
                      try
                        FDConnection.Open();
                      except
                        ConsoleTrace('Probleme dans l''ouverture de la connexion MSSQl.',Debugglevel1);
                      end;
 
                      FDQuery.Connection:=FDConnection;
 
                      FDQuery.SQL.Clear;
                      CommandeSQL := 'Select * From ' + Nom_Table;
                      FDQuery.SQL.ADD(CommandeSQL);
                      FDQuery.Open;
                      FDQuery.Last;
 
                      try
                        Num_index:=FDQuery.Fields.Fields[0].Value+1;
                      except
                        Num_index:=1;
                      end;
                      CommandeSQL := CommandeSQl + ');';
                      FDQuery.SQL.Clear;
                      FDQuery.SQL.Add(CommandeSQL);
                      FDQuery.ExecSQL;
                      FDQuery.SQL.Clear;
Ce code fonctionnait avec le composant ado mais ne fonctionne plus avec le composant FireDAC. Je ne vois pas comment traduire mes Fields.Fields et mes Last interminables. Je prend tous les conseils à partir de ce point ci.
Es-ce que changer mon composant FDQuery par un composant FDTable pourrait m'arranger ?

Enfin, j'ai également ce code pour effectuer une lecture/écriture qui fonctionne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
ConsoleTrace('Connecte a MSSQL',DebuggLevel1);
      if FDConnectionEvent.ExecSQLScalar('Select MAX(NO_EVENT) From ' + Nom_tableEvent) = null then
        Begin
          Old_No_Event:=1;
        End
      else
        Begin
          Old_No_Event := FDConnectionEvent.ExecSQLScalar('Select MAX(NO_EVENT) From ' + Nom_tableEvent);
          Inc(Old_No_Event,1);
        End;
      FDConnectionEvent.ExecSQL('Insert into ' + nom_tableEvent + ' values (' + inttostr(Old_No_Event) + ',''' + formatdatetime('yyyy/mm/dd',today) + ''',''' + timetostr(now) + ''',''Démarrage de l ApiSoft'','''',''ApiSoftMou'');');
      ConsoleTrace('Enregistrement EVENEMENT OK: structure OK', DebuggLevel1);
Le ExecSQLScalar ne peut renvoyer qu'un enregistrement (si j'ai bien compris la doc). Je ne peux donc pas faire de select * avec par exemple. A l'inverse, si je peux faire toutes mes requêtes avec mon FDConnection, quels intérêts ont FDQuery et FDTable ?

Merci par avance pour toute réponse apportée. Même si elles ne répondent pas à l'intégralité des questions posées.

Cordialement.