Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: gianpa - Febbraio 07, 2013, 08:56:38 pm

Titolo: efficacia del DBnavigator
Inserito da: gianpa - Febbraio 07, 2013, 08:56:38 pm
non ho capito se il problema è legato all'SQLITE3 che uso per il db ,ma se per esempio uso il pulsante DELETE nel dbnavigator mi cancella il record corrente ; se però poi riavvio il programma mi ritrovo lo stesso record che avevo cancellato !!!

grazie e ciao
 p.s.: non è che forse mi tocca fare il commit e l'update ???
Titolo: Re:efficacia del DBnavigator
Inserito da: Stilgar - Febbraio 07, 2013, 09:12:47 pm
Più che la commit ... hai fatto la post?
Nel senso che i componenti data aware tengono traccia dei cambiamenti, ma fino al post non vengono inviati al motore. In questo modo puoi fare anche la cancel senza rileggere da DB. (Operazione potenzialmente pesante se le query sono particolarmente complesse).
In generale il DBNavigator ti dovrebbe attivare e disattivare i bottoni in modalità gratis (post e cancel). Al massimo usa il refresh come pulsante subito dopo aver eseguito le operazioni che vuoi (edit, insert) fai il post e il refresh.
Stilgar
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 07, 2013, 10:51:33 pm
ho fatto un bottone che salva mettendo così :

SQLQuery1.Edit;
  SQLQuery1.UpdateMode:=UpWhereChanged;
  SQLQuery1.ApplyUpdates;
  SQLTransaction1.Commit;
  SQLQuery1.Close;
  SQLQuery1.Open;                           

ma mi dà errore se successivamente clicco su edit ,sia da bottone che da dbNavigator!
per il delete proverò
ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: Stilgar - Febbraio 08, 2013, 09:54:52 am
Azz, ma fare semplicemente "SQLQuery1.Post" ... non hai il metodo?
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 08, 2013, 10:10:42 pm
il problema è che con sqlquery1.post l'unica cosa che fà è tornare col puntatore al primo record e basta !!!
non mi cancella proprio nulla!
e così :
                SQLquery1.Delete;
      SQLTransaction1.Commit;
   sqlQuery1.post;
   SQLQuery1.Close;
  SQLQuery1.Open;     
mi dice che non è in editMode
ed anche aggiungendolo prima di delete , stesso errore

ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: Stilgar - Febbraio 09, 2013, 01:48:54 am
Hai provato a NON fare la commit?
Stilgar
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 09, 2013, 03:01:21 pm
ho provato a togliero ma mi dà lo stesso errore:sqlquery1 is not in edit or insert state!
e anche se aggiungo: sqlquery1.edit , mi ritorna lo stesso errore!


ciao
p.s.:
ovviamente provo con bottoni miei perchè col dbNavigator devo tenere le azioni standard senza poterle modificare !
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 09, 2013, 07:48:54 pm
ho provato anche col dbNavigator ma sia cliccando su edit che su delete funziona solo in apparenza ,cioè modifica e cancella i record durante il funzionamento del programma; se poi terminato e riavviato i record sono ancora quelli originarii ... anche cliccando su post dopo l'edit perchè dopo delete ,il POST risulta disabilitato!



ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: Stilgar - Febbraio 09, 2013, 09:49:05 pm
Ragazzo mio. A questo punto, visto che la cosa diventa un attimo fastidiosa, workaround, o come dicono dalle mie parti "femo el giro largo".
Codice: [Seleziona]
delete from table where condition1 and condition2.
Chiedi all'engine di ranzare la riga che ti interessa ;)

Stilgar
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 10, 2013, 10:02:18 am
Ma cosa intendi ?
Titolo: Re:efficacia del DBnavigator
Inserito da: brunello - Febbraio 10, 2013, 11:13:39 am
sei sicuro che nella query non hai utilizzato un ordinamento non indicizzato della tabella che ti restituisce il dataset solo in lettura?
Titolo: Re:efficacia del DBnavigator
Inserito da: Stilgar - Febbraio 10, 2013, 12:15:55 pm
Gianpa.
I componenti dataware non fanno altro che lanciare le "query" al posto tuo.
L'eliminazione di un record da un insieme, avviene in 2 fasi.
1) Eliminazione logica dal programma.
2) Eliminazione via engine su database.

Se la seconda operazione non avviene o da un errore che non emerge a programma, il record è cancellato temporaneamente. Al primo "refresh" dei dati viene pescato di nuovo.
Se contatti direttamente l'engine e lanci la cancellazione, al refresh non avviene il caricamento del record in questione.

Poi c'è da considerare che questo regionamento ha senso solo per query del tipo "Select * FROM Tabella1".
Nel caso di "Select * from Tabella1, Tabella2 WHERE Tabella2.campo1=tabella1.Chiave1" non è detto che l'engine riceva una "delete" sensata.
Esempio di problemi da risolvere:
1) Da quale tabella deve cancellare?
2) Quale tabella deve lasciare inaterata?

Per questi problemi, in genere si usa un'altro componente. Uno di Aggiornamento. (Update qualche cosa).
Il primo componente (quello della lettura dei dati) contatta il secondo per le modifiche.
Se ricordo bene, puoi impostare tutte queste cose (updata, insert etc etc etciù) dal componente di lettura dei dati che hai usato.
Cerca DeleteSQL (se ricordo bene) nell'ObjectInspector.
Fammi sapere.
Stilgar
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 10, 2013, 02:56:09 pm
ho riprovato facendo prove diverse per ogni azione:
con bottoni miei sono riuscito a inserire nuovi record e a modificarli ,ma mai a cancellarli!
però il dbNavigator non ha in questi casi alcuna validità perchè cliccando sui suoi bottoni standard sembra solo simulazione e basta !!!

possibile ?

ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 12, 2013, 10:14:45 am
usando sqliteAdmin ho modificato un po' i dati dalla scheda "modifica dati" e tutto funziona perfettamente !
quello che vorrei fare è passare il controllo del db al dbnavigator di Lazarus ,non mi sembra di chiedere troppo!!!
nei controlli non ho trovato alcuna restrizione:non ci sono settaggi di sola lettura dei dati !!!

 :'(

ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 12, 2013, 03:49:51 pm
forzando la cancellazione del record con questi comandi:
SQLQuery1.Close;
  SQLQuery1.SQL.Text:='DELETE FROM munizione WHERE copalle= :stid;';
  SQLQuery1.Params.ParamByName('stid').AsString:=dbedit1.text;
  SQLQuery1.ExecSQL;
  SQLTransaction1.commit;   

mi ritorna l'errore :"database is locked" !!!!
allora il db è bloccato !? da dove si può rendere UNLOCKED ?

ciao e GRAZIE!               
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 13, 2013, 03:41:40 pm
l'unico ReadOnly , trovato in sqlQuery1 è impostato a FALSE !!!

boh !!!

ciao !  :-[
Titolo: Re:efficacia del DBnavigator
Inserito da: Stilgar - Febbraio 13, 2013, 03:48:08 pm
Manda il progetto attraverso il forum ...
Così è difficile capire cosa non funzioni ...

Stilgar
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 13, 2013, 05:02:49 pm
eccolo:


ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: Stilgar - Febbraio 15, 2013, 02:38:02 pm
Allora.
Evita di usare le transazioni direttamente.
Imposta le query ausiliarie (InsertSQL, DeleteSQL).

Usa il POST quando hai modificato il codice.
Ho dato una rapida occhiata al codice....
Usa il formattatore del codice integrato con Lazarus ... (Ctrl+D).
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 15, 2013, 06:20:40 pm
avevo già provato a farlo ,ma mi diceva "deleSQL identifier not found" !
non lo riconosce !!!
nelle uses ho:
Classes, SysUtils, sqlite3conn, sqldb, DB, FileUtil, Forms, Controls,
  Graphics, Dialogs, LCLType, DBGrids, StdCtrls, DBCtrls; 

ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: Stilgar - Febbraio 15, 2013, 09:44:15 pm
mmmm.
Io prediligo ZeosDB. Non conosco le librerie pre montate a bordo. (per dirla tutta ho dovuto reinstallarle per caricare la tua form ;) )
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 17, 2013, 09:57:50 am
ho capito non c'è nulla di standard , in Lazarus!!!

ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: brunello - Febbraio 17, 2013, 11:11:10 am
ho provato a compilare il tuo progetto ed effettivamente non funziona, mi sono perso in alcuni passaggi comunque per farla breve ho provato a utilizzare il tuo archivio interfacciato con zeos ho messo la connessione e la query (ho provato anche la table) e il dbnavigator funziona correttamente, ti posto in allegato la mia prova, ciao Brunello
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 17, 2013, 03:16:59 pm
grazie ! lo provo subito!
ma...devo installare prima zeos ?

ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 17, 2013, 05:32:32 pm
ho scaricato zeosdbo-6-6-6-stable estratto,aperto il mio progetto in lazarus,in packages ho cliccato su apri caricato component,clicco su compila-----> ma mi dà errore su zclass!

ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: brunello - Febbraio 17, 2013, 07:08:45 pm
io utilizzo la 7 che puoi scaricare all'indirizzo http://sourceforge.net/projects/zeoslib/
ciao Brunello
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 18, 2013, 05:56:43 pm
scaricata ed installata !
però se apro il progetto mi dice :

il seguente pacchetto non è stato caricato: pl_zeosdbcomp

Ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: brunello - Febbraio 18, 2013, 10:35:06 pm
in verita' io uso lazarus con l'installazione di codetyphon che ribatezza i file anteponendo pl_  in alcune librerie, se lo togli tramite un editor dal file pas prima di caricarlo con lazarus dovrebbe andare, ciao Brunello
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 18, 2013, 11:59:29 pm
non ho capito proprio bene!
ho trovato il file pl_zeosdbocomp nelle uses e l'ho rinominato!
ora lo trovo nell'analizzatore di progetti ma non riesco a rinominarlo!
Sinceramente non saprei dove rinominare il .pas che invece dici tu!
forse per farlo poi caricare dovrei rinominare il mio package ? per farlo caricare poi dal tuo progetto?

ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: brunello - Febbraio 19, 2013, 08:25:10 am
ho modificato i due file prova con questi, non ho una istallazione standard di lazarus per verificare, ciao Brunello
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 19, 2013, 02:39:22 pm
non capisco ! ora mi dice:
il seguente pacchetto non è stato caricato: zeosdbcomp

come mai ? forse ho modificato qcosa e adesso non lo trova più?


ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: Stilgar - Febbraio 19, 2013, 09:42:28 pm
Giampa....
Devi compilare ed installare solo 1 pacchetto.
Hai usato la versione 7 o quella 6.
La 7 è stabile per Lazarus. ha ancora rogne con Delphi.
Uso la 7 senza nessun tipo di problema.
Devi installare ZComponents. Con le dipendenze di questo ti compila anche il resto.
Ma devi installare solo ZComponents.

Stilgar
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 20, 2013, 01:50:23 pm
infatti è questo che non capisco!!!
io clicco su package - apro zcomponent - lo installo- mi dice che caricherà anche gli altri pacchetti - fà la compilazione e quando riavvia lazarus mi ridà lo stesso errore!
cosa c'è di sbagliato?

ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: Stilgar - Febbraio 20, 2013, 03:21:59 pm
mmm a le lo da per tutti i pacchetti aggiuntivi ... ma se lo carico con il doppio clic da file system.
Se carico l'ide e poi il progetto (o meglio, si caica lui l'ultimo usato) non da problemi.
Credo sia una rogna sotto windows... ma è tollerabile, se si fa quello che dice lui ;)

Stilgar
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 21, 2013, 12:26:10 pm
sì ,però io non ci riesco,continua con lo stesso errore anche a farlo ricaricare!
mi sento impotente quando capitano certe cose e non si riesce ad andare avanti!!!!

ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: Stilgar - Febbraio 21, 2013, 01:26:40 pm
Gli dici "mi piace grosso" ... ok sembra una cosa porno ... ma a me esce il bottone con quel nome a volte.
...
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Febbraio 22, 2013, 06:05:56 pm
Gli dici "mi piace grosso" ... ok sembra una cosa porno ... ma a me esce il bottone con quel nome a volte.
...

ehy !! non ti seguo ... dove stai andando a parare ????? ahahah

ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: antoniog - Febbraio 23, 2013, 07:09:24 am
caro Giampa, i bottoni del TDBnavigator li puoi utilizzare così:
"
procedure TSottoGF.DBNavigator1Click(Sender: TObject; Button: TDBNavButtonType);
begin
  case Button of
         nbFirst : messagedlg('Primo record ',  mtConfirmation, [mbOK],0);
         nbPost : 'quello che vuoi anche'
                      begin
                         if .... Then
                           else ........
                      end;
         nbDelete : ...................;


    end;

end;   
a me interessa se sei riuscito a cancellare il record anche dal file SQLITE3 e come.
ciao.
Titolo: Re:efficacia del DBnavigator
Inserito da: antoniog - Febbraio 23, 2013, 08:50:05 pm
ciao, ci sono riuscito :
"Per utilizzare la funzione ApplyUpdates, il dataset deve contenere almeno un campo che risponda ai requisiti di una Primary Key (i valori devono essere UNIQUE e non NULL)"
le tabelle devono avere un Primary Key univoco (un campo che serva solo allo scopo), poi si può indicizzare la tabella sul campo o sui campi che interessano. Ho utilizzato Zeos 7.0.3, ho inserito nel modulo dati  TZconnection e Tztable, in TZtable ho messo il mio indice vero, nell'edita campi nel campo 'mioIDX' KeyFields: <nome key univoco>.
TDBNavigator:
TSottoGF.DBNavigator1Click(Sender: TObject; Button: TDBNavButtonType);
begin
  case Button of
         nbPost : begin
                  ModuloDati.TZtable.ApplyUpdates;
                  end;
         nbDelete : ModuloDati.TZtable.ApplyUpdates;
    end;

end;   
a me funziona, fammi sapere.
Titolo: Re:efficacia del DBnavigator
Inserito da: Stilgar - Marzo 26, 2013, 10:38:07 am
SQLTransaction1.Commit;
Hai provato a togliere la commit e lasciare autocommit?
In questo modo si gestisce lui le transazioni?

Stilgar
Titolo: Re:efficacia del DBnavigator
Inserito da: gianpa - Marzo 26, 2013, 05:18:31 pm
ciao

non ho Zeos installato quindi non ho provato!
ho scaricato l'ultima versione di zeos ma poi ho rinunciato ad installarla ; sono un po' demoralizzato...

ho provato mettendo e togliendo tutto il possibile Stilgar ,ma il problema è che esegue i comandi solo per la visualizzazione ,ma non in sostanza:riavviando il programma torna tutto con i records dell'inizio creati col sqliteAdmin

ciao
Titolo: Re:efficacia del DBnavigator
Inserito da: Stilgar - Marzo 27, 2013, 09:36:28 am
Immagino che la frustrazione sia alta.
Non darti per vinto ;)