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

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #120 il: 09 Maggio 2011, 17:07:47 »
In realtà, come in tutti i RDBMS che si rispettino, esiste la possibilità di abilitare utenze anche con diritti amministrativi, o con abbastanza privilegi per poter fare cose a livello admin, tra queste anche la possibilità di creare nuovi database, magari assegnando una tablespace appropriata.

A questo punto, noi abbiamo due aspetti da considerare:

1) l'utente proprietario del database
2) l'utente che è proprietario degli oggetti che inserisce nel database

le due opzioni possono essere compatibili, nel senso che nessuna esclude l'altra, per cui abbiamo due possibilità:

1) l'utente che crea il database è postgres, che poi dà le opportune grant agli utenti necessari
2) l'utente crea gli oggetti su un database già pronto, con opportune grant date da postgres all'utente che li crea

Gestire due utenze, una per la creazione del db, l'altra che crea gli oggetti, diventa alquanto onerosa se gestita all'interno di pgDesigner.
Finora non ho mai visto applicazioni che mettono a disposizione questa logica.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #121 il: 10 Maggio 2011, 21:13:19 »
Ho appena aggiornato il repository.

Ho sistemato altre cose, e una che mi è stata segnalata da un'utente polacco...

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #122 il: 10 Maggio 2011, 22:29:02 »
Scaricato e compilato.

Ho notato una piccola anomalia nel popolamento degli attributi di un Tipo Enum (sempre lui...),  per ogni attributo inserito, a seguire  il primo, al click del pulsante Nuovo, nella TextBox PGSQLEnumName appare il testo dell'elemento precedentemente selezionato nella GridView ( non l'ultimo inserito), mentre dovrebbe essere vuota.

L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #123 il: 11 Maggio 2011, 10:27:21 »
In effetti questo è uno strascico dell'evento di selezione della riga nella lista.
La selezione riporta il contenuto della riga nei campi di editing.
E' ovvio che durante gli inserimenti questo può dar fastidio, ma non posso ovviare.
Comunque, il pulsante Insert aggiunge sempre, a prescindere se il dato è già presente nella lista. Il pulsante Modifica aggiorna la riga selezionata (se non vuota).

In definitiva, questa non è un'anomalia, ma solo la normale gestione dell'evento....

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #124 il: 11 Maggio 2011, 21:21:20 »
Rieccomi,
chiarito il discorso riguardo gli attributi, ti chiedo un chiarimento riguardo SQLite3.
questo motore dalla versione 3.6.19 ha introdotto il supporto alle foreign keys, che puoi configurare nel seguente modo:
Codice: [Seleziona]
CREATE TABLE comune(
  comune_id     INTEGER PRIMARY KEY AUTOINCREMENT,
  comune   TEXT,
  provincia TEXT,
  FOREIGN KEY(provincia) REFERENCES provincia(sigla)
);
In pgDesigner2 le relazioni sono disabilitate per SQLite3, pensi di renderle disponibili in futuro?

EDIT
Anche per MySQL risulta impossibile creare relazioni.
« Ultima modifica: 11 Maggio 2011, 21:33:50 da sotema »
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #125 il: 12 Maggio 2011, 00:13:43 »
I due driver, MySQL e SQLite, li ho aggiunti in questa nuova versione, anche per offrire un più ampio spettro all'utilizzo del programma.

Ho iniziato ad inserire le basi di questi due motori, ma poi mi sono fermato, perchè avevo da sistemare la logica applicativa, per cui questa parte l'ho lasciata un pò in disparte.

Di certo, la mia idea è quella di seguire in qualche modo tutte le caratteristiche di ogni singolo motore, almeno ci proverò, per cui vedrò di implementare le varie proprietà di mano in mano...

Sicuramente per SQLite, almeno da quanto estrapolato dalla documentazione, la logica relazionale l'ho lasciata disattivata, ma se tu mi confermi che invece è presente, vedrò di implementarla. Non ricordo la presenza dell'istruzione che mi hai indicato (foreign key).

In pgDesigner, la logica delle relazioni mi ha costretto a implementare codice ad-hoc, sia per le sue caratteristiche, sia perchè deve seguire un filo di astrazione, che prescinde da quanto viene poi scritto sul database. Questo per dire che, la logica delle relazioni è in qualche modo slegata dal resto (nei driver), ma ne fà anche parte (concetto astruso, ma è così...).
In pratica, se non ricordo male, basta che riattivare la logica anche per SQLite e abilitare i riferimenti interni in modo che questi vengano correttamente popolati e gestiti dall'applicazione.

Riguardo a MySQL, sempre se non ricordo male, la parte relazionale mi risulta attiva. Se non funziona forse è a causa di qualche problema che dovrò analizzare. Ma forse mi sbaglio... In effetti il mio lavoro si è concentrato più sui driver PostgreSQL che su altri, e quindi è possibile qualche errore o dimenticanza.

Detto questo, se hai qualche proposta concreta da farmi, è bene accetta, come in questo caso. Se hai la possibilità di scrivere codice, meglio...  ;D
Purtroppo la documentazione è quasi inesistente, ad eccezione di alcune specifiche che ho scritto, relative ai file di progetto e alla configurazione su disco. Anche in questo, dato il poco tempo a disposizione, avrei bisogno di una mano, per non parlare delle traduzioni in altre lingue...

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #126 il: 12 Maggio 2011, 08:41:09 »
Il supporto alle Foreign Key in SQLite l'ho scoperto per caso, consultando la doc sul sito ufficiale.
Riproducendo il DB che sto disegnando con PG mi è nato il problema; non conoscendo il motore in oggetto mi sono collegato al sito http://www.sqlite.org/docs.html e nelle FAQ ho trovato la risposta. Da qui la segnalazione che ti ho fatto.
Ho quindi sospeso con SQLite e avviato un nuovo progetto MySQL con le stesse finalità. La sorpresa è stata scoprire che anche con questo motore il pulsante/menu Relazioni risultava disabilitato.
In realtà il mio interesse è concentrato su PG, le prove con Lite e MY le faccio perché ritengo PGD2 un applicativo eccezionale (non è plagio) e mi fa piacere contribuire al suo successo.
Riguardo l'aiuto che posso offrirti,  credo di non avere le conoscenze adatte a contribuire al codice, circa la documentazione ci ragiono e ti faccio sapere, scusami ma il tempo è veramente tiranno, le proposte verranno sicuramente proseguendo con lo sviluppo del DB.
Nel frattempo vedo se trovo qualcuno disposto a collaborare per le traduzioni; hai delle priorità riguardo le lingue?
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #127 il: 12 Maggio 2011, 13:38:52 »
Riguardo alle traduzioni ho visto che il francese è fermo al 7%; ho un amico che si è detto disponibile a provarci. Se non hai già altri contatti provo a mandargli il .po
Ciao
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #128 il: 12 Maggio 2011, 13:47:03 »
Bè, certo.

C'era un francese che ha fatto la traduzione della versione 1.x, ma a causa di impegni non ha potuto continuare.

Se il tuo amico è disponibile, certo ben volentieri!

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #129 il: 13 Maggio 2011, 16:33:04 »
Ho inviato il .po.
Nel frattempo sto studiando pgDesigner2 per capire se posso darti una mano col codice. Ho deciso di partire dal problema delle relazioni che risultano disabilitate con MySQL50.
Credo il problema stia nella classe pgMySQL50 alla funzione
Codice: [Seleziona]
PUBLIC FUNCTION isValidOption(type AS Integer) AS Boolean
che ritorna un valore FALSE alla riga
Codice: [Seleziona]
CASE pgDataInfo.OBJ_DB_RELATION
ho riscontrato anche un errore nella funzione Esporta verso fonti esterne. La funzione _sqlTable della stessa classe, alla riga 2084, esegue il ciclo
Codice: [Seleziona]
FOR EACH oField IN oRelation.GetValue("Field2")
ma nella classe pgData l'array $Items contiene:
$Items[1] = "Fields2" e questo determina che venga ritornato un valore NULL; cosicché pgDesigner2 si blocca con l'errore "null object"
Stessa cosa per l' istruzione
Codice: [Seleziona]
FOR EACH oField IN oRelation.GetValue("Field1")

alla riga 2088 della classe pgMySQL50

Dopo avere abilitato le relazioni e modificato le due righe di cui sopra devi anche modificare alla riga 2094 l'istruzione
Codice: [Seleziona]
pgHtml.HighLabel(oRelation.GetValue("Table1"), {html}) & " (" & String.Mid(f, 2) & ")" &
in
Codice: [Seleziona]
pgHtml.HighLabel(oRelation.GetValue("Table1").Name, {html}) & " (" & String.Mid(f, 2) & ")" &
per evitare l'errore
Type mismatch: wanted String, got pgData instead

Ti allego il file compresso con le modifiche apportate per le verifiche del caso.

« Ultima modifica: 15 Maggio 2011, 22:34:55 da sotema »
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #130 il: 17 Maggio 2011, 13:50:07 »
Scusa MD**** ho notato che ti sei collegato più volte in questi giorni ma non mi hai risposto al post precedente. Hai commenti e/o giudizi a riguardo?
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #131 il: 17 Maggio 2011, 14:04:12 »
Scusa, avevo fatto una passata di sfuggita, ma dato che avevo problemi sul lavoro, non ho potuto risponderti.

Riguardo alla tua segnalazione, devo controllare anche io, nel caso abbia scelto la cosa in base a qualche problema, anche se non credo.
Se è un'errore nella condizione, farò subito la modifica, altrimenti è probabile che tocca implementare le necessarie proprietà all'oggetto.

Riguardo agli altri errori, mi pare di averli corretti, ma non ho ancora messo la nuova versione nel repository...

Appena ho un attimo, faccio gli ultimi aggiustamenti e lo metto nel repo, dopodichè di avverto...

E' inutile riaffermare i miei ringraziamenti per il tuo aiuto!

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #132 il: 17 Maggio 2011, 19:32:55 »
Ho fatto i controlli da te suggeriti e, in effetti, c'erano gli errori che mi hai segnalato e che ho prontamente corretto.

Riguardo alla disabilitazione della gestione delle relazioni in MySQL, in effetti erano rimaste disabilitate e, dopo aver controllato l'esistenza di tutte le necessarie proprietà, ho provveduto a abilitarle.

L'unico mio dubbio, che tocca verificare, è se per caso nella versione 5.0 la gestione delle relazioni non sia gestta, e che quindi avevo disattivato giustamente la funzione. Questo, magari, se riesci ad appurarlo, eviterebbe di scrivere un'ulteriore driver...

Comunque, ora il repository è nuovamente aggiornato.

Ti ringrazio per l'ottimo lavoro di certosino. Questo significa che, alla fine, il mio codice in qualche modo si capisce...  ;D

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #133 il: 17 Maggio 2011, 22:28:22 »
Ricordavo che il supporto alle relazioni fosse introdotto ancor prima della 5.0. Ma dato che la memoria alla nostra età (quasi 50) comincia a vacillare, mi sono andato a leggere la Reference Guide. In effetti le relazioni sono state introdotte contemporaneamente al motore InnoDB e sono pienamente supportate dalla 5.0; esistono alcune limitazioni che inducono a modificare il codice di pgDesigner.
  • Entrambe le tabelle in relazione devono essere InnoDB e non possono essere temporanee.
  • I campi BLOB e TEXT non possono essere impiegati in una relazione
Ho dato una lettura anche alla Ref. Guide della 5.6 e non è cambiata di una virgola.

Ed ora...scusami per la dimenticanza  :hard:, ma nel post relativo alle relazioni non ti ho segnalato che la riga pgMYSQL50._sqlTable.2092 deve essere modificata da così:
Codice: [Seleziona]
s &= pgHtml.HighCommand(" CONSTRAINT FOREIGN KEY", {html}) & " (" & String.Mid(t, 2) & ")" &
a così:
Codice: [Seleziona]
s &= pgHtml.HighCommand(" CONSTRAINT FOREIGN KEY", {html}) & " " & pgHtml.HighLabel(oRelation.Name, {html}) & " (" & String.Mid(t, 2) & ")" &
perchè nel file sql generato compaia il nome della relazione.
A presto.
« Ultima modifica: 17 Maggio 2011, 23:07:39 da sotema »
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #134 il: 18 Maggio 2011, 00:27:57 »
prima che tu possa odiarmi, ti segnalo un altro problema con le relazioni in MySQL:
l'evento MYSQLEvent_Click() della classe pgPanelEditRelation alla riga 397 necessita di un ME.
Codice: [Seleziona]
WITH .MYSQLUnionList
---> errore not an object cliccando sul bottone elimina

Codice: [Seleziona]
WITH ME.MYSQLUnionList
---> OK

L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein