Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: Diego1981 - Gennaio 04, 2014, 10:03:46 am

Titolo: DBEDIT E ZEOS LIB
Inserito da: Diego1981 - Gennaio 04, 2014, 10:03:46 am
Ciao ragazzi e buon anno a tutti
ho una dbedit in cui inserire una data (editmask settato in questo modo: !99/99/9999;1;_) e ovviamente collegata ad un datasource.
Quando la dbedit perde il focus ho creato una procedura per verificare il corretto inserimento della data, più precisamente nell'evento OnExit ma prima che l'evento intervenga mi viene restituito l'errore 'EconvertError' con messaggio: 'invalid date' da parte del db(Mysql). Leggendo qua e la su internet suggeriscono di provare di intervenire sull'evento OnUpdateRecord della ZTable ma quando attivo la procedura e compilo mi restituisce questo errore 'udatamodule.pas(47,36) Error: Duplicate identifier "UpdateAction"'.
Sperando di essere stato abbastanza chiaro vi ringrazio in anticipo per i suggerimenti
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: nomorelogic - Gennaio 04, 2014, 08:12:05 pm
ciao, credo che più che l'OnExit del TDbEdit dovresti fare le tue verifiche in... OnValidate del TField.

Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Diego1981 - Gennaio 05, 2014, 08:24:02 pm
Grazie del suggerimento, verifico immediatamente ;D
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Diego1981 - Gennaio 09, 2014, 08:36:06 am
Ciao nomorelogic
grazie del suggerimento,
ho provato come hai detto tu, agendo sull' Onvalidate del tField ma niente, l'evento interviene sempre dopo l'errore.
Dimenticavo, giuso per tornare al mio primo post, sai anche perchè l'evento OnUpdateRecord della ZTable restituisce l'errore " Error: Duplicate identifier "UpdateAction"' in fase di compilazione?.
Altri suggerimenti?  :-\
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: nomorelogic - Gennaio 09, 2014, 09:15:36 am
purtroppo non conosco bene zeos, se nessuno ti risponde qua potresti provare a chiedere aiuto sul forum di zeos
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Stilgar - Gennaio 09, 2014, 09:17:50 am
Diego ... hai un pezzo di codice da poter provare a compilare?

Stilgar
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Stilgar - Gennaio 09, 2014, 09:20:19 am
 'udatamodule.pas(47,36) Error: Duplicate identifier "UpdateAction"'.

mi viene da pensare che tu debba dirgli di compilare in modalità "delphi" ...
Stilgar
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Diego1981 - Gennaio 09, 2014, 08:43:11 pm
Grazie a tutti delle veloci risposte
Ciao Stilgar, il problema è che non so dove metterlo il codice che dovrei scrivere e quindi non saprei cosa scriverti perchè ho semplicemente collegato un DBEdit al Datasource (campo che nel db mysql è di tipo DATE) che a sua volta è collegato alla ztable zeos che a sua volta è collegata alla zconnection sempre zeos.
il dbedit ha la mask settata (!99/99/9999;1;_ )
non riesco a capire quale evento utilizzare per prevenire l'intevento del db nel caso in cui la data sia sbagliata.
comunque penso che il codice da scrivere sarebbe questo:
MA DOVE???  :-X :-X :-X  ;D ;D ;D 
var
  data: TDate;
begin
  //verifico il corretto inserimento della data
  try
     data:= StrToDate(dbedit.Text);
  except
     ShowMessage('data errata');
  end;
end;


ancora grazie
Diego
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Diego1981 - Gennaio 09, 2014, 08:45:20 pm
Dimenticavo
comincia a frullarmi in testa di intercettare tasto per tasto  :'( (onkeypress)
ma credo sia una scelta orribile  :'( :'(
ciao e grazie
 
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Stilgar - Gennaio 09, 2014, 10:30:22 pm
Pian e ben ...
Impariamo a leggere cosa dicono i messaggi d'errore. ;)
Qui è il compilatore che ti incazza, non il tuo programma :D
Ti sta dicendo che il nome UpdateAction è già in uso. UpdateAction, così a naso, ma dovrei vedere il compilatore in azione per esserne sicuro, trova 2 metodi con lo stesso nome... Come è possibile? Zeos ha tutto compilabile in lazarus ... altrimenti non lo userei :D

Altra cosa, solo per capirmi meglio io che sono duro di comprendonio.
Cosa intendi con "attivo la procedura e compilo"?

Stilger
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Stilgar - Gennaio 09, 2014, 10:32:05 pm
UDataModule è un tuo file ... non mi ricordo di file di Zeos che abbiano quel nome ;)
Ma vista la mia età .. possibile che stia iniziando a perder colpi la testa :D

Stilgar
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Diego1981 - Gennaio 10, 2014, 08:17:26 am
Ciao Stilgar
si Udatamodule è il nome del mio datamodule e fin qui tutto ok,
infatti la cosa strana del dell'errore è che non faccio altro che usare la procedura automatica ,ovvero faccio doppio click nella cartella eventi della table zeos e lazarus genera:

procedure TForm.ZTableUpdateRecord(DataSet: TDataSet;
  UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
begin

end;

dopo avere fatto questo premo F9 e mando in esecuzione il programma (che prima viene compilato , intendevo questo, però io sono sicuramente un neofita e magari sbaglio termini, quindi correggimi pure cosi imparo) ;)

successivamente

ERRORE che già conosci

se tolgo quella procedura che ti ho scritto sopra tutto ritorna a funzionare
grazie
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Stilgar - Gennaio 10, 2014, 09:16:49 am
"var UpdateAction" è un candidato alla soluzione.
Hai qualche altra variabile/oggetto/metodo che si chiama in quel modo?

Stilgar
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Diego1981 - Gennaio 10, 2014, 10:04:40 am
è la stessa cosa che ho pensato io.....ma non ho proprio nulla che abbia un nome anche lontanamente simile...azz ;D

ops

dimenticanza mia .. (quando ti diceve che sono neofita  ;D)
il compilatore mi da anche questa indicazione
"Hint: Identifier already defined in unit CLASSES at line 1759"
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Stilgar - Gennaio 10, 2014, 10:07:48 am
Prova a mettere in testa al file {$MODE DELPHI}{$H+}

Dimmi se ti da ancora problemi.

Stilgar
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Diego1981 - Gennaio 10, 2014, 10:35:43 am
azz.... cominci ad andare sul complicato (almeno per me)
comunque l'ho inserito cosi:

unit UdataModule;

 //{$mode objfpc}{$H+}
{$MODE DELPHI}{$H+}

interface   

ecc......

e compila senza problemi ma......(purtroppo c'è anche il ma) :o
il messaggio "invalid date" di tipo "econvert "interviene ancora prima dell'evento OnUpdateRecord   :'( :'( :'( :'( :'( :'( :'(
Cavoli ma che evento devo usare per controllare  che sto santissima data sia corretta prima che la dbedit perda il focus  ;) ;)
grazie


Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Stilgar - Gennaio 10, 2014, 10:50:58 am
Bon il problema di compilazione è stato risolto?
Ora abbiamo un problema a runtime?

Si incavola qualche routine di controllo?

Stilgar

EDIT:
Intendevo dire che abbiamo fatto un passo avanti.
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Stilgar - Gennaio 10, 2014, 10:54:29 am
Santa polenta ..
(!99/99/9999;1;_ )
E' questo il pattern di mask che usi?

Secondo me provi ad inserire una data del tipo 1/ 1/2014 e si incavola il StrToDate...
Stilgar
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Stilgar - Gennaio 10, 2014, 10:57:20 am
Prova (!99/99/9999;0;_ )

Stilgar
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Diego1981 - Gennaio 10, 2014, 11:16:27 am
provato ma nulla
tieni presente che ho collegato il dbedit al dasource e nel datafiel del dbedit ho selezionato il campo tipo date collegato al DB ...quindi non faccio nessuna operazione di conversione a livello di scrittura di codice.
una domanda:
ho fatto passare tutti gli eventi possibli nella ztable (OnUpdateRecord, OnPostError, eccc,...) semplicemente mettendo un showmessage('alt') in modo da fermare il programma e ho inserito dei break point per vedere se intervenisse qualche cosa...
non interviene nulla...forse sto guardando la ztable ma devo guardare altrove?? booo :o
grazie

dimenticavo
a runtime quando la dbedit per il focus (e magari ho inserito 44/44/4444) il debugger interviene dicendo" il progetto "XXXXXXX" ha sollevato un eccezione di classe "EconvertError" con messaggio Invalid date" .
at address 4505F3
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Stilgar - Gennaio 10, 2014, 11:36:07 am
Si nella conversione.
Metti il break point lì.

Stilgar
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Diego1981 - Gennaio 10, 2014, 01:40:25 pm
penso di non avere capito
dov'è che che posso verificare la conversione? se non c'è codice che lo converta?
dove posso metterlo il breack point?
grazie
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Stilgar - Gennaio 10, 2014, 01:46:30 pm
 chiami una StrToDate?
quella conversione si rompe ...
Stilgar
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Diego1981 - Gennaio 10, 2014, 02:08:36 pm
non ho bisogno visto che la dbedit lavora direttamente col mapo del db
avevo scritto questa procedura come esempio per verificare il corretto inserimento della data ma non ho ancora idea in quale evento metterla visto che ogni tentativo fatto è stato inutile, interviene sempre prima il messaggio di errore che ormai conosci ehehe  ;D ;D ;D

var
  data: TDate;
begin
  //verifico il corretto inserimento della data
  try
     data:= StrToDate(dbedit.Text);
  except
     ShowMessage('data errata');
  end;
end;
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Stilgar - Gennaio 10, 2014, 02:10:08 pm
SQLite o altro db?

Stilgar
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Diego1981 - Gennaio 10, 2014, 02:13:42 pm
mysql
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Stilgar - Gennaio 10, 2014, 02:25:34 pm
Usa il Logger di Zeos .. (TZSQLMonitor)
Solo per scrupolo.
Attiva tutti i trigger e metti il Break point dentro il metodo di gestione del log.
Non serve che tu faccia scrivere nulla, ma Zeos dovrebbe inviarti tutte le notifiche di quello che sta facendo.
Vediamo a che punto si incastra.
Stilgar

Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Stilgar - Gennaio 10, 2014, 02:27:00 pm
Qui il 3d sta diventando la treccani :D
Se alleghi il progetto e 2 script in croce per la creazione del db e vediamo cosa si riesce a fare ;)
MySQL l'ho già installato :D

Stilgar
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Diego1981 - Gennaio 10, 2014, 08:51:05 pm
Stilgar ci siamo...... ;D
ho seguito il tuo consiglio di verificare con il logger e ho visto che il dbedit non comunicava con il db quando perdeva il focus
quindi l'evento corretto è OnSetTex del campo nella ztable
dopo tre pagine di post ce l'abbiamo fatta
grazie
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Stilgar - Gennaio 12, 2014, 03:28:04 pm
oook

Stilgar
Titolo: Re:DBEDIT E ZEOS LIB
Inserito da: Diego1981 - Gennaio 12, 2014, 05:44:04 pm
grazie
diego