vico8000
Messages postés286Date d'inscriptionlundi 18 janvier 2016StatutMembreDernière intervention14 février 2018
-
11 juil. 2017 à 11:53
vico8000
Messages postés286Date d'inscriptionlundi 18 janvier 2016StatutMembreDernière intervention14 février 2018
-
11 juil. 2017 à 16:32
Bonjour,
Je suis en train de modifier une DLL afin de passer notre stockage de données de DBase vers MSSQL.
Aprés quelques recherches, je suis tombé sur ces deux fonctions :
procedure MaConnectComplete(Connection: TADOConnection;const Error: Error; var EventStatus: TEventStatus); procedure MaConnectionExecuteComplete(Connection:TADOConnection;RecordsAffected: Integer; var EventStatus: TEventStatus; const Command: _Command;const Recordset: _Recordset);
procedure TReadWriteDBFile.MaConnectComplete(Connection: TADOConnection;const Error: Error; var EventStatus: TEventStatus); begin adoCommand1:=TADOCommand.Create(nil); ConsoleTrace('Activation de la table EVENEMENT (SQL)', DebuggLevel1); if EventStatus=esErrorsOccured then Begin //Une fois DBase supprimer, ajouter ici la partie secours de la base EVENT ConsoleTrace('Problème d''activation de la table EVENEMENT (SQL). Passage en mode secours.', DebuggLevel1); End else begin with adoCommand1 do begin Connection:=adoCo; ExecuteOptions:=[eoAsyncExecute]+[eoExecuteNoRecords]; Execute; ConsoleTrace('Activation de la table EVENEMENT (SQL) OK', DebuggLevel1); end; end; end;
J'ai donc effectué différents tests avec ces dernières. Elles marchent correctement sur mon autre programme. Aucun problème à signaler jusques la.
J'ai donc essayé d'utiliser ces fonctions dans ma DLL, la ou leur utilisation m’intéresse vraiment. C'est la que les problèmes commencent.
Je pense que toutes les erreurs que j'ai découlent de celle la :
E2005 'Error' n'est pas un identificateur de type
La déclaration est identique mais :
E2037 La déclaration de 'MaConnectComplete' diffère de la déclaration précédente
J'ai bien un composant AdoCommand de déclaré mais :
E2003 Identificateur non déclaré : 'adoCommand1'
J'ai bien un composant AdoConnection de déclaté, que j'utilise d'ailleurs plus loin dans mon développement mais :
E2003 Identificateur non déclaré : 'adoCo'
Je passe le reste puisque c'est redondant par rapport a celles citées au dessus.
Enfin, à partir du moment au j'essaie d'utiliser une des deux fonctions :
E2009 Types incompatibles : 'Les listes de paramètres diffèrent'
Je serais disponible un maximum pour toute information complémentaire à celui qui voudra bien me venir en aide.
En espérant apercevoir un jour la lumière au bout du tun-DLL, je vous remercie par avance pour l'aide que vous pourrez m'apporter.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 Modifié le 11 juil. 2017 à 12:11
Bonjour,
ça va pas être simple parce qu'il manque justement le plus important la déclaration de "Error" !!!
de quel type sagit-il ?
et de toute manière ceci:"const Error: Error;" me parait être, pour le moins, très ambigu
tu devrais avoir quelque chose comme ça "const Error: TError;"
et 'adoCommand1' & 'adoCo' sont bien inconnus du bout de code que tu donnes ;-)
Cordialement,
vico8000
Messages postés286Date d'inscriptionlundi 18 janvier 2016StatutMembreDernière intervention14 février 20182 Modifié le 11 juil. 2017 à 13:29
Merci pour ta réponse Cirec.
Je viens d'essayer avec Const Error: TError, bien sur ça serait trop simple si ça marchait.
Je viens de regarder dans la doc pour comprendre de quel type il s'agit mais pas d'information sur ce point.
L'exemple suivant est une opération traditionnelle de modification de données. Comme elle peut être lourde, on la traite de manière asynchrone.
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Déclarations privées } procedure MaConnectComplete(Connection: TADOConnection; const Error: Error; var EventStatus: TEventStatus); procedure MaConnectionExecuteComplete(Connection: TADOConnection; RecordsAffected: Integer; const Error: Error; var EventStatus: TEventStatus; const Command: _Command; const Recordset: _Recordset); public { Déclarations publiques } end; var Form1: TForm1; adoConnection:TADOConnection; adoCommand:TADOCommand; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin adoConnection:=TADOConnection.Create(nil); with adoConnection do begin ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\NWind.mdb;'; ConnectOptions:= coAsyncConnect; OnConnectComplete:=MaConnectComplete; OnExecuteComplete:=MaConnectionExecuteComplete; Connected:=True; end; end; procedure TForm1.MaConnectComplete(Connection: TADOConnection; const Error: Error; var EventStatus: TEventStatus); begin adoCommand:=TADOCommand.Create(nil); if EventStatus=esErrorsOccured then MessageDlg('Erreur lors de la connexion',mtError,[mbOK],0) else begin with adoCommand do begin Connection:=adoConnection; CommandText:='UPDATE Clients Set Pays = ' + QuotedStr('États-Unis')+' WHERE Pays = '+QuotedStr('USA'); ExecuteOptions:= [eoAsyncExecute]+[eoExecuteNoRecords]; Execute; end; end; end; procedure TForm1.MaConnectionExecuteComplete(Connection: TADOConnection; RecordsAffected: Integer; const Error: Error; var EventStatus: TEventStatus; const Command: _Command; const Recordset: _Recordset); begin MessageDlg(IntToStr(RecordsAffected)+' modifications effectués',mtInformation,[mbOK],0); end; end.
Le cheminement est simple, à la création de la feuille je démarre une connexion asynchrone, lorsque celle-ci est complète elle lance s'il n'y a pas d'erreur la commande. Lorsque celle ci est
terminée, un message précise le nombre de modifications effectuées. Il y a trois avantages important avec ce style de programmation.
Votre code peut exécuter autre chose pendant que les opérations de longue durée ont lieu.
Vous êtes moins dépendant de la charge éventuelle du serveur.
Les événements contiennent tous les paramètres nécessaires à la construction d'un code robuste.
Cordialement et merci.
vico8000
Messages postés286Date d'inscriptionlundi 18 janvier 2016StatutMembreDernière intervention14 février 20182 11 juil. 2017 à 13:48
Je viens d'essayer en ajoutant
Const Error = Error;
Toutes les erreurs se suppriment à l'exception de :
E2005 'Error' n'est pas un identificateur de type
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250
>
vico8000
Messages postés286Date d'inscriptionlundi 18 janvier 2016StatutMembreDernière intervention14 février 2018 Modifié le 11 juil. 2017 à 14:03
je me doute que ça n'a pas fonctionné c'était juste pour soulever le coté ambigu de la déclaration avec Error: Error; le compilateur ne sait pas qui est le type de la variable.
et si tu fait ceci:
uses ADOInt;
procedure MaConnectComplete(Connection: TADOConnection;const Error: ADOInt.Error; var EventStatus: TEventStatus);
et même ceci devrait fonctionner
uses ADOInt;
procedure MaConnectComplete(Connection: TADOConnection;const aError: Error; var EventStatus: TEventStatus);
chez moi le compilateur ne bronche pas ^^
Cordialement,
@+
vico8000
Messages postés286Date d'inscriptionlundi 18 janvier 2016StatutMembreDernière intervention14 février 20182
>
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 2022 11 juil. 2017 à 14:10
Je test ça de suite.
Le problème, c'est que c'est pour une DLL donc le compilateur, ... n'a "rien" a compiler.
Cordialement.
vico8000
Messages postés286Date d'inscriptionlundi 18 janvier 2016StatutMembreDernière intervention14 février 20182
>
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 2022 11 juil. 2017 à 14:20
Que dire d'autre, à l'exception de merci ?
J'ai essayé les deux, Adoint. marche impeccable, plus d'erreur. Pour aErreur, ça n'a pas marché par contre.
Je n'ai pas d'application hote pour le moment donc je ne peux pas tester mais "ça compile".
Un grand merci. Je reviendrais surement vers le forum pendant le cours de mon développement, pour des problèmes plus ou moins poussés. (La programmation Delphi/Siemens/SGBD ... On est pas dans la merde.)
Encore Merci Cirec.
Cordialement.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250
>
vico8000
Messages postés286Date d'inscriptionlundi 18 janvier 2016StatutMembreDernière intervention14 février 2018 11 juil. 2017 à 15:16
il est temps alors d'en créer une pour tester ... parce qu'à mon avis d'autres problèmes risque d'apparaitre.
Un grand merci. Je reviendrais surement vers le forum pendant le cours de mon développement, pour des problèmes plus ou moins poussés. (La programmation Delphi/Siemens/SGBD ... On est pas dans la merde.)
Si c'est dans mes cordes je le ferais avec plaisir ;)