[botta&risposta] GMSDB - Game Maker Simple Database
- Homunculus
- Admin
- Messaggi: 6840
- Iscritto il: 25/11/2007, 20:36
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
Le vecchie FUNZIONI di php per mysql sono depre ate, devi usare quelle nuove. non mysql stesso...
- BaronVsCorsar
- GMI VIP
- Messaggi: 4699
- Iscritto il: 14/02/2004, 12:05
- Specialità: Saccenza
- Uso: GameMaker 8.1
- Località: Ferrara
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
già il fatto che sqlite NON usi un server fa capire che NON è intercambiabile con <nome_di_database_con_struttura_client_server_a_scelta_del_lettore> in quanto soluzione tecnica differente (adatta per problematiche differenti).
Indubbiamente tante pagine in php che utilizzavano mySQL (unica soluzione fino alla versione 4... o 3 non ricordo) potrebbero passare a sqlite (ora disponibile integrato nel php).
da quello che ho letto di noSQL sul link che hai postato sembra abbia anch'essi scopi differenti da mysql/sqlite (in particolare perchè non si preoccupa di essere ACID, scopo principale e primo dei database relazionali).
Indubbiamente tante pagine in php che utilizzavano mySQL (unica soluzione fino alla versione 4... o 3 non ricordo) potrebbero passare a sqlite (ora disponibile integrato nel php).
da quello che ho letto di noSQL sul link che hai postato sembra abbia anch'essi scopi differenti da mysql/sqlite (in particolare perchè non si preoccupa di essere ACID, scopo principale e primo dei database relazionali).
Schiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
- Homunculus
- Admin
- Messaggi: 6840
- Iscritto il: 25/11/2007, 20:36
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
Qualcuno potrebbe provare l'esempio su GM:Studio? Su gmc mi segnalano che non funziona
- NeatWolf
- Membro super
- Messaggi: 684
- Iscritto il: 03/08/2011, 12:09
- Specialità: Programmazione
- Località: Oristano, Sardegna, Italia
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
Volevo prendermi un po' di tempo per studiarmi meglio il topic e gli script e dare un parere più generale, visto che sicuramente è un lavoro certosino da guardare con calma, ma ho fatto comunque una piccola prova veloce.Homunculus ha scritto:Qualcuno potrebbe provare l'esempio su GM:Studio? Su gmc mi segnalano che non funziona
Effettivamente in HTML5 freeza nel momento del refresh della tabella, mentre le operazioni di sort sembrano raggruppare per campi come se fosse stata effettuata una SELECT DISTINCT <nomecampo>.
Inoltre in html5 gli id sembrano scritti in binario
Appena potrò darò un'occhiata più nel dettaglio del codice, in effetti ha un comportamento piuttosto anomalo. Nessun errore di compilazione, quindi probabilmente qualcosa è stata implementata in maniera diversa.
O magari è stata implementata male in GM:Studio, tutto può essere... il porting del codice non è mai garantito (c'è tanto di warning a scritte rosse quando lo si fa) e sicuramente non è causa della versione 8.1 attuale
- Homunculus
- Admin
- Messaggi: 6840
- Iscritto il: 25/11/2007, 20:36
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
Riesumo il topic perché ho aggiornato tutto il sistema di database, e aggiunto un sacco di funzionalità! Eccovi una lista:
- Compatibile con GM:Studio
- Migliorate le prestazioni delle query
- Rimosse diverse funzionalità inutili o obsolete causa nuove funzioni più performanti
- Manuale dettagliato allegato, e una migliore descrizione negli scripts
- È ora possibile ritornare direttamente delle colonne selezionate, e non solo gli id dei record (in pratica, ho introdotto il select)
- Non c'é più nessun limite al numero di colonne nelle tabelle
- Integrazione con CSV: si può esportare le tabelle in CSV e importare dati da file CSV
- Homunculus
- Admin
- Messaggi: 6840
- Iscritto il: 25/11/2007, 20:36
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
Riesumo nuovamente causa aggiornamento. Sono stato tartassato su GMC perché sia GEX che scripts danno errori dopo l'aggiornamento alla versione 1.2 di studio.
La nuova versione scaricabile nell'open post corregge due errori con studio 1.2:
- In studio 1.2, non é più possibile ridimensionare le ds_grids a dimensione 0 (nel mio caso si verifica quando non ci sono records). Questo é un cosiddetto "pain in the ass" in un sistema come il mio, per ora ho risolto ricreando la grid (si, ricrearla a dimensione 0 funziona... yoyogames rules).
- Dalla 1.2 non é più possibile utilizzare argumenti scripts misti in caso di scripts con argomenti variabili (o si usa argumentN, o argument[N], entrambi causa un errore). Corretti gli scripts di conseguenza.
- Il sorting dei risultati utilizza ora la nuova funzione ds_grid_sort, questo rende il sorting (in precedenza tutto programmato in GML e quindi estremamente lento) estremamente più performante.
La nuova versione scaricabile nell'open post corregge due errori con studio 1.2:
- In studio 1.2, non é più possibile ridimensionare le ds_grids a dimensione 0 (nel mio caso si verifica quando non ci sono records). Questo é un cosiddetto "pain in the ass" in un sistema come il mio, per ora ho risolto ricreando la grid (si, ricrearla a dimensione 0 funziona... yoyogames rules).
- Dalla 1.2 non é più possibile utilizzare argumenti scripts misti in caso di scripts con argomenti variabili (o si usa argumentN, o argument[N], entrambi causa un errore). Corretti gli scripts di conseguenza.
- Il sorting dei risultati utilizza ora la nuova funzione ds_grid_sort, questo rende il sorting (in precedenza tutto programmato in GML e quindi estremamente lento) estremamente più performante.
- Sla
- GMI VIP
- Messaggi: 3618
- Iscritto il: 21/07/2008, 10:11
- Specialità: Titanismo
- Località: (gm) Italia
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
Per il parsing... sicuro di non riuscire semplicemente a lavorare di stringhe per convertire una query sql in codice gml da lanciare con una execute_string al volo?
eppure mi sembra tutto giusto...
Re: [botta&risposta] GMSDB - Game Maker Simple Database
execute_string è deprecato da quando è uscito gmstudioSla ha scritto:Per il parsing... sicuro di non riuscire semplicemente a lavorare di stringhe per convertire una query sql in codice gml da lanciare con una execute_string al volo?
- Sla
- GMI VIP
- Messaggi: 3618
- Iscritto il: 21/07/2008, 10:11
- Specialità: Titanismo
- Località: (gm) Italia
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
Vero,vero, presto sarà compilato. Dovrei aggiornarmi un po'.
eppure mi sembra tutto giusto...
- Homunculus
- Admin
- Messaggi: 6840
- Iscritto il: 25/11/2007, 20:36
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
Già ora c'è il compiler, ma se lo vuoi devi sborsare 300$.
- Homunculus
- Admin
- Messaggi: 6840
- Iscritto il: 25/11/2007, 20:36
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
Non so quanti stanno usando questa estensione, ma io sto continuando a svilupparla e sono arrivato a un punto morto (causa indecisione), quindi mi affido a voi per venirne fuori.
Il problema é questo: mi hanno chiesto su GMC di aggiungere operazioni sui records come la somma, min, max, ecc... oltre alla possibilità di inserire condizioni un po' più complesse che considerino più di una colonna. È tutto fattibile, ma questo va a peggiorare un problema che già mi da fastidio, ovvero la quantità spropositata di argomenti della funzione db_record_find_values(), che permette di restituire i risultati dal database.
La mia soluzione, ed é su questa che ho qualche dubbio é la seguente: spezzettare la query in più funzioni. Vi propongo un esempio prima / dopo che é sicuramente più semplice da capire rispetto ad una lunga spiegazione:
Prima:
Dopo:
Sono ovviamente più righe di codice, ma mi pare un sistema molto più pulito. Notare che non c'é bisogno di indicare i valori di ritorno "id,name,weight,color" come nella precedente funzione in quanto se non é specificato, ritorna tutto in automatico.
Si può comunque col secondo metodo fare query in una singola riga nei casi più semplici:
A me la soluzione spezzettata sembra molto più interessante e pulita, soprattutto se si considera che la versione "prima" richiederebbe ancora più parametri in seguito all'estensione delle funzionalità.
Non so però, voi che ne pensate?
Il problema é questo: mi hanno chiesto su GMC di aggiungere operazioni sui records come la somma, min, max, ecc... oltre alla possibilità di inserire condizioni un po' più complesse che considerino più di una colonna. È tutto fattibile, ma questo va a peggiorare un problema che già mi da fastidio, ovvero la quantità spropositata di argomenti della funzione db_record_find_values(), che permette di restituire i risultati dal database.
La mia soluzione, ed é su questa che ho qualche dubbio é la seguente: spezzettare la query in più funzioni. Vi propongo un esempio prima / dopo che é sicuramente più semplice da capire rispetto ad una lunga spiegazione:
Prima:
Codice: Seleziona tutto
results = db_record_find_values("fruits","id,name,weight,color",db_op_gte,"weight|100","weight DESC",-1,0);
Codice: Seleziona tutto
q = db_query("fruits");
db_qy_conditions(q,db_op_gte,"weight",100);
db_qy_sort(q,"weight",1);
results = db_query_exec(q);
Si può comunque col secondo metodo fare query in una singola riga nei casi più semplici:
Codice: Seleziona tutto
results = db_query_exec(db_qy_sum(db_query("fruits"),"weight"));
Non so però, voi che ne pensate?
- BaronVsCorsar
- GMI VIP
- Messaggi: 4699
- Iscritto il: 14/02/2004, 12:05
- Specialità: Saccenza
- Uso: GameMaker 8.1
- Località: Ferrara
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
entrambe!
vedi
draw_text
draw_text_ext
draw_text_color
draw_text_ext_color_lupmannar
Non è la stessa situazione (non ti limiti ad aggiungere parametri), ma ti consiglio un metodo
"tutto nei parametri" ed un metodo "più funzioni".
Ogni programmatore utilizzerà il preferito, o a seconda dei casi quello più conveniente.
(e puoi sempre fare in modo che uno si richiami all'altro, se vuoi avere un unico set di script da aggiornare).
vedi
draw_text
draw_text_ext
draw_text_color
draw_text_ext_color_lupmannar
Non è la stessa situazione (non ti limiti ad aggiungere parametri), ma ti consiglio un metodo
"tutto nei parametri" ed un metodo "più funzioni".
Ogni programmatore utilizzerà il preferito, o a seconda dei casi quello più conveniente.
(e puoi sempre fare in modo che uno si richiami all'altro, se vuoi avere un unico set di script da aggiornare).
Schiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
- Homunculus
- Admin
- Messaggi: 6840
- Iscritto il: 25/11/2007, 20:36
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
Non so Baron, il tuo esempio col draw mi pare un po' forzato per quello che sto facendo io sinceramente. Comunque é vero, posso sempre creare una cosa tipo db_query_now() che prende un numero spropositato di parametri e via, ma questo non coprirebbe comunque tutti i casi possibili (select, max, min, sum ecc.. sono mutually exclusive) e col draw funziona perché ci sono poche varianti, qui non posso fare db_query_select, db_query_select_conditions, db_query_select_conditions_sort_limit ...
- BaronVsCorsar
- GMI VIP
- Messaggi: 4699
- Iscritto il: 14/02/2004, 12:05
- Specialità: Saccenza
- Uso: GameMaker 8.1
- Località: Ferrara
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
fai un parametro testuale
"max, blabla, sort, blabla2"
che processi dentro lo script, e poi ti richiami gli script semplici.
se trovi una buona logica sul parametro-stringa, tu ti sbatti a fare il parsing, ma l'utente è avvantaggiato (se viene fuori una cosa mnemonica ovviamente).
my 2 cents: uno script del genere deve andare incontro al più vasto numero di utenti. Vale la pena sbattersi nel parsing per prendere i puristi dell' "unica funzione".
"max, blabla, sort, blabla2"
che processi dentro lo script, e poi ti richiami gli script semplici.
se trovi una buona logica sul parametro-stringa, tu ti sbatti a fare il parsing, ma l'utente è avvantaggiato (se viene fuori una cosa mnemonica ovviamente).
my 2 cents: uno script del genere deve andare incontro al più vasto numero di utenti. Vale la pena sbattersi nel parsing per prendere i puristi dell' "unica funzione".
Schiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
Anche i draw di game maker teoricamente dovrebbero avere svariate decine di combinazioni. Il trucco sta nel farne una manciata in base agli argomenti più usati ed usare nomi come _ext, _general ecc per evitare di allungare eccessivamente il nome della funzione. Se uno ha necessariamente bisogno di una completa flessibilità usa la più adatta o generalizzata e fine. Mi è capitato molto spesso di non avere funzioni draw adatte allo scopo e quindi usare la _ext o altre aggiungendo argomenti fissi inutilmente ma game maker è fatto così e per chi lo usa è sicuramente meglio usare le varie librerie come ha sempre usato tutto il resto.
Da parte tua ovviamente il lavoro sarà minimo, basta richiamare la funzione più generale aggiungendo dei parametri di default.
Da parte tua ovviamente il lavoro sarà minimo, basta richiamare la funzione più generale aggiungendo dei parametri di default.
Non conoscendo i database non ho capito molto bene di cosa stai parlando ma tirando ad indovinare... non ti basta usare delle costanti come argomenti delle funzioni? Esattamente come le primitives hanno i loro tipi di primitiva (pr_linelist, pr_trianglestrip, ecc) farai la stessa cosa con le tue funzioni che so he_select, he_max, he_min ( he = "homunculus's enumeration" la prima roba che mi è venuta in mente )Homunculus ha scritto:ma questo non coprirebbe comunque tutti i casi possibili (select, max, min, sum ecc.. sono mutually exclusive)
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
- Homunculus
- Admin
- Messaggi: 6840
- Iscritto il: 25/11/2007, 20:36
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
Jak purtroppo in questo caso non si può dire "questo parametro é più usato/importante" di quell'altro, tutto varia a seconda delle necessità. Però qualche spunto importante me lo avete dato, al momento propendo per sviluppare un approccio come indicato nell'esempio "dopo", con però alcune funzioni di comodo che raggruppano più parametri (ma che dietro le quinte costruiscono la query con l'approccio descritto prima).
Devo rimuginarci un po' sopra, ma se non altro mi pare di capire che non posso rinunciare alla singola mega funzione.
Devo rimuginarci un po' sopra, ma se non altro mi pare di capire che non posso rinunciare alla singola mega funzione.
- Homunculus
- Admin
- Messaggi: 6840
- Iscritto il: 25/11/2007, 20:36
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
Dopo secoli ho finalmente terminato la nuova versione della GEX (download nell'open post). Vista l'entità dei cambiamenti, e visto che il versioning fa figo, si passa dalla versione 1.2.1 alla 2.0.
Le principali modifiche e novità:
Piccola nota: nonostante i post precedenti ho deciso di non includere funzionalità di calcolo. Mi sono reso conto che non avrebbe senso vosto che ritorno i risultati delle query sotto forma di ds_grid, se si ha quindi bisogno di una somma o altro dei risultati è sicueramente più semplice usare le funzioni delle ds_grid direttamente
Le principali modifiche e novità:
- Il sistema di query é stato completamente riscritto. Abbiamo ora un'entità query vera e propria (un po' come una data structure) per gestire tutte le operazioni sui records e non più semplicemente una chiamata ad una funzione mastodontica. Le query possono ora essere create, distrutte, salvate, modificate ed eseguite più e più volte, applicando filtri, condizioni e altro singolarmente in base alle necessità.
- Non é più necessario indicare esplicitamente tutte le colonne che vanno ritornate dalla query SELECT in caso si voglia estrapolare l'intero set di colonne, basta lasciare il campo vuoto (insomma, come fare SELECT * in mysql)
- Le funzioni di update e delete ora funzionano col sistema di query. Questo significa che non é più necessario indicare ogni volta l'id o gli id da cancellare/modificare, si crea una query di update/delete e si applicano dei filtri e dei limiti ai record che devono essere considerati (in sostanza, si può modificare/cancellare in massa in base a dei filtri)
- I filtri ora permettono di indicare più di una colonna a cui applicare le condizioni. Si può quindi confrontare anche più colonne tra di loro per filtrare i risultati.
- Inserita la funzionalità JOIN. Si tratta di una funzione sicuramente nota a chi usa SQL, che permette di "unire" i risultati di più tabelle in modo logico. Si tratta ovviamente di un join di base, non é minimamente paragonabile al suo analogo SQL, ma fa il suo lavoro.
Codice: Seleziona tutto
//esempio SELECT
var query = db_query_select("oggetti","id,nome,tipo,peso,colore"); //Crea una query sul database oggetti per estrapolare id,nome, tipo, peso e colore
db_cl_where(query,db_op_eq,"tipo,colore","spada,argento"); //Applica un filtro alla query che seleziona solo le spade di colore argento
db_cl_sort(query,"peso","DESC"); //Indica che la query deve ritornare i risultati ordinati per peso, decrescente.
db_cl_limit(query,3,0); //Limita i risultati ai primi 3 (le tre spade d'argento più pesanti quindi)
spade_pesanti = db_query_exec(query,true); //Esegue la query e restituisce il risultato. Il secondo argomento indica che la query non va distrutta (la riutilizziamo sotto)
db_cl_sort(query,"peso","ASC"); //Applica (e sovrascrive) l'ordinamento della precedente query, indicando di ordinare ora in modo crescente, sempre per peso.
spade_leggere = db_query_exec(query); //Esegue di nuovo la query (con il nuovo ordinamento), e ritorna quindi le 3 spade d'argento più leggere
Codice: Seleziona tutto
//esempio DELETE
var query = db_query_delete("oggetti"); //Creiamo una query di cancellazione
db_cl_only(query,"1,14,49"); //Indichiamo che vogliamo cancellare solo gli oggetti con id 1,14 e 49
db_cl_sort(query,"peso","DESC"); //Ordiniamo per la cancellazione i risultati per peso (utile solo se usato con una funzione di limit, come segue)
db_cl_limit(query,1,0); //Limita la cancellazione solo al primo record.
numero_oggetti_cancellati = db_query_exec(query); //Esegue la query. Riassumento questa query cancella il singolo oggetto più pesante presente nel database, tra i tre oggetti aventi id 1, 14 e 49.
Re: [botta&risposta] GMSDB - Game Maker Simple Database
ah, tanto ti toccherà ri-scriverla di nuovo quando uscirà la 1.3 coi ds accessors (che ti risparmieranno non poche chiamate a funzione)
Comunque ottimo, diventa sempre più appetibile
Comunque ottimo, diventa sempre più appetibile
- Homunculus
- Admin
- Messaggi: 6840
- Iscritto il: 25/11/2007, 20:36
- Contatta:
Re: [botta&risposta] GMSDB - Game Maker Simple Database
Ci ho pensato, ma non é che le vecchie chiamate diventano obsolete... Posso modificare gli accessors man mano che aggiorno la gex nel tempoTizzio ha scritto:ah, tanto ti toccherà ri-scriverla di nuovo quando uscirà la 1.3 coi ds accessors (che ti risparmieranno non poche chiamate a funzione)
Comunque ottimo, diventa sempre più appetibile
Re: [botta&risposta] GMSDB - Game Maker Simple Database
Esatto, intendevo che "devi" perché è più veloceHomunculus ha scritto:Ci ho pensato, ma non é che le vecchie chiamate diventano obsolete... Posso modificare gli accessors man mano che aggiorno la gex nel tempoTizzio ha scritto:ah, tanto ti toccherà ri-scriverla di nuovo quando uscirà la 1.3 coi ds accessors (che ti risparmieranno non poche chiamate a funzione)
Comunque ottimo, diventa sempre più appetibile
Chi c’è in linea
Visitano il forum: Nessuno e 26 ospiti