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 :
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.
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;
Pour ce qui est de la lecture et de l'écriture, voici mon code :
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.
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;
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 :
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 ?
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);
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.
Partager