Autore Topic: Riaggiornare una grglia  (Letto 6185 volte)

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Riaggiornare una grglia
« Risposta #45 il: 11 Maggio 2012, 23:33:57 »
Ciao
La funzione che ti ho passato è proprio per importare un file di testo (in questo caso file csv) in un database.
Inserisci la funzione nell'esempio rubrica che ti ho postato qualche giorno fà, crea un nuovo pulsante, e mettici dentro questo:
Codice: gambas [Seleziona]

Public Sub Bottone_Click()
 Importcsv()
riempigrid()
End

importcsv serve a importare i dati, riempigrid è per aggiornare la griglia.
Naturalmete prima di fare ciò devi avere un file di testo che interessi alla funzione, se la guardi vedrai che va a leggere 5 elementi di ogni riga, e va a scriverlo in 5 campi di un database, nel nostro caso : Cognome, Nome, indirizzo, città, e provincia.

quindi crea un nuovo file e scrivi così dentro:

Citazione
Rossi,Mario,Via gino,milano,padova
Bianchi,gino,via dopo,largo,roma

salva con nome prova.csv e puoi provare
i campi nel file di teto sono separati dalla virgola e nella funzione vedi che "separatore" è dichiarato virgola ----> Dim separatore As String = ","
Quindi basta che ti adatti la funzione in base al file che devi importare.
Spero di essere stato chiaro
Ciao

Offline fernando

  • Gambero
  • **
  • Post: 63
    • Mostra profilo
Re: Riaggiornare una grglia
« Risposta #46 il: 12 Maggio 2012, 11:53:06 »
 Ciao
Sei stato abbastanza chiaro...
Ho seguito passo passo la tua guida, l'unico errore che mi porta nella funzione è:
Unknown identifier: ModConn  alla riga di codice ModConn.$conn.Exec(sql), quindi ho sostituito 'ModConn' con
'Modmain' è l'errore non si presenta più, oppure dichiarando ModConn as string e non viene fuori nessun errore.
Ho inserito un button, con il codice che mi hai mandato, ho creato un file .csv mettendolo nella home, scrivendo prima qualche record, ma nella griglia non importa nessun record.Premesso che ho usato il primissimo esempio che mi hai mandato 'rubrica', dove ci sono i campi cognome, nome, indirizzo,città, provincia  e telefono; dato che c'è un campo in più (telefono) nella funzione l'ho aggiunto, ma non cambia niente.Detto questo può darsi che sia il file .csv che ho creato, che non soddisfa certe caratteristiche che richiede la funzione. TI chiedo gentilmente, puoi creare tu un file .csv e mandarlo in allegato, con pochi record, per confrontarlo con il mio. Ultima cosa, risolto questo, avendo i record importati nella grglia, posso usare una normale query sql per ricerca dati ect... e invece per aggiornare il database .csv, cosa bisogna fare ? sempre usando le textbox del tuo esempio rubrica. Scusa se ho scritto troppo... e grazie anticipatamente
Cordiali saluti, buona domenica
« Ultima modifica: 12 Maggio 2012, 12:53:03 da fernando »

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Riaggiornare una grglia
« Risposta #47 il: 12 Maggio 2012, 17:41:09 »
Ok, vedo di semplificarti
ti ho fatto una funzione apposta, adesso è facilissimo.
La funzione è dentro il modulo utility e va usata così:
Citazione
Utility.ImportCsv(",", MODMain.$conn, "rubrica", ["cognome", "nome", "indirizzo", "citta", "provincia"])
Praticamente prima ti chiede il separatore che in questo caso è la virgola, poi la connessione al database ( ModMain è il modulo che connette il database, se non andava Modconn è perchè ho sbagliato a scrivere, ma dovevi capire lo stesso, e non va assolutamente dichiarato come stringa) poi ti chiede la tabella del database che ospiterà i dati, e poi in ordine i campi che dovranno essere dello stesso numero dei campi che ci sono in ogni riga del file di testo.
In allegato comunque c'è l'esempio funzionante e anche il file di testo.
Se dovrai aggiornare il database perchè il file di testo sarà cambiato, basta semplicemente che cancelli l'intero database e lo ricarichi di nuovo (non mi chiedere come si fà :) altrimenti non impari niente :P)

Offline fernando

  • Gambero
  • **
  • Post: 63
    • Mostra profilo
Re: Riaggiornare una grglia
« Risposta #48 il: 12 Maggio 2012, 19:29:40 »

 Ciao Golia
Ho scaricato poco fa il tuo esempio, adesso non avendo tanto tempo da dedicare, stasera lo guarderò con calma, ma cmq non ho resistito alla tentazione di provarlo nel generale, con grande soddisfazione funziona e sviluppa quello che chiedevo nelle mie ultime email.... senza fare le solite sviolinate ti dico Golia sei grandeeee   :) Guarda che più in là appena avrò chiaro stampa, importas file, e funzioni varie  ect... ti chiederò qualche altro aiuto. Ti ringrazio immensamente.
Cordiali Saluti e Buona Domenica

Offline fernando

  • Gambero
  • **
  • Post: 63
    • Mostra profilo
Re: Riaggiornare una grglia
« Risposta #49 il: 14 Maggio 2012, 12:44:57 »
Ciao golia
Rieccomi.... volevo chiederti: per creare un database nuovo si fa la procedura :
Dim sName As String
Dim sPercorso As String
Dim $hConn As New Connection
Dim sql As String
Dim htable As Result
Dim hres As Result

   sName = "NIOMEDATABASE"
   sPercorso = User.Home 
With $hConn
    .Type = "sqlite3"
    .Host = sPercorso
    '''.Login = ""   
   ' .Password = ""
  End With

$hConn.Open

    If Not $hConn.Databases.Exist(sName) Then
        $hConn.Databases.Add(sName)           
        $hConn.Close           'chiude il db
       
        $hConn.Name = sName
        $hConn.Open()     
         sql = "CREATE TABLE 'NOMETABELLA etc etc etc....
        hTable = $hConn.EXEC(sql)
$hConn.Commit

Fin qua ci siamo...
ma se io volessi creare un database nuovo dallo stesso progetto ad esempio rubrica per  il 2012, inserendo dati... poi rubrica per il 2013, ect  e avere sempre dallo stesso progetto la possibilità di aprire queste rubriche ( database) cosa bisognerebbe aggiungere al codice già esistente ?
Per spiegarmi meglio, pensa ad un gestione c/c bancario, con le solite voci data, operazione, dare, avere e saldo 2012, poi  per il 2013 e così via. Trovandomi nel 2012, voglio ad esempio guardare la situazione del 2011, con Apri file e visualizzare questo anno, e chiaramente con un comando che mi porti sempre all'anno attuale che può essere 2012 per adesso , 2013  in futuro. Spero che nell'esporre il quesito sono stato chiaro.
Prendo sempre come riferimeno il tuo esempio rubrica, dato che è un tuo progetto :-).
Ti chiedo anche gentilmente chi è l'auore del progetto 'sviluppo codice fiscale' sul forum perchè sinceramente non l'ho capito....
Cordiali saluti, grazie
 


Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Riaggiornare una grglia
« Risposta #50 il: 14 Maggio 2012, 21:35:37 »
io non farei altre tabelle, ci aggiungerei solo il campo data in  modo da poter filtrare/lavorare con una determinata data/anno

Offline fernando

  • Gambero
  • **
  • Post: 63
    • Mostra profilo
Re: Riaggiornare una grglia
« Risposta #51 il: 15 Maggio 2012, 11:11:26 »
Ciao
D'accordo.... avevo già pensato a quanto hai suggerito,filtrando data/anno è come se avessi tante tabelle, e potrei anche stabilire i vari saldi, statistiche ect, con una funzione count, sum etc.. con stringa  sql. Ma creando un database per ogni anno (scusa se insisto) credo che il lavoro venga più ordinato, in vb avevo fatto qualcosa del genere, ma poi ho abbandonato tutto perchè stavo per passare in un 'mondo' competamente diverso... linux.
Ho tentato anche,  di copiare il codice visual basic in gambas , ma ho rinunciato perchè gli errori erano proprio tanti, essendo due sistemi di programmazione completamente diversi.
Se non ti crea problemi,e quando hai tempo disponibile, potresti aggiungere qualche riga di codice  a quello che ti ho mandato nella precedente email, o prendendo sempre come esempio la tua rubrica ? Desidererei sapere , anche chi è l'autore del progetto 'sviluppo codice fiscale, per chiedere alcuni chiarimenti. Grazie  e spero di non annoiarti con queste mie richieste.
Grazie, Cordiali Saluti.

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Riaggiornare una grglia
« Risposta #52 il: 15 Maggio 2012, 11:56:03 »
Ciao, l'autore mi sembra di ricordare sia Perseo
per quanto riguarda fare più tabelle basta che ricopi il codice per creare più tabelle

Citazione
Dim htable As Result
      sql = "CREATE TABLE 'rubrica2012' ("
      sql &= " 'idrubrica' INTEGER PRIMARY KEY,"
      sql &= " 'cognome' varchar(20) DEFAULT NULL,"
      sql &= " 'nome' varchar(20) DEFAULT NULL,"
      sql &= " 'indirizzo' varchar(30) DEFAULT NULL,"
      sql &= " 'citta' varchar(30) DEFAULT NULL,"
      sql &= " 'provincia' varchar(20) DEFAULT NULL,"
      sql &= " 'telefono' varchar(10) DEFAULT NULL);"
     
 hTable = $conn.EXEC(sql)

      sql = "CREATE TABLE 'rubrica2013' ("
      sql &= " 'idrubrica' INTEGER PRIMARY KEY,"
      sql &= " 'cognome' varchar(20) DEFAULT NULL,"
      sql &= " 'nome' varchar(20) DEFAULT NULL,"
      sql &= " 'indirizzo' varchar(30) DEFAULT NULL,"
      sql &= " 'citta' varchar(30) DEFAULT NULL,"
      sql &= " 'provincia' varchar(20) DEFAULT NULL,"
      sql &= " 'telefono' varchar(10) DEFAULT NULL);"
     
 hTable = $conn.EXEC(sql)


Offline fernando

  • Gambero
  • **
  • Post: 63
    • Mostra profilo
Re: Riaggiornare una grglia
« Risposta #53 il: 15 Maggio 2012, 15:40:10 »

Ciao
Come al solito sono io a non spiegarmi bene:
Spero di riuscirci stavolta, altrimenti lasciamo perdere tutto, perchè forse sto un pò scocciando. Spero di no.
Allora:
Consideriamo di avere progetto chiamato  rubrica dove si fanno tutte le operazioni, aggiornamento, modica, elimina etc...ricerche varie.
Nello stesso progetto mettiamo un button, che chiameremo 'NUOVA RUBRICA' dove cliccando sia apre una finestra
che ti ta la possibilita di creare un NUOVO DATABASE che chiameremo rubrica2013 (tanto per dare un nome), quindi si va a creare un nuovo database (rubrica2013) con le stesse caratteristiche dell rubrica principale, con la stessa tabella o tabelle ma VUOTE, con gli stessi comandi (aggiorna, modifica, elimina etc.)dando la possibilità di aggiornare, modificare etc..

Metteremo un altro button, che chiameremo 'apri rubrica' dove cliccando si apre una finestra di dialogo che da la possibilità di aprire (importare) un database già esistente (sqlite), che può essere ad esempio rubrica2010,
infine un terzo button, se ad esempio si è in rubrica 2010, aprire l'anno attuale , rubrica2012.
C'è lo messa tutta per spiegare ed essere chiaro nell'esprimere il concetto, Se mi dai il permesso, ti mando (anche se in questo momento non so come si fa) un piccolo allegato di esempio ma fatto in vb, che ho trovato,adattandolo alle mi esigenze, così può darsi che il concetto diventi più chiaro.
Cordiali saluti



Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Riaggiornare una grglia
« Risposta #54 il: 15 Maggio 2012, 16:04:12 »
Nell'esempio rubrica che ho fatto c'è la funzione che crea il database e le tabelle, il nome del database può essere cambiato e ricevere il nome da una textbox o qualsiasi altro oggetto, quindi gli strumenti per fare quello che vuoi realizzare ci sono tutti o quasi. Comincia a scrivere il tuo progetto, quando avrai già fatto qualcosa sarò contento di aiutarti

Offline fernando

  • Gambero
  • **
  • Post: 63
    • Mostra profilo
Re: Riaggiornare una grglia
« Risposta #55 il: 15 Maggio 2012, 16:23:57 »
Ciao
Quale esempio rubrica, in particolare ti riferisci?, ne hai mandati tanti.... forse l'ultimo con la funzione per importare file csv ?,  creare un  databasenuovo se non esiste si, ma ricevere il nome da una textbox o qualsiasi altro oggetto non lo vedo... sicuramente sarà come dici tu.
Cordiali saluti

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Riaggiornare una grglia
« Risposta #56 il: 15 Maggio 2012, 17:09:21 »
Scusami ma se mi rispondi così vuol dire che il mio codice lo hai solo provato e non studiato.
La funzione per creare il database è presente fin dal primo esempio
Citazione
Quale esempio rubrica, in particolare ti riferisci?, ne hai mandati tanti....
Hai letto il codice di questi file che ti ho mandato?

Per cambiare il nome del database..
nella funzione è così:
Public sqliteName As String = "prova"
Prova è il nome del database
Se perdessi 10 minuti per guardarlo vedresti che nella funzione:
Citazione
Public Sub controlladb()
    If Not Exist(sqlitePercorso & "/" & sqliteName) Then
     If Message.Question("Il database non esiste!, Lo creo?", "Si") = 1 Then
      With $conn
      .Type = "sqlite3"
      .Host = sqlitePercorso
      End With
      $conn.Open
      $conn.Databases.Add(sqliteName)
....
Basta che cambi sqliteName con form.textbox1.text... se ti studi un pò il codice ti viene più facile scriverlo e provarlo che provare una funzione fatta da qualcun'altro.

Prima di chiedere prova e riprova e poi cerca nel forum e se non ancora non riesci allora chiedi.
Scusami penso di aver sbagliato io a darti esempi già pronti. Per imparare Gambas bisogna solo studiare
Se vuoi si continua, nessun problema, ma gli esempi sono esempi e vanno studiati e spetta a te adattarli
Ciao

Offline fernando

  • Gambero
  • **
  • Post: 63
    • Mostra profilo
Re: Riaggiornare una grglia
« Risposta #57 il: 15 Maggio 2012, 19:12:32 »

   
Ciao Golia
Che 'prova' fosse il nome del database... beh questo l'avevo capito, altrimenti.... :-)
Si voglio continuare.... anche dopo questa rimproverata :-), perchè, ti sembrerà strano, invece ho studiato parecchio sugli esempi che mi hai  mandato, ho avuto dei chiarimenti più di quanto si possa pensare. L'unico argomento 'ostico' è stato la gestione stampa che non riuscivo a capire, e cmq lo adattata bene nel mio progetto.
E quanto ho imparato ho messo in atto nei miei piccoli progetti gambas. Ma alcune volte ci sono piccole (grandi per me) cose che non riesco a intuire, a capire.... sarà l'età :-) non è colpa di nessuno. Forse ho fatto un pò di confusione, questo si, ma ripeto i suggerimenti e gli esempi li ho studiati, infatti alcuni argomenti non li ho più trattati. Cmq ho cambiato quanto mi hai detto nel codice, ma ho l'errore : 'unknown Identifier :sqlitePercorso. Ma questa funzione poi la  richiamo da un Button mettendo  controlladb() ? Ultimo aiuto con esempio, e se funzionante, lo
studierò veramente, non disturbandoti più.
Cordiali saluti e buona serata.

Public Sub controlladb()
If Not Exist(sqlitePercorso & "/" & Rubrica.Textbox1.Text) Then
     If Message.Question("Il database non esiste!, Lo creo?", "Si") = 1 Then
      With $conn
      .Type = "sqlite3"
      .Host = sqlitePercorso
      End With

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Riaggiornare una grglia
« Risposta #58 il: 15 Maggio 2012, 20:55:00 »
ok avanti :)
La funzione mi sono accorto che non poteva funzionare perchè prima di creare un nuovo database bisogna chiudere quello precedente, quindi $conn che è il database va chiuso così $conn.close.
quindi lasciamo stare la funzione controlladb che serve all'avvio e ne facciamo un'altra sotto, praticamente uguale, aggiungendo però prima di tutto il comando per chiudere il database. Inoltre per passare il nome del database..ormai hai capito come faccio di solito
Codice: gambas [Seleziona]

Public Sub creadb(nomedb As String)
$conn.Close
    If Not Exist(sqlitePercorso & "/" & nomedb) Then
     If Message.Question("Il database non esiste!, Lo creo?", "Si") = 1 Then
      With $conn
      .Type = "sqlite3"
      .Host = sqlitePercorso
      End With
      $conn.Open
      $conn.Databases.Add(nomedb)
      $conn.Close
      $conn.Name = nomedb
      $conn.Open()
      creatabella()
    Endif
    Endif
End



Public Sub creadb(nomedb As String) nomedb è il nome del database, in questo modo puoi passare tutte le informazioni che vuoi, per esempio se vuoi far passare anche il percorso:
Public Sub creadb(nomedb As String, percorso as String)
ok?
quindi sul pulsante che vai a mettere nel form
Codice: gambas [Seleziona]
ModConn.creadb("gino")

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Riaggiornare una grglia
« Risposta #59 il: 15 Maggio 2012, 21:01:09 »
dimenticavo, quella funzione serve per creare un database nuovo, per aprire e lavorare con un database esistente diverso da prova devi.. no, dimmelo tu ;) ok?