|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre actif
![]() Inscription : juillet 2003 Messages : 257 ![]() |
Bonjour,
j'ai un prob depuis un bon moment que je n'arrive pas à expliquer: J'affiche dans une Grid par exemple le resultat d'un querySelect : select... et j'ai un bouton qui lance une Update. dans l'evenement du bouton je met: ClientDataSet.CommandText := 'update...'; ClientDataSet.Execute; Jusqu'au la tout va bien et si je clique sur un bouton tout deroule tres bien, et la base est bien mise a jour. Mais si je met une ligne de code apres l'execute, elle declenche automatiquement une violation d'acces. Meme si c juste un changement d'onglet. est ce quelqu'un comprend quelque chose? Merci d'avance |
|
|
00
|
|
|
#2 | |
|
Membre confirmé
![]() Olivier MuetResponsable de service informatique Inscription : septembre 2003 Messages : 222 ![]() |
Citation:
Par contre l'origine du problème n'est pas forcément très simple. Elle n'est d'ailleurs très probablement pas liée à Interbase. Est-ce une violation en lecture ou en écriture Le problème provient souvent d'un objet utilisé alors qu'il a été précédemment désalloué. Rien de tel que FreeAndNil au lieu de Free pour les mettre en évidence |
|
|
|
00
|
|
|
#3 |
|
Membre émérite
![]() ![]() |
Si tu peux nous faire voir la portion de code ou ça foire, la je pense qu'on pourra t'aider plus.
A+
__________________
On progresse ..... |
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : juillet 2003 Messages : 257 ![]() |
procedure TfrmFDNC.Rinitialiserenattente1Click(Sender: TObject);
var li: integer; begin Screen.Cursor := crHourGlass; try li := qryListFDNCW1_C1.AsInteger; DM.cdsqryTemp.Close; DM.cdsqryTemp.CommandText := 'update W1 set ' + 'W1_C9=1, W1_C10=NULL, W1_C11=NULL, W1_C12=NULL, W1_C13=NULL, ' + 'W1_C14=NULL, W1_C15=NULL, W1_C16=NULL, W1_C17=NULL, W1_C18=NULL, ' + 'W1_C20=NULL, W1_C21=NULL where W1_C1=:vFDNC'; DM.checkParam(DM.cdsqryTemp, 'vFDNC').AsInteger := li; DM.cdsqryTemp.Execute; //Refresh qryListFDNC.Close; qryListFDNC.Open; qryListFDNC.Locate('W1_C1', li, []); finally Screen.Cursor := crDefault; end; end; bein pour le checkParam, c un truc simple: function TDM.checkParam(qry: TClientDataSet; nomParam: string): TParam; begin Result := qry.Params.FindParam(nomParam); if Result = nil then Result := qry.Params.CreateParam(ftUnknown, nomParam, ptUnknown); end; et c'est la ligne : qryListFDNC.Close qui déclenche l'exception!!! |
|
|
00
|
|
|
#5 |
|
Membre actif
![]() Inscription : juillet 2003 Messages : 257 ![]() |
Laissez moi vous dire un truc plus surprennant encore! sur d'autres exemples similaire où j'avais le meme probleme, je prend tout le code avant "Execute" et je le transforme a une procedure.
Dans ma fonctionne principale, j'appelle cette procedure! Et bein, ca marche et ca ne declenche plus d'erreurs. ne me demandez pas pq car je ne sais pas! pour l'exemple que je vous ai envoyé, ca ne fonctionne pas |
|
|
00
|
|
|
#6 | |||||
|
Membre émérite
![]() ![]() |
Citation:
SI j'ai bien compris, tu utilise QryListFDNC pour avoir l'identifiant pour l'update (avec cdsqryTemp). Tu utilise quoi comme composant d'accès au données : ADO, IBS, etc ? A+
__________________
On progresse ..... |
|||||
|
|
00
|
|
|
#7 |
|
Membre actif
![]() Inscription : juillet 2003 Messages : 257 ![]() |
cdsqryTemp et qryListFDNC sont des ClientDataSet qui sont liés à leur tour à des TIBQuery.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com