Problème const error : error [Résolu]

vico8000 291 Messages postés lundi 18 janvier 2016Date d'inscription 14 février 2018 Dernière intervention - 11 juil. 2017 à 11:53 - Dernière réponse : vico8000 291 Messages postés lundi 18 janvier 2016Date d'inscription 14 février 2018 Dernière intervention
- 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;

procedure TReadWriteDBFile.MaConnectionExecuteComplete(Connection: TADOConnection; RecordsAffected: Integer;var EventStatus: TEventStatus; const Command: _Command;const Recordset: _Recordset);
begin
MessageDlg(IntToStr(RecordsAffected)+' modifications effectués',mtInformation,[mbOK],0);
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.

Cordialement.
Afficher la suite 

Votre réponse

8 réponses

Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 3 août 2018 Dernière intervention - Modifié par Cirec le 11/07/2017 à 12:11
0
Merci
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,
    
@+ Cirec
Commenter la réponse de Cirec
vico8000 291 Messages postés lundi 18 janvier 2016Date d'inscription 14 février 2018 Dernière intervention - Modifié par vico8000 le 11/07/2017 à 13:29
0
Merci
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.

Voici le lien vers la doc que j'utilise.
http://bidou.developpez.com/tutoriels/Delphi/ADO/

Le paragraphe me concernant se trouve page 74-75.

Voici ce qu'il raconte :

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.
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 3 août 2018 Dernière intervention > vico8000 291 Messages postés lundi 18 janvier 2016Date d'inscription 14 février 2018 Dernière intervention - 11 juil. 2017 à 14:02
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 291 Messages postés lundi 18 janvier 2016Date d'inscription 14 février 2018 Dernière intervention > Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 3 août 2018 Dernière intervention - 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 291 Messages postés lundi 18 janvier 2016Date d'inscription 14 février 2018 Dernière intervention > Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 3 août 2018 Dernière intervention - 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 4231 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 3 août 2018 Dernière intervention > vico8000 291 Messages postés lundi 18 janvier 2016Date d'inscription 14 février 2018 Dernière intervention - 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 ;)

je passe donc le poste en résolu
Cordialement,
@+
vico8000 291 Messages postés lundi 18 janvier 2016Date d'inscription 14 février 2018 Dernière intervention > Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 3 août 2018 Dernière intervention - 11 juil. 2017 à 16:32
Si tu veux, pour t'expliquer un peu le contexte, l'appli ne tourne pas sur un PC, mais sur un poste un peu particulier. Ce poste permet de convertir les données automate vers une BDD grâce à cette DLL. Une appli présente sur le PC fait appel à la DLL, mais je n'ai pas la main dessus. Je ne peux pas directement tester sur le PC mais dois en faire une copie pour ne pas impacter la production ...
Enfin, je n'ai absolument aucune connaissance de l'appli sur le poste, je n'ai aucune connaissance en programmation automate, ... je ne suis donc pas super à l'aise pour le moment. Mais ça va venir.

Cordialement. (Et oui, je sais très bien au vu des modifications à l'arrache que j'ai fait pour le moment, des problèmes viendront avec le temps et les tests.)
Commenter la réponse de vico8000

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.