Autore Topic: Progetto pgDesigner 2/3  (Letto 86639 volte)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #15 il: 15 Ottobre 2008, 10:54:31 »
Ti ringrazio per i complimenti, mi fanno molto piacere!

Riguardo a programmi simili per MySQL, in realtà ne esiste qualcuno, e tra questi c'è l'ottimo DBDesigner; quest'ultimo è open, se non erro, ma è costruito con un linguaggio proprietario (Delphi se non erro...).

Prima di rispondere alle tue segnalazioni, premetto che la parte ySQL, come del resto SQLite, è nuovissima rispetto al precedente pgDesigner, ed è ancora in fase di studio; le proprietà e la definizione degli oggetti è complessa, come per PostgreSQL, e soggetta a molte variabili. Tra l'altro, diversamente da PostgreSQL, ho alcune difficoltà a rilevare completamente tutte le caratteristiche degli oggetti, e anche per questo motivo ne ho implementato solo un limitato numero di tipi: tabelle, trigger, viste e relazioni (foreign-key).

Detto questo, passiamo ai problemi riscontrati...

In effetti, quello che dici corrisponde alla realtà; in pgDesigner, il campo Length corrisponde ad un tipo Float, e per cui accetta solo numeri. Come ho scritto sopra, al momento non ho implementato tutto il set di funzioni di MySQL, e tra queste mancano proprio ENUM e SET.
Dato che vorrei limitare problemi di digitazione di dati errati, forse sarà il caso di inserire queste due possibilità in campi separati, però devo analizzare la cosa...
Potrei anche prevedere di gestire questo tipo di dati nello stesso campo di edit, però poi dovrò gestirlo internamente in maniera distinta e separata... analizzo la cosa e vedo cosa posso fare...
Ovviamente se hai qualche idea, a livello di codice, fammela sapere.

Riguardo alle tipologie, queste sono incluse in una tabella interna del driver incluso in pgDesigner, diversa in base alla versione dello stesso driver. Sicuramente questi tipi non li ho inseriti, ma provvederò di farlo quanto prima; la tabella dei tipi contiene anche una descrizione di ogni singolo tipo, usata per il tooltip sulla combobox, per cui dovrò caricare questi tipi e tutte le sue caratteristiche, prelevandole dalla doc ufficiale... abbi pazienza... :-)
A meno che non voglia reiempirla tu :-) , nel caso ti fornisco le direttive...


Ti ringrazio moltissimo per il contributo!!!

Offline ccc

  • Gambero
  • **
  • Post: 97
    • Mostra profilo
    • http://santecaserio.altervista.org/
Re: Progetto pgDesigner 2
« Risposta #16 il: 15 Ottobre 2008, 15:24:50 »
Ti segnalo anche un altro errore: quando tento di aprire un progetto, prima mi esce il dialog "project loaded", ma poi mi appare un errore e pgd si chiude. Uso Gambas 2.8. Ti allego la schermata dell'errore e il file xml del progetto, dimmi se ti serve altro.

I complimenti sono più che meritati anche perchè, anche se magari per te MySQL è ancora secondario, gli utenti troveranno in pgd uno strumento unico. L'unico programma simile per MySQL è MySQL Workbench, ma gira solo su Win... e comunque, le GUI di MySQL per Linux sono instabili e inaffidabili. Io ti consiglio di puntare molto su MySQL.

Io conosco poco pg e ancor meno sqlite, ma se posso aiutarti con le mie consocenze di mysql lo farò volentieri. Dimmi pure come inserire i tipi geometrici e le relative descrizioni. Se vuoi ti posso aiutare a pensare a come riempire altre cose, tipo i set di caratteri... è tutto nell'information_schema.


---
il file xml devo per forza copiarlo qui:

Codice: [Seleziona]



 
 
 
 
 
 


Offline ccc

  • Gambero
  • **
  • Post: 97
    • Mostra profilo
    • http://santecaserio.altervista.org/
Re: Progetto pgDesigner 2
« Risposta #17 il: 15 Ottobre 2008, 15:32:44 »
Un'altra cosa: MySQL non tiene conto delle clausole CHECK. Permette di inserirle per una finta compatibilità con gli altri dbms, ma è una cosa ingannevole, dato che non le rispetta.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #18 il: 15 Ottobre 2008, 18:52:24 »
Non ritengo MySQL un dbms secondario, anche perchè di passi in avanti ne ha fatti parecchi, ed è per la sua velocità che viene impiegato, ad esempio, nei CMS. Il motore è abbastanza semplice ma ci sono grosse differenze rispetto ad un PostgreSQL o un Oracle (con cui lavoro costantemente...).
Dato che questi due li uso in ambito lavorativo, ne conosco abbastanza i segreti (Oracle di più...), e ritengo che siano adatti più in sistemi ad alto livello, cosa che MySQL forse raggiungerà con il tempo.

Ma a parte le disquisizioni...

L'errore in fase di lettura l'ha già segnalato darth, e comunque l'ho già corretto.
Riguardo alla versione Gambas, io uso attualmente la 2.8.2 (ultima stabile), e per cui sarebbe meglio tu usassi questa, altrimenti potremmo avere delle casistiche di errore anomale, dato che alcune cose sono cambiate.
Riguardo ai nuovi tipi MySQL, nel codice sorgente del driver (file pgDriverMySQL50.class, unica versione per adesso...), all'inizio dello stesso, nel metodo "InitDataType()" sono dichiarti tutti i tipi previsti per quella versione del driver. Sono presenti un certo numero di chiamate, con relative creazioni di oggetti pgTypeItem, che definiscono ogni singolo tipo, compresa una propria descrizione. Nella classe "pgTypeItem.class", metodo costruttore "_new()", vengono definiti i parametri di costruzione, che in pratica sono:

' @parameter : String : Name (default="")
' @parameter : String : Type (default="")
' @parameter : String : Parameter (default="")
' @parameter : String : Storage (default="")
' @parameter : String : Min value (default="")
' @parameter : String : Max value (default="")
' @parameter : String : Resolution (default="")
' @parameter : String : Description (default="")

Sono tutti parametri descrittivi, sui quali non viene effettuata alcuna operazione, ma per esempio: il campo nome viene caricato nella combo di edit dei campi tabella, la descrizione viene usata come tooltip (se presente).
Se vuoi, puoi implementare questa parte di codice con i nuovi tipi, visto che li conosci bene, altrimenti sono costretto comunque a leggermi la documentazione relativa. Poi mi passi le variazioni, le controllo un attimo, e le inserisco nella prossima release.

Riguardo alla lettura del db, infatti mi baso sulla tabella "information_schema", come puoi vedere nel codice del driver, ma ho notato che alcune cose non ci sono, o per lo meno forse non sono in quella tabella, oppure devono essere calcolate in qualche modo, non sò bene ora...

Ora provo pure il file di progetto che mi hai inviato, ti faccio sapere se c'è qualcosa che non và.

Per finire: ad ogni modo, dall'ultimo rilascio, ho fatto proprio alcune modifiche al driver MySQL. Ora vedo di fare il pacchetto e di pubblicarlo appena possibile.

Se hai domande da fare, circa la logica del programma, o su cose inerenti al codice, non esitare; inoltre, se hai qualche idea sui campi da mostrare nelle form di edit, idem con patate!

Ciao e grazie!

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #19 il: 15 Ottobre 2008, 19:20:15 »
Nuova release alpha!

Modifiche: eseguite alcune correzioni nelle form di edit degli oggetti, e nel driver per MySQL. Inoltre è stato corretto il problema segnalato da darth, relativo alla funzione di gestione dello storico progetti.

Erroneamente, nei precedenti file, la directory del progetto era stata nominata come il file *.tar.gz. Da ora in avanti, la directory assumerà il corretto nome: pgDesigner2

Nota: nella home utente viene creata la directory nascosta ".pgdesigner2", che contiene il file di configurazione del programma e il file di log. Quest'ultimo viene soprattutto utile in caso di errore, perchè riporta gli errori rilevati nel programma, in particolare quelli che provocano il crash. In questo caso può essere utile inviarmi questo file, in modo che possa identificare eventuali anomalie; finora mi è sono state inviate immagini del messaggio di errore, ma ritengo che è il caso di evitarle, perchè appesantiscono inutilmente il forum. Restano valide comunque quelle necessarie ad indicare aspetti e condizioni particolari o anomalie, come chiara descrizione di questi eventi.

Grazie a tutti!

g.paolo

  • Visitatore
Re: Progetto pgDesigner 2
« Risposta #20 il: 15 Ottobre 2008, 21:34:35 »
@md9327
Citazione
Il fatto che il file non è visibile non dipende da pgDesigner, dato che usa l'oggetto Dialog.OpenFile() per la selezione del file di database. Non credo neanche sia un problema di Dialog, perchè non ho mai riscontrato problemi simili. L'unica cosa mi viene in mente, è che forse hai qualche impostazione dell'ambiente Gnome che limita la visualizzazione; ma la cosa è molto strana, perchè a quanto mi risulta l'unica impostazione è la possibilità di nascondere solo i file che iniziano con il punto (file nascosti), a meno che il file non abbia qualche impostazione chmod che comunque obbliga ad un comportamento anomalo.


Impostazioni d'ambiente dici? Non ho settato nulla al di fuori delle impostazioni di default, e per quanto concerne i permessi, il file incriminato è settato su 777.
Confermo che anche in Ubuntu 8.04 il punto serve a nascondere files e cartelle, e la versione di gambas2 che uso è la 2.8.2-1ubuntu.
Confermo comunque che il problema sta proprio nella mancanza di estensione, perchè se provo a rinominarlo come "3M_immobiliare.sq3" viene visto ed aperto.

Dopo aver importato nel nuovo progetto due tabelle dal file sqlite3, ho provato a spostare le singole finestre flottanti contenenti la descrizione dei singoli campi, dalla posizione di aggancio alla sinistra della finesrta programma.
Se provo a spostare una tabella con pochi campi, la medesima si sposta agevolmente senza problemi, ma se ci provo con quella che contiene circa 50 campi ottengo il seguente errore:

unkown symbol 'MouseY' in class 'pgPanelProjectGraphic'
code: 11
class: pgActionManager
where: pgActionManager.AreaMouseMove.1747
trace: pgActionManager.AreaMouseMove.1747
trace: pgEventManager.Event_MouseMove.264

Se ti può aiutare....!

g.paolo

  • Visitatore
Re: Progetto pgDesigner 2
« Risposta #21 il: 15 Ottobre 2008, 21:54:00 »
Ooops, mi correggo!
Ho scoperto che anche con le finestre con pochi campi accade l'errore suddetto, con la differenza che l'errore riporta "mouseX" anzichè "mouseY" quando la finestra dei campi tabella si avvicina ai pannelli di destra.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #22 il: 15 Ottobre 2008, 23:49:39 »
Proverò a vedere se c'è qualcosa che impedisce di vedere i file senza estensione... ti farò sapere...

Riguardo all'errore lo controllo, ma penso sia causato quando l'immagine supera i limiti del diagramma.
Tanto per sapere, hai per caso modificato le dimensioni di base del diagramma di progetto (menu Strumenti/Opzioni) ?

Ultima cosa, le anomalie le hai riscontrate in quest'ultimissima versione ?

Comunque, controllo il tutto e vediamo di correggere...

Bye

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #23 il: 15 Ottobre 2008, 23:59:24 »
Ops, hai ragione tu su Dialog !

A quanto pare, se si imposta un filtro, come ad esempio:

Codice: [Seleziona]

Dialog.Filter = ["*.*", ("All files")]


la visualizzazione si limita a far vedere tutti i file, ma che abbiano comunque un'estensione (il punto + *).
Se gli metto un solo asterisco (es. "*"), fà vedere solo i file senza estensione, e così via...

Non mi ero accorto di questa anomalia, perchè in ogni caso prevedevo un estensione ai file che leggevo e creavo, ma a questo punto il discorso cambia...
Ho provato a togliere il filtro, e in effetti ora funziona, ma la cosa è alquanto strana, e molto diversa dal comportamento di tutti gli altri linguaggi.
Ad ogni modo, se digiti direttamente il nome del file, lo prende ugualmente, solo che non lo vedi in lista, ma certo che la cosa non è molto simpatica.

Comuque ho già fatto la modifica...

Sull'errore "Mouse" mi ero sbagliato, in quando è vero che si verificava all'avvicinarsi dell'oggetto al margine del diagramma, ma era causato da un'errore da me introdotto in alcune ultime modifiche del codice.

Anche questo è stato corretto, ed è presente in questa release.

Bel lavoro!

P.S.: vedi che l'aiuto serve?

Offline ccc

  • Gambero
  • **
  • Post: 97
    • Mostra profilo
    • http://santecaserio.altervista.org/
Re: Progetto pgDesigner 2
« Risposta #24 il: 16 Ottobre 2008, 04:25:18 »
Un paio di domande:

- Cosa devo mettere come Type? Va bene "G"? Considera che non è un testo, perchè per inserire ad esempio un punto la sintassi è questa:
INSERT INTO t ( p ) VALUES ( POINT(1 1) )

- Devo mettere i nuovi tipi in ordine alfabetico mischiati con gli altri, oppure li metto tutti alla fine per raggrupparli? Sono 8.

- Con Parameter ti riferisci ai parametri utilizzati per creare il campo, cioè in pratica le dimensioni?

A parte le descrizioni ho lasciato tutti gli altri campi in bianco. La documentazione non fa cenno alla memoria occupata. In effetti, a parte POINT, sono tutte collezioni di oggetti e quindi immagino non sia calcolabile. Gli altri campi (massimo, minimo, risoluzione) non sono applicabili.

----

Stavo ripensando al problema dei campi ENUM/SET. Credo che un modo pulito per risolvere la questione sia il seguente:

- Nell'evento MYSQLLength_Change fare un parsing del campo Param dell'ogetto pgTypeItem selezionato
- se contiene [(l)] il form si deve comportare come fa ora
- se non contiene nulla, MYSQLLength deve essere disabilitato
- se contiene qualcosa di simile a ciò che contiene ora ENUM: TextLabel10.Text = "Values". In questo caso, l'evento Event_KeyPress deve evitare di fare il controllo sui tasti premuti.

Tra l'altro, un parsing simile si potrebbe fare per il contenuto deel campo pgTypeItem.Type: in base al suo contenuto, alcuni checkbox possono essere disabilitati. Ad esempio, Signed non ha significato per un campo di testo.

Cosa ne dici? Se vuoi io mi offro di provare a fare quest'ultima cosa. So che è meno utile, ma è molto semplice e quindi è un modo indolore per familiarizzare con il tuo codice, se poi non ho problemi e il mio lavoro ti soddisfa, posso provare a fare anche la prima (nel modo che ho descritto o nel modo che mi dirai tu).

In genere non ho tempo da dedicare agli hobby, ma per qualche giorno posso darti una mano, se ti serve.

g.paolo

  • Visitatore
Re: Progetto pgDesigner 2
« Risposta #25 il: 16 Ottobre 2008, 08:54:48 »
@md9327
Confermo che l'errore si presentava sulla versione 643 e che non ho modificato la grandezza della finestra. Vedo comunque che hai trovato l'inghippo!
Ora provo la 644

g.paolo

  • Visitatore
Re: Progetto pgDesigner 2
« Risposta #26 il: 16 Ottobre 2008, 09:58:04 »
Due piccole domande:
1) non ho trovato la funzione di "browse" della singola table, non esiste o sono io imbranato?
2) non ho ancora provato il metodo per impostare le relazioni tra i campi, ma immagino che dopo aver importato le table si debbano stabilire i vari indici primari e secondari, ed allora è possibile collegare tra loro gli omonimi indici di riferimento. E' corretto?

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #27 il: 16 Ottobre 2008, 12:50:41 »
1) non capisco cosa intendi per "browse", in pgDesigner non è implementata alcuna funzione per visualizzare i dati del database, perchè non è il suo scopo;

2) se parli di sqlite, l'implementazione delle relazioni non è attiva, perchè non trovato nessuno modo per gestirla su questo db, anzi, non mi sembra proprio che le utilizzi. Se vogliamo implementarla nel progetto, possiamo farlo a livello puramente grafico, anche se non lo ritenevo utile, solo che poi non viene utilizzato in output, durante la creazione del db.
Ad ogni modo, per attivare una relazione ha bisogno di: almeno due tabelle, almeno un campo come chiave primaria sulla tabella padre, e poi anche un mouse, una tastiera...ecc. :-) Ovviamente scherzo, ma i primi due elementi sono quelli veri ed essenziali.
Ha, la prima tabella selezionata è quella padre; inoltre, se non è presente già un campo con nome e tipologia uguale al campo chiave della tabella padre, nella tabella di destinazione vengono creati in automatico, e comunque modificabili successivamente...

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #28 il: 16 Ottobre 2008, 13:10:15 »
For santecaserio:

Codice: [Seleziona]

- Cosa devo mettere come Type? Va bene "G"? Considera che non è un testo, perchè per inserire ad esempio un punto la sintassi è questa:
INSERT INTO t ( p ) VALUES ( POINT(1 1) )


riguardo alla classe pgTypeItem, la proprietà Type ha un significato generico che identifica grossolanamente il tipo, diciamo che per definizione ho usato: C=carattere, N=numerico, B=binario; se il valore che tratta o che restituisce è un numerico, allora puoi impostarlo a "N". Ad ogni modo, nei driver per PostgreSQLx, esiste sempre lo stesso metodo di inizializzazione, e per postgres esistono oggetti simili (se non addirittura uguali) a quelli che hai segnalato per mysql; puoi dare un'occhiata da quelle parti... Comunque, il tipo al momento è solo informativo, e non ha utilizzi pratici nel programma.

Codice: [Seleziona]

- Devo mettere i nuovi tipi in ordine alfabetico mischiati con gli altri, oppure li metto tutti alla fine per raggrupparli? Sono 8.


guarda, puoi anche mandarmeli via email, o postare direttamente qui le righe di codice, è inutile che mi invii tutto il file, anche perchè comunque dovrei anallizarne prima le differenze, visto che comunque ci lavoro in modifica. Insomma, non ci sono problemi.

Codice: [Seleziona]

- Con Parameter ti riferisci ai parametri utilizzati per creare il campo, cioè in pratica le dimensioni?


anche questo è descrittivo, se vedi quelli già presenti, danno un'idea di come deve essere impostato un determinato tipo di campo, e quali dati accetta e restituisce; quelli che ho già inserito, li ho determinati leggendo la doc ufficiale di mysql, andando ad analizzare eventuali varianti, ma anche qui nessun problema, perchè al momento l'unica cosa cosa davvero utile a gDesigner è il nome del tipo, il resto al momento è tutta descrizione, anche se gli ho dato una parvenza di ordine e classificazione...

Codice: [Seleziona]

A parte le descrizioni ho lasciato tutti gli altri campi in bianco. La documentazione non fa cenno alla memoria occupata. In effetti, a parte POINT, sono tutte collezioni di oggetti e quindi immagino non sia calcolabile. Gli altri campi (massimo, minimo, risoluzione) non sono applicabili.


perfetto, se non esisono vincoli, non è necessario evidenziarli.

Riguardo alla tua idea, al momento mi sembra buona, e non vedo problemi nell'applicarla, tranne per il fatto che allora la proprietà type deve essere utilizzata e impostata in modo vincolante e restrittivo. In realtà, il creare una classe pgTypeItem solo per gestire i nomi dei tipi, non era nei miei intenti, e nel futuro pensavo di dargli un significato più incisivo nel programma; se hai tempo, puoi certamente provare ad implementare la tua idea, poi la vediamo insieme.  :ok:

Offline ccc

  • Gambero
  • **
  • Post: 97
    • Mostra profilo
    • http://santecaserio.altervista.org/
Re: Progetto pgDesigner 2
« Risposta #29 il: 16 Ottobre 2008, 14:25:35 »
Si è probabile che i tipi siano gli stessi, credo ci sia uno standard che definisce queste cose.

In MySQL comunque funziona così: GEOMETRY è una classe astratta, poi sotto c'è una gerarchia di sottoclassi. Alcune classi sono istanziabili tramite un'apposita funzione, tipo POINT(x y), altre no perchè troppo generiche. A parte GEOMETRY, mi pare che tutte quelle utilizzabili come tipi siano istanziabili, ma non tutte le classi istanziabili sono usabili come tipi, perchè magari sono troppo specifiche. In realtà una volta che inizi a usarle capisci che è tutto perfettamente logico, anche forse non sembra.

Questo per dire che è difficile schematizzarle...

Ti copio qui quello che ho fatto

Codice: [Seleziona]

ME.AddDatatype(pgTypeItem.Create("GEOMETRY", "G", "", "", "", "", "", "Generic geometric object"))
ME.AddDatatype(pgTypeItem.Create("GEOMETRYCOLLECTION", "G", "", "", "", "", "", "Collection of geometric objects"))
ME.AddDatatype(pgTypeItem.Create("LINESTRING", "G", "", "", "", "", "", "Geometric line made of segments"))
ME.AddDatatype(pgTypeItem.Create("MULTILINESTRING", "G", "", "", "", "", "", "Collection of geometric linestrings"))
ME.AddDatatype(pgTypeItem.Create("MULTIPOLYGON", "G", "", "", "", "", "", "Collection of geometric polygons"))
ME.AddDatatype(pgTypeItem.Create("MULTIPOINT", "G", "", "", "", "", "", "Collection of geometric points"))
ME.AddDatatype(pgTypeItem.Create("POINT", "G", "", "", "", "", "", "Geometric 0-dimensional object"))
ME.AddDatatype(pgTypeItem.Create("POLYGON", "G", "", "", "", "", "", "Geometric polygon"))