Autore Topic: [risolto]Sqlite e Where  (Letto 4000 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #15 il: 09 Settembre 2010, 00:10:47 »
Purtroppo ho potuto guardare solo ora le ultime risposte della discussione e mi fa piacere che hai scoperto l'errore. Ho anche letto che preferiresti utilizzare mysql. Io non conosco quel DB perché mi passo il tempo programmando di tanto in tanto sul mio unico pc. Penso che ce la farai egregiamente.
Se tuttavia dovessi decidere di restare in Sqlite, ricorda che Sqlite vuole sempre una colonna id autoincrementale, denominata proprio "id", che dovrebbe corrispondere alla tua "iddichia". Un'altra cosa: io non mai usato nel create istruzioni del tipo "nome_colonna numeric(xx)", ma semplicemente  "nome_colonna integer" e non ho mai avuto sorprese come quella che hai citato tu; nel mio DB alimento 12 tabelle; non sono tante, ma nemmeno pochissime.
Comunque deciderai, buon lavoro.  :D
Ciao.
:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #16 il: 09 Settembre 2010, 00:12:53 »
per far eil backup io utilizzo:
Codice: gambas [Seleziona]

PUBLIC SUB Button1_Click()

  nomefile = User.Home & "/gesthotel/backup/" & nomefile & ".sql"
  comando = "mysqldump --opt -l -h " & percorso_db & " -u " & utente_mysql & " --password=" & pass_mysql & " " & nome_db & " > " & nomefile
  
 
   SHELL comando


END

le opzioni -l e -h adesso non mi ricordo a che servono cmq mi pare che indichino a mysqldump di copiare anche la struttura del db

per il ripristino:
Codice: gambas [Seleziona]
    'ricreo il db
            
             sql = "CREATE database " & nome & ";"
            hres = $hConn.EXEC(sql)
              $hConn.Commit
              
              $hConn.Close
            
        
             comando = "mysql --one-database " & nomedb & " < " & percorsofile_e_nomefile & " -u " & nome_utenteMysql & " --password=" & password
          
            
             Timer2.Start
             $stringa = ""
           SHELL comando  

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #17 il: 09 Settembre 2010, 00:26:01 »
@fsurfing

La mia situazione è un po complessa, provo se ci riesco a spiegarmi meglio.

io ho 10 pc con lo stesso programma,  stesso database e stesse tabelle (solo il nome del database ha quello della sede), ovviamente i dati inseriti sono differenti da pc a pc.

ora devo avere la possibilità di salvarmi il database di ogni pc su una penna usb, quindi sulla penna avrò: database1, database2,database3 ecc..., e avere la possibilità di poterlo leggere su qualsiasi pc senza ripristinare o copiare il database presente su quel pc.

in pratica pc1 ha il database1, ora leggendo quel file sul pc3 devo solo leggerlo e non sostituire o alterare il database presente database3.

Con la tua seconda funzione rovinerei il database presente su pc3.

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #18 il: 09 Settembre 2010, 00:31:39 »
 raga mi sa che sono fuso, forse è l'ora ho la stanchezza.

rispondo a voi e mi trovo le risposte da solo.

dato che i miei database hanno nomi diversi effettuando il restore non sovrascrivo quello presente e il problema non si pone.

Grazie per le risposte ora comincio a provare sia il codice di golia che quello di fsurfing, il problema verra dopo quando dovro trasferire i dati gia presenti su sqlite a Mysql

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #19 il: 09 Settembre 2010, 00:33:45 »
con la funzione semplice che ti avevo postato il nome del database resta quello di origine.
Con la funzione di fsurfing credo che basta che gli dai tu il nome del db che vuoi

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #20 il: 09 Settembre 2010, 00:35:39 »
per trasferire i dati non avrai grossi problemi, penso però che ci sia qualche piccola incompatibilità a livello query

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: [risolto]Sqlite e Where
« Risposta #21 il: 09 Settembre 2010, 00:39:42 »
Ma se i 10 pc sono connessi alla rete non puoi usare mysql e fare in modo che ogni modifica aggiorni un solo database centralizzato? In questo modo eviti backup multipli, possibili carenze e roba simile....

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #22 il: 09 Settembre 2010, 02:35:37 »
Ma se i 10 pc sono connessi alla rete non puoi usare mysql e fare in modo che ogni modifica aggiorni un solo database centralizzato? In questo modo eviti backup multipli, possibili carenze e roba simile....

No purtroppo non sono connessi alla rete, si trovano in sedi diverse e non tutti hanno il collegamento ad internet.

@Golia
In effetti temo che sarà una sfacchinata nel database ci sono 76 tabelle, avevo pensato di crearmi prima un clone del programma con gli stessi nomi delle tabelle e collegarlo a mysql, effettuare tutte le verifiche e poi passare i dati.

Attualmente mi creo il database dal programma da una sub

Codice: [Seleziona]
WITH $hConn
      .Type = "sqlite3" ' indicazione del tipo di database da utilizzare
      .Host = sPercorso
      .Login = ""
      .Password = ""
    END WITH

IF NOT $hConn.Databases.Exist(sName & "PN") THEN
          $hConn.Databases.Add(sName & "PN")
          $hConn.Close
  ELSE
  Message.info(m1.MyNamA & "Database PrimaNota esistente")
  $hConn.Close
  ENDIF
 
          $hConn.Name = sName & "PN"
          $hConn.Open()

IF $hconn.Tables.Exist("dichiarazione") = TRUE THEN
                Message.info("la tabella dichiarazione esiste")
            ELSE
             
          sql = "CREATE TABLE 'dichiarazione' ( 'iddichiarazione' INTEGER PRIMARY KEY," &         
          "'data' numeric(10) DEFAULT 0," &
          "'tipo' VARCHAR(15) DEFAULT NULL," &
          "'natura' VARCHAR(15) DEFAULT NULL," &
          "'mese' numeric(10) DEFAULT 0," &
          "'anno' numeric(10) DEFAULT 0," &
          "'dataop' numeric(10) DEFAULT 0," &                   
          "'acquisto' VARCHAR(5) DEFAULT NULL," &
          "'vendita' VARCHAR(5) DEFAULT NULL," &
          "'usoacc' VARCHAR(5) DEFAULT NULL," &
          "'usospe' VARCHAR(5) DEFAULT NULL," &
          "'garanzia' VARCHAR(5) DEFAULT NULL," &
          "'esportazione' VARCHAR(5) DEFAULT NULL," &
          "'importazione' VARCHAR(5) DEFAULT NULL," &
          "'nofinanziaria' VARCHAR(5) DEFAULT NULL," &         
          "'spenofin' VARCHAR(255) DEFAULT NULL," &
          "'investimento' VARCHAR(5) DEFAULT NULL," &         
          "'speinv' VARCHAR(255) DEFAULT NULL," &
          "'rettifica' VARCHAR(5) DEFAULT NULL," &
          "'notret' VARCHAR(255) DEFAULT NULL," &
          "'dataret' numeric(10) DEFAULT 0," &           
          "'noper' numeric(10) DEFAULT 0," &
          "'ncont' numeric(10) DEFAULT 0," &         
          "'groro' numeric(10) DEFAULT 0," &
          "'valoro' numeric(10) DEFAULT 0," &
          "'valuta' VARCHAR(15) DEFAULT NULL," &
          "'note' VARCHAR(255) DEFAULT NULL);"
 
      hres = $hConn.EXEC(sql)
          $hConn.Commit
          Message.info("tabella dichiarazione creata")
         
       ENDIF 


si può fare la stessa cosa per con Mysql?

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #23 il: 09 Settembre 2010, 02:40:35 »
@PicaVbg

forse hai ragione, ho notato che creando le tabelle con sqlitebrowser vengono create semplicemente come text oppure numeric.

Ma orami ho deciso di abbandonare sqlite sia per la mole dei dati inseriti sia per il fatto che in futuro potrei collegare tutti i pc alla rete.

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #24 il: 09 Settembre 2010, 12:46:50 »
Ci ho pensato e mi sono ricordato che anch'io ho provato a collegare il mio programma a sqlite, quindi non dovresti trovare problemi.
L'unica cosa di diverso, almeno secondo me, è la creazione delle tabelle. Questo è un esempio che avevo fatto, vdi se può esserti utile
Codice: gambas [Seleziona]

PUBLIC $conn AS NEW Connection


'''XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

PUBLIC PROCEDURE Connect()


   
   $conn.Close 
   $conn.Type = "mysql" '
   $conn.Host = "localhost" '
   $conn.Login = "root" 
   $conn.port = "3306"
   $conn.Name = "prova"
   $conn.Password = "tuapassword" ' 
   $conn.Open

END

PUBLIC PROCEDURE disconnect()
   $conn.Close 
END

'''XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

PUBLIC SUB controlladb()
DIM nomedatabase AS String

nomedatabase = "prova"

   $conn.Close 
   $conn.Type = "mysql" '
   $conn.Host = "localhost" '
   $conn.Login = "root" 
   $conn.port = "3306"
   $conn.Password = "tuapassword" ' 
   $conn.Open

   
IF NOT $conn.Databases.Exist(nomedatabase) THEN
  IF Message.Question("Creo il database", "Si", "No") = 1 THEN
      $conn.Databases.Add(nomedatabase)
          creatabella()
          $conn.Close   
          $conn.Name = nomedatabase
          $conn.Open
      ENDIF
     
    ELSE   
      $conn.Close   
      $conn.Name = nomedatabase
      $conn.Open
ENDIF
END


PUBLIC SUB creatabella()

DIM sql AS String
DIM htable AS Result

sql = "CREATE TABLE prova.rubrica ("
sql &= "idrubrica int(10) NOT NULL auto_increment,"
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,"
sql &= "PRIMARY KEY(idrubrica)"
sql &= ")ENGINE = InnoDB AUTO_INCREMENT = 0 DEFAULT CHARSET = latin1;"
 hTable = $conn.EXEC(sql)       
     
      $conn.Commit
      $conn.Close

END

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #25 il: 09 Settembre 2010, 13:01:06 »
Dimenticavo, negli esempi ho utilizzato l'utente root.

Questo è un'altro esempio per creare tabelle corelate. Molto utile per l'eliminazione a catena. In questo esempio ci sono 2 tabelle, clienti e preventivi. Praticamente se molti preventivi sono legati a 1 cliente, eliminando solo il cliente si elimina anche tutti i suoi preventivi. Penso che queste cose le sai già ;D ho solo voluto precisare se a qualche altro utente può servire
Codice: gambas [Seleziona]

sql = "CREATE TABLE " & Global.t$Name & ".clienti ("
sql &= "idcliente int(10) NOT NULL auto_increment,"
sql &= "cognome varchar(20) default NULL,"
sql &= "nome varchar(20) default NULL,"
sql &= "telefono varchar(15) default NULL,"
sql &= "indirizzo varchar(30) default NULL,"
sql &= "citta varchar(30) default NULL,"
sql &= "cap varchar(8) default NULL,"
sql &= "provincia varchar(20) default NULL,"
sql &= "telefono2 varchar(15) default NULL,"
sql &= "fax varchar(15) default NULL,"
sql &= "email varchar(25) default NULL,"
sql &= "txttelefono varchar(15) default NULL,"
sql &= "txttelefono2 varchar(15) default NULL,"
sql &= "note varchar(400) default NULL,"
sql &= "formulacortesia varchar(20) default NULL,"
sql &= "formulasaluto varchar(20) default NULL,"
sql &= "dasede varchar(2) default NULL,"
sql &= "datains date default NULL,"
sql &= "idprcliente int(11) default '0',"
sql &= "numer float DEFAULT NULL,"
sql &= "PRIMARY KEY(idcliente)"
sql &= ")ENGINE = InnoDB AUTO_INCREMENT = 0 DEFAULT CHARSET = latin1;"
 hTable = $conn.EXEC(sql)

sql = "CREATE TABLE " & Global.t$Name & ".preventivi ("
sql &= "idpreventivo int(11) NOT NULL auto_increment,"
sql &= "idcliente int(11) NOT NULL,"
sql &= "descrizione varchar(250) default NULL,"
sql &= "datapreventivo date default NULL,"
sql &= "accettazione tinytext,"
sql &= "dataaccettazione date default NULL,"
sql &= "dataconsegna date default NULL,"
sql &= "note varchar(400) default NULL,"
sql &= "sconto int(2) default NULL,"
sql &= "importo decimal(10,2) default NULL,"
sql &= "testoconsegna varchar(200) default NULL,"
sql &= "testopagamento varchar(200) default NULL,"
sql &= "sede int(2) default NULL,"
sql &= "consegnato tinytext,"
sql &= "ordinato tinytext,"
sql &= "venditore varchar(20) default NULL,"
sql &= "pathimage varchar(100) default NULL,"
sql &= "wfornitore varchar(50) default NULL,"
sql &= "widfornitore varchar(50) default NULL,"
sql &= "wlistino varchar(50) default NULL,"
sql &= "widlistino varchar(50) default NULL,"
sql &= "sconto2 int(2) default NULL,"
sql &= "idprcliente int(11) default '0',"
sql &= "idprpreventivo int(11) default '0',"
sql &= "numer float DEFAULT NULL,"
sql &= "PRIMARY KEY(idpreventivo),"
sql &= "KEY clienti_key(idcliente),"
sql &= "CONSTRAINT preventivi_ibfk_1 FOREIGN KEY(idcliente)REFERENCES clienti(idcliente)ON DELETE CASCADE ON UPDATE CASCADE"
sql &= ")ENGINE = InnoDB AUTO_INCREMENT = 0 DEFAULT CHARSET = latin1;"
 hTable = $conn.EXEC(sql)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #26 il: 09 Settembre 2010, 14:41:13 »
grazie golia

ti sbagli queste cose purtroppo non le sò, per quanto riguarda i database sono negato.

interessante le tabelle correlate, in fase di inserimento come si procede? si inseriscono i dati sia nella tabella principale che nella sottotabella correlata? oppure è il database che li inserisce in automatico?

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #27 il: 09 Settembre 2010, 14:55:39 »
Lo fà in base alle condizioni di trigger, ovvero delle istruzioni di constraint date alla creazione, o dopo, della tabella.


Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #28 il: 09 Settembre 2010, 15:48:03 »
In automatico non lo so, io faccio così:
Form clienti, scrivo o seleziono il cliente,
Apro il form preventivi, il form apre solo i preventivi del cliente selezionato, se creo un preventivo nuovo, l'idcliente che si dovrà scrivere nella tabella preventivi va letto dal form clienti, oppure passato tramite variabile.
In automatico ho solo l'eliminazione, elimino il cliente senza preoccuparmi d'altro, tutti i dati (preventivi, dettagli, ordini, dettagliordini) vengono eliminati perchè legati tra loro.
Spero di essere stato chiaro, altrimenti lo sai che son quà ;)

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #29 il: 09 Settembre 2010, 15:59:24 »
Per rendere bene l'idea posto questa immagine