Problème const error : error

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

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.

2 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
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,
    
@+ Cirec
0
vico8000 Messages postés 287 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 14 février 2018 2
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.

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.
0
vico8000 Messages postés 287 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 14 février 2018 2
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
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50 > vico8000 Messages postés 287 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 14 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,
@+
0
vico8000 Messages postés 287 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 14 février 2018 2 > Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 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.
0
vico8000 Messages postés 287 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 14 février 2018 2 > Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 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.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50 > vico8000 Messages postés 287 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 14 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 ;)

je passe donc le poste en résolu
Cordialement,
@+
0
Rejoignez-nous