Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: dex - 07 Settembre 2010, 03:06:12

Titolo: [risolto]Sqlite e Where
Inserito da: dex - 07 Settembre 2010, 03:06:12
ciao raga

mi succede una cosa strana con sqlite3 e where
su due tabelle identiche, a parte i nomi dei campi, su una where funziona sull'altra no.
entrambe le tabelle vengono lette e scritte regolarmente, solo where non va, anche i campi di ricerca sono entrambi numerici.

Codice: [Seleziona]
Medi = MyRS!iddichiarazione
  
  sqlEL = "DELETE FROM detdic WHERE iddichia = " & Medi 'funziona
      MyRSEL = MODMain.MyConnpn.Exec(sqlel)
  
  sqlEL = "DELETE FROM controparti WHERE iddichia = " & Medi 'non funziona
      MyRSEL = MODMain.MyConnpn.Exec(sqlel)

le ho provate tutte ma non riesco a venirne a capo
Titolo: Re: Sqlite e Where
Inserito da: md9327 - 07 Settembre 2010, 10:46:26
Sì, ma sono due tabelle diverse... i campi sono dello stesso tipo? I dati che ti aspetti sono presenti?
Titolo: Re: Sqlite e Where
Inserito da: fsurfing - 07 Settembre 2010, 19:19:02
può essere solo  un errore tuo, probabilmente una svista
Titolo: Re: Sqlite e Where
Inserito da: Picavbg - 07 Settembre 2010, 23:17:35
A volte succede che, nel leggere i nomi delle colonne, si leggono non come sono veramente scritti, ma come sono stati scritti nella propria mente, pertanto non ci si accorge dell'errore. Se ancora non riesci, puoi postare il "create" delle due tabelle, così possiamo leggerli pure noi e farti risalire all'errore di scrittura.
Ciao.
Titolo: Re: Sqlite e Where
Inserito da: dex - 07 Settembre 2010, 23:53:39
Sì, ma sono due tabelle diverse... i campi sono dello stesso tipo? I dati che ti aspetti sono presenti?

Entrambi i campi sono numerici
Entrambi i Campi hanno i dati inseriti (verificato con SqliteBrowser) inoltre come detto sopra i dati vengono regolarmente scritti e letti dal programma

questo è il codice con cui creo le tabelle.

prima tabella funzionante:
Codice: [Seleziona]
IF $hconn.Tables.Exist("detdic") = TRUE THEN 
                Message.info("la tabella detdic esiste")
            ELSE
             
          sql = "CREATE TABLE 'detdic' ( 'iddetdic' INTEGER PRIMARY KEY," &         
          "'iddichia' numeric(10) DEFAULT 0," &
          "'codcli' numeric(10) DEFAULT 0," &
          "'tipocli' VARCHAR(15) DEFAULT NULL," &         
          "'data' numeric(10) DEFAULT 0," &
          "'ndoc' VARCHAR(15) DEFAULT NULL," &         
          "'tipo' VARCHAR(15) DEFAULT NULL," &
          "'nome' VARCHAR(15) DEFAULT NULL," &             
          "'grfino' numeric(10) DEFAULT 0," &
          "'euro' numeric(10) DEFAULT 0);"
 
      hres = $hConn.EXEC(sql)
          $hConn.Commit
          Message.info("tabella detdic creata")
       
       ENDIF     

questo il codice della seconda tabella
Codice: [Seleziona]
IF $hconn.Tables.Exist("controparti") = TRUE THEN 
                Message.info("la tabella controparti esiste")
            ELSE
         
         sql = "CREATE TABLE 'controparti' ( 'idcontroparti' INTEGER PRIMARY KEY," &         
          "'iddichia' numeric(10) DEFAULT 0," &
          "'codcli' numeric(10) DEFAULT 0," &
          "'tipocli' VARCHAR(15) DEFAULT NULL);"       
                   
      hres = $hConn.EXEC(sql)
          $hConn.Commit
          Message.info("tabella controparti creata")
 
         
       ENDIF     

sulla seconda tabella ho provato a fare una query con where sul campo idcontroparti e funziona, è il campo iddichia che non và.
Titolo: Re: Sqlite e Where
Inserito da: dex - 08 Settembre 2010, 00:27:37
raga ho trovato l'errore ma non riesco a capire come si crea.

in pratica inserendo un valore tipo 19, sulla prima tabella inserisce 19 (2 chr), sulla seconda inserisce 19(3 chr) al 19 aggiunge uno spazio vuoto, rimosso a mano dai record lo spazio ora where funziona.

La cosa strana è che scrivo entrambe le tabelle nella stessa sub ed in entrambe uso la stessa variabile di tipo integer per inserire i dati nel campo iddichia.

questo è il codice
Codice: [Seleziona]
DIM Medi AS Integer

Medi = MyRS!iddichiarazione

sqlri = "insert into detdic (iddichia,codcli,tipocli,data,ndoc,tipo,nome,grfino,euro)values( '" &
           Medi & "','" & cc & "','" & txc & "','" & Ndat2 & "','" & txd & " ','" &
           tip & " ','" & tno & " ','" & tgr & " ','" & tpe & "')"
   
           MyRSRI = MODMain.MyConnpn.Exec(sqlri)


sqlri = "insert into controparti (iddichia,codcli,tipocli)values( '" &
           Medi & " ','" & Cfo & " ','" & Nfo & "')"
   
           MyRSRI = MODMain.MyConnpn.Exec(sqlri)



Come potete vedere La stessa variabile "Medi" viene usata per entrambe ma sulla seconda tabella aggiunge uno spazio vuoto.   :hard: :hard:
Titolo: Re: Sqlite e Where
Inserito da: dex - 08 Settembre 2010, 00:35:11
Raga rispondendo a voi ho trovato l'errore.

erano quei piccoli spazi sulla tabella controparti fra iddichia e Nfo.
Titolo: Re: [risolto]Sqlite e Where
Inserito da: md9327 - 08 Settembre 2010, 10:53:30
Rinnovo il mio appello nel fare attenzione a sqlite.

E' un database facile da usare, ma non dà certezze sui dati.

Inoltre, come da me appurato molto tempo fà, tutto viene memorizzato sotto forma di stringa, anche le date e i numeri, e non fà alcun controllo su quello che si inserisce. Questo deve essere fatto a programma!

Quindi attenzione raga!
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 08 Settembre 2010, 21:46:02
@md9327

in effetti tocchi una nota dolente.
all'inizio del progetto ho scelto sqlite per la portabilità, mi spiego, il programma è installato su vari pc in sedi diverse e avevo la necessità giornalmente di dover effettuare dei backup da ogni singola sede per portarli alla sede centrale dove venivano visionati, scartai Mysql in quanto non riuscivo a creare questi file di backup da portare alla sede centrale.
all'inizio erano solo 2 pc e pochi dati, ora sono circa 10 pc e i dati sono diventati consistenti, già una volta durante un backup sqlite ha creato casino, più si va avanti più aumentano i dati e la mia preoccupazione.
Inoltre nei file ci sono dati sensibili che per la legge sulla privacy andrebbero protetti e come sappiamo sqlite non lo permette.

Su quale database più robusto e che offra la possibilità di poter salvare il tutto su un file di backup, posso migrare?
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 08 Settembre 2010, 22:32:16
Io salvo il file di backup di mysql con una semplice stringa da shell, lo faccio fare a gambas tutti i giorni in automatico mantenendo le ultime 10 copie.
Io mi trovo bene con mysql anche se ho letto in giro che molti utenti preferiscono PostgreSQL
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 08 Settembre 2010, 22:36:43
Ciao Golia

non è solo per il file di backup ma devo avere poi la possibilità di leggere nella sede centrale quel backup.
con Mysql si può fare?
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 08 Settembre 2010, 22:42:53
Certo..almeno se ho capito. Io per esempio mi copio il file, lo porto a casa e lo carico nel pc di casa, è questo che devi fare?
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 08 Settembre 2010, 23:06:57
esatto

come fai a caricarlo nel pc di casa?
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 08 Settembre 2010, 23:32:31
con la gui mysql-administrator, però sono sicuro che si può fare da shell, avevo trovato in rete la stringa ma non ricordo. Vedo se posso recuperarla
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 08 Settembre 2010, 23:45:25
Trovata e provata  ;)

per fare il backup



 
Codice: gambas [Seleziona]

DIM strexe AS String
DIM hbackup AS Process
 strexe = "mysqldump -uroot -p"
 strexe &= Global.t$Password ' tua password
 strexe &= " --opt "
 strexe &= Global.t$Name ' nome del database
 strexe &= " > " & Application.Path ' percorso
 strexe &= "/prova.sql" ' nome file output
 
 hbackup = SHELL (strexe)


per fare il restore

Codice: gambas [Seleziona]
DIM strexe AS String
DIM hbackup AS Process  
strexe = "mysql < /home/franco/prova.sql -u root -p"
strexe &= Global.t$Password 'tua password
hbackup = SHELL (strexe)


Prova, ma funziona ;)
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Picavbg - 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.
Titolo: Re: [risolto]Sqlite e Where
Inserito da: fsurfing - 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  
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 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.
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 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
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 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
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 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
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Ceskho - 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....
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 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?
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 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.
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 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
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 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)
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 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?
Titolo: Re: [risolto]Sqlite e Where
Inserito da: md9327 - 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.

Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 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à ;)
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 09 Settembre 2010, 15:59:24
Per rendere bene l'idea posto questa immagine
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Picavbg - 09 Settembre 2010, 17:19:14
Non avendo dimestichezza con im DB, non posso dare consigli appropriati, ma cerco di venirti incontro col ragionamento. Non ho capito come possa funzionare la correlazione se tu hai 10 DB formalmente duplicati , ma contenenti tutti dati diversi e tutti indipendenti l'uno dall'altro, perché non visibili tutti in rete.

Supponiamo che i tuoi 10 pc si trovino in 10 stabilimenti diversi, numerati da 1 a 10. Potresti anche pensare a creare in tutti i pc una cartella col nome di ciascuno  stabilimento, sotto una cartella comune "Stabilimenti"; nel programma potresti aggiungere nella Form_x che usi normalmente per l'accesso iniziale al DB (uno da scegliere) una ListBox con l'elenco di tutti i nomi mnemonici dei path con "Stabilimento1, Stabilimento2, ...,Stabilimento10. L'indice di ricerca nella ListBox dovrebbe essere lo stesso per ricercare in un array corrispondente i path relativi agli stabilimenti (Es.: /home/stabilmenti/stabilimento1, /home/stabilmenti/stabilimento2, ...,/home/stabilmenti/stabilimento10), 
Ciò ti permetterebbe di scegliere inizialmente il DB su cui lavorare e da quel momento, fino alla chiusura del programma, vedresti solamente quel DB. Certo, sarebbe conveniente che anche i DB avessero nomi diversi, per non andare incontro a possibili errori.

Tutto questo non ti risparmia dal tenere un'attenta rubrica coi nomi dei DB e la loro data di ultimo aggiornamento, per curare a manina (mi pare però assai pericoloso), l'allineamento saltuario dei DB, in modo da essere sicuro di lavorare sempre sull'ultimo aggiornamento fatto.

Forse non sarò stato utile, ma é un'idea. In ogni modo,secondo me, é necessario che tu tenga nota elettronica dell'ultimo aggiornamento di ciascun DB, per esempio, sulla penna che utilizzi per la copia dei DB.
Es. Tabella_Raccordo_Ultimo_Agg_DB:
DB.Stabilimento1 | 20100901 | 221015
DB.Stabilimento2 | 20100831 | 150301
................................................................
DB.Stabilimento10 | 20100906 | 203231

Detta tabella ti permetterebbe di non ricoprire per errore un  DB del HD del pc di avvio nuovo lavoro, coi dati dello stesso DB, ma arretrati rispetto all'ultima data di aggiornamento (a causa di un saltato salvataggio), o di non andare a lavorare su un DB aggiornato altrove, ma ancora non ricopiato nel HD corrente.

A te l'ardua scelta! :D
Ciao.
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 09 Settembre 2010, 20:11:13
Lo fà in base alle condizioni di trigger, ovvero delle istruzioni di constraint date alla creazione, o dopo, della tabella.


Grazie per la risposta ma per me è arabo non so ne cosa sono i trigger ne le istruzioni di costaraint

@Golia
In effetti era quello che mi serviva, inserisco i dati sia del cliente che della sottotabella e solo in fase di eliminazione mi pulisce entrambe.

ulteriore richiesta: mi posti una query per scrivere e modificare il database con mysql? mi serve per vedere le differenze con sqlite e come devo modificare.

@Picavbg
In effetti faccio una cosa simile al tuo consiglio, non ho problemi di sovrascrittura o disallineamento in quanto i dati vengono scritti o modificati solo nella sede di appartenenza, nella sede centrale vengono solo letti e analizzati, allo scopo ho realizzato una variante del programma disattivando le funzioni di modifica.

 
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 09 Settembre 2010, 21:44:23
è la stessa cosa, non dovresti avere problemi. Il mio gestionale che gira con mysql l'ho provato con sqlite solamente cambiando i parametri di connessione. Come ti ho detto, io ho trovato diverso solo la creazione delle tabelle, il resto è tale e quale
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 09 Settembre 2010, 22:07:03
Questo però con il mio sistema.. non conosco il tuo :D anche se sarà lo stesso ;)
da quà puoi scaricare un semplice esempio con mysql http://www.gambas-it.org/smf/index.php?action=dlattach;topic=1328.0;attach=907 (http://www.gambas-it.org/smf/index.php?action=dlattach;topic=1328.0;attach=907)
Fammi sapere, ciao
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 10 Settembre 2010, 14:39:22
Ciao Golia

ho collegato la nuova versione del programma a mysql, tutto ok.

volevo chiederti per i campi che formato usare?
i campi data = date?
i campi numerici = numerico per tutto o specificare integer e float?
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 10 Settembre 2010, 14:56:20
Ciao dex
I campi data uso anch'io date.
Per i campi numerici ho usato INT e DECIMAL , adesso uso DOUBLE.
Non sono bravo a capire quale formato sia il migliore  ;) da poco uso double perchè va bene con il componente di Milio, GridBox.
Vedo che gestisce bene numeri interi e decimali.

Mi sembra di aver capito che il passaggio è stato abbastanza indolore   :), bene  :2birre:
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 11 Settembre 2010, 00:32:22
il passaggio è stato indolore anche grazie a te.
Ora per completarlo sarà un'impresa titanica.

Ho visto che Mysql ha 38 formati diversi, solo per i numeri ne sono 5 o 6, ci sarà una differenza ad usare un formato o un'altro.
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 11 Settembre 2010, 09:53:34
Si, io non ho mai approfondito  :-\
Ho trovato questa miniguida http://scaracco.altervista.org/SQL/FormatoCampiMySQL.html (http://scaracco.altervista.org/SQL/FormatoCampiMySQL.html)
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 14 Settembre 2010, 00:40:32
@fsurfing

sto provando ad inserire il codice id backup.
Codice: [Seleziona]
   1. PUBLIC SUB Button1_Click()  
   2.  
   3.  nomefile = User.Home & "/gesthotel/backup/" & nomefile & ".sql"  
   4.  comando = "mysqldump --opt -l -h " & percorso_db & " -u " & utente_mysql & " --password=" & pass_mysql & " " & nome_db & " > " & nomefile  
   5.    
   6.  
   7.   SHELL comando  
   8.  
   9.  
  10. END  

nomefile = User.Home & "/gesthotel/backup/" & nomefile & ".sql"   è la tua cartella di destinazione per il backup!

percorso_db? non sono riuscito a capire quale percorso.
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 14 Settembre 2010, 00:59:17
@golia

ho provato il codice:

Citazione
PUBLIC SUB Button5_Click()

      DIM strexe AS String 
    DIM hbackup AS Process 
    strexe = "mysqldump -uroot -p" 
   strexe &= "dex" ' tua password 
    strexe &= " --opt " 
    strexe &= m1.NamDb ' nome del database 
   strexe &= " > " & "/home/aft/temp/" ' percorso 
    strexe &= "/prova.sql" ' nome file output 
     
   hbackup = SHELL (strexe) 

END

PUBLIC SUB Button6_Click()

      DIM strexe AS String 
   DIM hbackup AS Process   
    strexe = "mysql < /home/aft/temp/prova.sql -u root -p"   
   strexe &= "dex" 'tua password 
   hbackup = SHELL (strexe) 

END

Il Backup funziona, il restore nonostante non dia nessun errore non va.
dove sbaglio?
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 14 Settembre 2010, 01:07:30
a prima vista manca uno spazio prima della password, spero sia solo quello, a me funziona
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 14 Settembre 2010, 01:12:00
Ho notato anche questo nel backup
Citazione
   strexe &= " > " & "/home/aft/temp/" ' percorso
    strexe &= "/prova.sql" ' nome file output
     
il risultato dovrebbe essere questo .. /home/aft/temp//prova.sql
C'è un / di troppo
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 14 Settembre 2010, 01:37:02
per lo spazio ho provato a metterlo e a toglierlo niente da fare

per il doppio // lo avevo notato anche io, ma se lo tolgo non funziona.

per gli uroot ho notato che uno è u root l'altro uroot.
anche li ho fatto varie prove, ma il backup va con entambi il restore no.
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 14 Settembre 2010, 08:58:18
cancelli il db prima di ripristinarlo? Quando avevo fatto le prove lo cancellavo con administrator per vedere se poi lo ripristinava, non ho provato se lo sovrascrive. Appena ho un pò di tempo provo anch'io
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 14 Settembre 2010, 13:33:59
si nelle prove ho dopo il backup ho cancellato il db.
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 14 Settembre 2010, 22:32:24
In effetti provando bene non và perchè nella fase di ripristino non trova il database.
Non capisco che prove avevo fatto con l'altro codice ???
Ho utilizzato il codice di fsurfing, questo deve andarti per forza ;D
Codice: gambas [Seleziona]

PUBLIC SUB Salvadb_Click()
  DIM mypassword AS String = "tuapassword"
  DIM mynomedb AS String = "prova"
  DIM mypath AS String = User.Home
  DIM myfile AS String = "prova.sql"
  DIM myuser AS String = "root"  

   SHELL ("mysqldump -u " & myuser & " -p" & mypassword & " --opt " & mynomedb & " > " & mypath & "/" & myfile)
END

PUBLIC SUB Ripristinadb_Click()
  DIM mypath AS String = User.Home
  DIM myfile AS String = "prova.sql"
  DIM mypassword AS String = "tuapassword"
  DIM mynomedb AS String = "prova"
  DIM myuser AS String = "root"    
  DIM $conness AS NEW Connection

   $conness.Close  
   $conness.Type = "mysql" '
   $conness.Host = "localhost" '
   $conness.Login = myuser
   $conness.port = "3306"
   $conness.Password = mypassword
   $conness.Open
      IF $conness.Databases.Exist(mynomedb) THEN
      $conness.Databases.Remove(mynomedb)
      ENDIF  
      $conness.Databases.Add(mynomedb)  
   SHELL ("mysql --one-database " & mynomedb & " < " & mypath & "/" & myfile & " -u " & myuser & " -p" & mypassword)
END
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 14 Settembre 2010, 23:53:40
@Golia
Non va, adesso mi effettua il restore ma di un database vuoto

Ho notato che fra -p e password mancava uno spazio, cmq ho provato con e senza spazio stesso risultato.

Ti posto le stringhe:

Stringa di Backup (mi crea un file sql con dentro i dati del database, unico neo il sistema non lo riconosce come file sql ma come semplice file testo. (all'interno oltre alla struttura  delle tabelle ci sono anche i dati che ho inserito)
Citazione
mysqldump -u root -p dex --opt prova > /home/aft/prova.sql

Stringa di restore ( mi inserisce il database prova ma vuoto, nessuna tabella)
Citazione
mysql --one-database prova < /home/aft/prova.sql -u root -p dex
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 15 Settembre 2010, 00:06:32
@Golia

Contrordine, adesso funziona, in pratica dovevo togliere lo spazio a tutte e due le -p, nel ricopiare il tuo codice non avevo notato che nel mettere la password avevo lasciato uno spazio.

grazie per l'aiuto.
Titolo: Re: [risolto]Sqlite e Where
Inserito da: md9327 - 15 Settembre 2010, 14:09:44
Golia, ricorda che un file sql non è altro che un file di testo con estensione sql...

Il fatto che il sistema non te lo riconosce come sql è perchè non esiste il mimetype "sql", ma è solo un concetto.

Su questo fatto esistono due differenze sostanziali tra l'interpretazione linux e quella windoz:

1) windoz capisce che file è solo dalla sua estensione, quindi è facilmente aggirabile
2) linux analizza il file e ne determina con quasi totale sicurezza di che tipo è, che deve essere tra i mimetype riconosciuti a livello globale
3) le icone che associa windoz si basano sempre sull'estensione del file
4) linux utilizza i mimetypes

Ovviamente, file non previsti, vengono messi tutti nel sacco dei binari generici, se questi non vengono determinati come puro testo.
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 15 Settembre 2010, 17:40:21
Sapevo che è solo un file di testo e che posso dare qualsiasi estensione o anche senza, per il resto lo so adesso grazie a te ;) mi sono anche fatto una ricerca per "mimetypes"...mai sentito prima ;D

P.S per tua esperienza è abbastanza affidabile fare backup in questo sistema?
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 15 Settembre 2010, 22:03:39
Una curiosità. come mai funziona solo con -ppassword?

Per i mimetypes! mettendo -p password mi creava un file vuoto ma linux lo riconosceva come sql e gli associava l'icona.

Per i file creati con -ppassword non associa l'icona, ma se si svuotano del contenuto compare l'icona.

 
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 15 Settembre 2010, 22:06:20
Citazione
Una curiosità. come mai funziona solo con -ppassword?
Non sò proprio dirti, sembrava un'errore anche a me, invece funziona solo così :-\
Titolo: Re: [risolto]Sqlite e Where
Inserito da: fsurfing - 15 Settembre 2010, 22:15:40
io ho sempre utilizzato l' indicatore
--password=
e non -p

esempio:
Codice: [Seleziona]
mysqldump --opt -l -h localhost -u root --password=asdf gesthoteldb > /home/sergio/gesthotel/backup/15-09-2010_22-13-47.sql
l' icona applicat aai file è la seguente
Titolo: Re: [risolto]Sqlite e Where
Inserito da: Golia - 15 Settembre 2010, 22:20:05
A me appare l'icona SQL ..
Titolo: Re: [risolto]Sqlite e Where
Inserito da: fsurfing - 15 Settembre 2010, 22:22:03
controllando nelle cartelle sul pc relative ad altri programmi , ho notato che le icone dei file sql "pieni" sono come quella che ho postato, mentre quelli vuoti hanno un icona tipo quella dei file di database , questo a maggior ragione indica appunto che linux interpreta i file pieni come file di desto non essendoci nel sistema nessuna applicazione che abbia registrato il mimetype sql
Titolo: Re: [risolto]Sqlite e Where
Inserito da: fsurfing - 15 Settembre 2010, 22:25:07
comunque sia direi che non ci sono dubbi sulla funzionalità di mysqldump io lo uso moltissimo con il codice postato post addietro e non ho mai riscontrato problemi o irregolarità
Citazione
A me appare l'icona SQL ..
se ci fai doppio clic con che programma te lo apre? sicuramente sarà un prog che io non utilizzo :) e quindi non è registrato
Titolo: Re: [risolto]Sqlite e Where
Inserito da: dex - 15 Settembre 2010, 23:14:45
@fsurfing

in effetti a me succede la stessa cosa, file pieni come l'icona che hai postato, file vuoti icona tipo database, doppio clik lo apre con gedit.

nella tua stringa le opzioni -l e -h a che servono?
Titolo: Re: [risolto]Sqlite e Where
Inserito da: fsurfing - 15 Settembre 2010, 23:25:27
-l blocca tutte tavole per la lettura, quindi eviti che qualcuno scriva mentre stai facendo il backup
-h indica l' host del db


Codice: [Seleziona]
mysqldump --help
per avere l' elenco completo delle opzioni di mysqldump