Autore Topic: [RISOLTO] Host database  (Letto 3028 volte)

Offline Ferdinando88

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
[RISOLTO] Host database
« il: 05 Maggio 2012, 12:17:32 »
Salve, ho creato un applicazione che legge un database sql
ora vorrei che in un ipotetica lan tra 3 pc un pc funga da server con il database piazzato in user.home, mentre gli altri pc possano andare a leggere ed a scrivere nel database connettendosi al primo pc.

Qual'è la sintassi corretta per compiere questa operazione ?
« Ultima modifica: 01 Giugno 2012, 11:45:21 da Ferdinando88 »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Host database
« Risposta #1 il: 05 Maggio 2012, 13:37:23 »
Dipende dal tipo di database...

Nei parametri di connessione, visto che hai già creato l'applicazione, avrai sicuramente inserito "localhost" come host. Nel caso di accesso da parte delle altre due macchine, devi inserire l'indirizzo o in nome del pc su cui risiede il db, ivi compresa porta e utenza.
Ricorda di abilitare le necessarie porte (nel caso sia un db MySQL o PostgreSQL) sulla macchina che contiene il db, in modo che possa essere raggiungibile dall'esterno.

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Host database
« Risposta #2 il: 05 Maggio 2012, 17:43:37 »
Come ti ha già detto Md devi usare mysql o pstgresql, sqlite non va bene per quello che vuoi fare.
Nell'area Download, sezione guide e tutorial, c'è una guida, "guida rete mysql", che fa giusto al caso tuo.
Però fsurfing mi aveva fatto notare uno sbaglio nella guida che poi non mi sono più ricordato a rimandarla a Ceskho.
Quindi colgo l'occasione per chiedere al nostro buon Ceskho di sostituire la guida con questa.

« Ultima modifica: 05 Maggio 2012, 17:50:51 da Golia »

Offline Ferdinando88

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
Re: Host database
« Risposta #3 il: 05 Maggio 2012, 19:24:24 »
Ho gia impostato tutto il programma con sql....ed ho scritto nel codice che il daabase si trova in user.home sul mio pc...non c e modo di dire al programma di andare a cercare il file.database su un indirizzo in rete ?

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Host database
« Risposta #4 il: 05 Maggio 2012, 21:38:35 »
no, sqlite non lo gestisce.
Prova con mysql, è praticamente la stessa cosa

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Host database
« Risposta #5 il: 06 Maggio 2012, 12:58:32 »
Non sò se funziona, ma potresti mettere il db sqlite in condivisione, nel senso che lo metti in una cartella e la condividi in R/W con samba.
Poi puoi fare due cose:
1) montare manualmente la condivisione in una path specifica su i due pc
2) inserire il mount in fstab, in modo che venga montato automaticamente all'avvio

Ripeto: non sò se poi ci sono problemi con sqlite...

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Host database
« Risposta #6 il: 06 Maggio 2012, 13:42:01 »
E' vero che quando monti una cartella o file con fstab è come se ce l'avessi nel proprio disco, ma credo che sqlite non ti permetta di essere aperto da 2 utenti, e in ogni caso avresti problemi quando salvi dati, un utente annullerebbe le modifiche dell'altro.
Concordo che è da provare, ma non vedo perchè non usare database robusti come mysql o ancora meglio postgresql, una volta installati funzionano come sqlite, qualche piccola differenza in qualche funzione sql (sopratutto postgresql), ma niente di impossibile

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Host database
« Risposta #7 il: 07 Maggio 2012, 00:08:07 »
Sono pienamente in accordo con te, tanto è vero che l'ho ribadito più volte in varie discussioni.

Dato che parto dal presupposto che ognuno deve fare le sue scelte, in base anche all'esperienza fatta in prima persona, il mio suggerimento era appunto quello di far provare al nostro amico una strada che sicuramente non porterà ad una conclusione funzionante, ma il fatto che ci abbia provato credo possa aumentare la sua esperienza.

Riguardo alle differenze tra un motore, come può essere sqlite, e uno di livello più alto è evidente, e basta dare un'occhiata alla documentazione e alla sua diffusione.
Ribadisco ancora una volta che sqlite è un motore, sicuramente molto facile e semplice da mettere in piedi, ma ha appunto i suoi limiti, ed è dedicato a quelle situazioni in cui non è necessario implementare db elaborati, e che in qualche modo possano invero complicare l'utilizzo di un'applicazione.

In questo caso, data la sopravvenuta esigenza di un accesso multiutenza e in rete, è obbligatorio pensare ad altre alternative, e tra quelle a disposizione in ambiente open-source, sicuramente il dito lo punterei su MySQL e PostgreSQL. Sempre in questo caso, datosi che l'esperienza è ancora agli inizi, e l'esigenza è alquanto e relativamente semplice, direi che l'opzione pià consona sia quella di MySQL. Questo motore è fornito in tutte le distro per default, è relativamente semplice da tirar su, e ha molti strumenti per la sua gestione, e mette poco in difficoltà applicazioni con poche esigenze. Di contro ha tutti i requisiti necessari per lo scopo di questa discussione.

Offline Ferdinando88

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
Re: Host database
« Risposta #8 il: 31 Maggio 2012, 12:37:29 »
Ciao a tutti, seguendo i vostri consigli ho riproggettato il database usando mysql e devo dire che ho notato delle differenze enormi nelle potenzialità.
Tuttavia mi trovo di fronte ad un problema, quando cerco di eliminare un dato dal database mi cancella soltanto i dati ma mi lascia il record nella tabella.

ESEMPIO ipotetico database

NOME        COGNOME       ID
Marco        Rossi             1
Giovanni    Rossi             2

Se provo a cancellare Marco

NOME        COGNOME       ID

Giovanni    Rossi             2

Se provo ad aggiungere un nuovo utente a questo punto assegnera ID 3 mentre io voglio che assegni 2

NOME        COGNOME       ID

Giovanni    Rossi             2
Francesco   Rossi             3 ( Errore )

E' Risolvibile la faccenda ?
Grazie mille

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Host database
« Risposta #9 il: 31 Maggio 2012, 13:38:31 »
Dipende di che tipo è il campo ID.

Se hai usato un serial, questo non puoi modificarlo indicandolo esplicitamente nella query.
I tipi di campo autoincrementali si appoggiano su un'apposito contatore (te la dico semplice), che viene incrementato automaticamente ogni qualvolta viene interrogato. Se tu cancelli un record, il cui campo seriale è stato popolato dal contatore, questo non implica che lo stesso contatore venga resettato.
La cosa è spiegabile anche solo con un esempio: ovvero tu pensa a una tabella delle fatture, il cui numero è sequenziale, a meno che la fattura cancellata (il che non sarebbe molto legale) non sia l'ultimissima, avresti un buco nella sequenza (e poi chi lo dice all'agenzia delle entrate???). Un'altro esempio è anche quello che riguarda la multiutenza: tieni conto che stai usando mysql, che è rdbms multiutente, e tieni quindi presente che la stessa tabella potrebbe essere acceduta da più di un'utente, e ognuno esegue degli inserimenti, con conseguente incremento del numero sequenziale; in questo caso non sarebbe assolutamente possibile riorganizzare la numerazione, in quanto potresti avere valori inferiori e/o superiori occupati, e di conseguenza la stravolgerebbe i riferimenti in tabella.
E' ovvio che la cosa potrebbe essere fatta con un campo di tipo semplice, numerico, a cui sei tu che assegni il progressivo, ma dovresti tenere conto comunque dei punti che ho segnalato prima, e quindi creare una logica alquanto complessa per gestirli.

Offline Ferdinando88

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
Re: Host database
« Risposta #10 il: 31 Maggio 2012, 17:46:05 »
In verità il mio obiettivo è questo:

1 textbox
1 bottone

premendo il bottone il database deve fare MOVE verso l'ID che voglio ( quello scritto nella textbox).
Per esempio nella textbox scrivo 25 e lui va a leggere la riga dell'ID 25....solo che invece di fare così lui mi va  aprendere la riga 25, che magari non esiste neanche

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Host database
« Risposta #11 il: 31 Maggio 2012, 18:08:13 »
Bè certo, perchè dipende pure da come prelevi i dati dal database, magari non sono sortati, oppure sono disposti in maniera diversa...

L'indice della griglia è indipendente dal suo contenuto.
Le possibilità sono svariate:

1) crei una query ordinata per id, ma questo potrebbe crearti problemi nel caso ci siano buchi in mezzo
2) esegui una find nella colonna per trovare l'id desiderato e poi sposti il puntatore della griglia

Altre possibilità ci sono, ma potrebbero risultarti più complicate da implementare, almeno a mio avviso...  :-\

Offline Ferdinando88

  • Gamberetto
  • *
  • Post: 44
    • Mostra profilo
Re: Host database
« Risposta #12 il: 31 Maggio 2012, 18:28:30 »
Dunque il database è una semplice rubrica clienti, che ha una gridwiew 3 pulsanti ( nuovo, salva, elimina ) il database ha tutti i campi settati in varchar e default null tranne uno che si chiama idclienti che è autoincrement
Nella griglia i dati vengono ordinati in ordine di immissione...e poi c'è un tasto che permetti di aprire i dati contenuti in una riga conoscendo l'ID del cliente....che però purtroppo non funziona perchè va alla riga invece che all'id....

come faccio a fare il FIND ?

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Host database
« Risposta #13 il: 01 Giugno 2012, 00:08:18 »
non si capisce se tu vuoi che il programam vada all' id della gridview oppure all' interno del database,

nel primo caso dovrai per forza scorrere tutte le righe leggendo il valore id e selezionando quella corretta, nel secondo caso invece usi una query sql del tipo

SELECT * FROM nometabella WHERE id=25

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Host database
« Risposta #14 il: 01 Giugno 2012, 10:04:41 »
Dai un'occhiata ai metodi di GridView e troverai qualcosa che ti permetta di fare una ricerca sulle celle.

L'altra alternativa, come suggerito velatamente (  ;D ) da fsurfing, è quella di effettuare la ricerca direttamente sul db tramite una query mirata.
E' sottinteso che se i dati vengono variati, la GridView deve per forza essere aggiornata per riflettere lo stato corrente del db...