Autore Topic: Utilizzo di DB: differenze con RPG  (Letto 7510 volte)

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Utilizzo di DB: differenze con RPG
« Risposta #15 il: 02 Giugno 2008, 14:03:52 »
il funzionamento di questi componenti è di una semplicità estrema

ma effettivamente il loro utilizzo non è spiegato molto bene dal manuale

il datasource si connette automaticamente alla connessione del db bisogna solo passargli il nome della tabella del db

ovvero  se effettuiamo una connessione al nostro db con il metodo classico

Codice: [Seleziona]


 sName = "nome_del_db"

  WITH $hConn1
    .Type = "sqlite3"
    .Host = User.Home
    .Login = ""
    .Password = ""
  END WITH

  $hConn1.Name = sName
  $hConn1.Open    

  WAIT

   DataSource1.Table = "nome_della_tavola"

 


a questo punto il nostro datasourse  e già funzionante

per far funzionare dataview e databrowser basterà fornire loro l' elenco dei nomi delle colonne da visualizzare


Codice: [Seleziona]
 DataView1.Columns = ["nome_colonna1", "nome_colonna2", "nome_colonna3"]



volendo si possono definire le dimensioni delle colonne e il titolo con

Codice: [Seleziona]

 WITH DataView1.GridView
           .Columns[0].Text = "titolo_colonna1"
           .Columns[0].Width = 100
           .Columns[1].Text = "titolo_colonna2"
           .Columns[1].Width = 100
           .Columns[2].Text = "titolo_colonna3"
           .Columns[2].Width = 100
 END WITH
 



dovrebbe essere tutto

comunque ti posto un programmino di prova che ho realizzato tempo fa per provare questi componenti

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #16 il: 02 Giugno 2008, 18:35:35 »
Uh, in effetti è molto semplice :-)

IL file che hai postato l'ho visto in un'altra discussione e l'ho già letto, anche se ci ho capito (per ora) poco; in ogni caso grazie per avermelo segnalato, sicuramente quando ne capirò di più sarà molto meglio :-)

Adesso ho modificato il programma che sto facendo secondo le indicazioni, ma mi sa che c'è ancora qualcosa che non va, perché quando lo lancio mi dice "no current connection". Ho provato a metterlo in debug una riga per volta, e me le esegue tutte, fino a quando non deve riemettere il video dove si trova la DataView che ho inglobato nel DataSource...

provo a mettere il codice che sto usando, vediamo se qualche esperto riesce a vedere l'errore :-)

Codice: [Seleziona]
PUBLIC SUB btClienti_Click()
  DIM dbInterventi AS NEW Connection
  DIM pos AS Integer
  DIM hDati AS Result
  DIM sql AS String
  DIM file AS String = "Clienti"
       
  'Collegamento al Data Base
    dbInterventi.Close()
   
    WITH dbInterventi
    .type = "mysql"
    .host = "localhost"
    .User = "root"
    .Name = "Interventi"
    END WITH
   
   
    TRY dbInterventi.OPEN()
    IF ERROR THEN Message.Error("Impossibile aprire la base dati")
    IF ERROR THEN ME.Close
   
    'Controllo che ci sia la tabella clienti  
    IF NOT dbInterventi.Tables.Exist(file) THEN Message.Error("Il file " & file & " non esiste...")

  'Carico i dati nel risultato
  sql = "Select Codice, RagioneSociale from Clienti"
  hDati = dbInterventi.exec(sql)

  'Carico i dati nel Data Source
  dsDati.Table = file
 
  'Carico i dati nel DataBrowser
  dbDati.Columns = ["Codice", "RagioneSociale"]
 
  WITH dbDati.GridView
    .Columns[0].text = "Cliente"
    .Columns[0].Width = 20
    .Columns[1].text = "Ragione Sociale"
    .Columns[1].Width = 100
    END WITH
 
  dbDati.Show

END


Non sono sicurissimo sul .Show finale, non credo serva effettivamente... ma l'errore me lo da comunque :-)
Saluti a tutti

Mario

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #17 il: 02 Giugno 2008, 18:37:18 »
Dimenticavo: ho usato una variabile per il nome del file, perché vorrei fare una funzione comune per reperire i dati dei tre file principali (Clienti, Progetti e Interventi), in modo da avere una sola gestione :-)
Ma comunque, mettendo il nome in chiaro o usando la variabile, non cambia nulla ...
Saluti a tutti

Mario

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Utilizzo di DB: differenze con RPG
« Risposta #18 il: 02 Giugno 2008, 19:12:29 »
Citazione
non va, perché quando lo lancio mi dice "no current connection



devi  dichiarare l' oggetto connection come public

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #19 il: 02 Giugno 2008, 20:32:41 »
Ah, provo subito, grazie :-)
Saluti a tutti

Mario

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #20 il: 02 Giugno 2008, 20:40:42 »
Che emozione: funziona! :-)
Adesso gioco :-D
Saluti a tutti

Mario

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #21 il: 03 Giugno 2008, 11:52:06 »
Eh eh, divertente :-)

La cosa bella è che man mano che si va avanti, si scoprono cose nuove :-)
Dunque adesso ho due nuovi dubbi:

1) Utilizzando il sistema che mi hai detto tu, fsurfer, leggo i dati dl file così come sono. Non mi è chiaro in che modo leggere i dati risultanti dall'esecuzione dell'SQL.
2) Non ho capito in che modo "vuotare" il Datasource, in modo da ricaricarlo con i nuovi dati in caso di aggiornamento o di ripetizione della lettura :-)

Scusa se approfitto, ma quando me ricapita? :-D
Saluti a tutti

Mario

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Utilizzo di DB: differenze con RPG
« Risposta #22 il: 03 Giugno 2008, 19:42:51 »
questi due aspetti ti confesso non li ho mai presi in esame purtroppo. :-(
però se ho tempo faccio delle prove
ciao ciao

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Utilizzo di DB: differenze con RPG
« Risposta #23 il: 03 Giugno 2008, 21:26:53 »
dau file di guida sembra che datasource si connetta solo all' oggetto connection

percui per visualizzare i dati di un sql potresti creare un db temporaneo ( magari in sqlite3 per velocizzare) e collegare il datasorce a tale db

datasurce.refresch dovrebbe riuscire ad riaggiornare i dati

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #24 il: 04 Giugno 2008, 08:39:04 »
Grazie, appena posso faccio qualche prova...

Apro una minuscola parentesi: non mi intendo di VB ma ieri mi è capitato tra le mani un libro che parla delle macro di Office, e ho visto che il VBA ha costrutti molto simili a quelli di Gambas (o viceversa, fate voi :-) )
Va a finire che imparando Gambas imparo anche VB :-D
Saluti a tutti

Mario

g.paolo

  • Visitatore
Re: Utilizzo di DB: differenze con RPG
« Risposta #25 il: 04 Giugno 2008, 08:55:32 »
@overhill
Negli ultimi anni ho sempre lavorato con VBA e confermo che le similitudini con Gambas sono notevoli.
L'unico aspetto che mi ha messo in difficoltà all'inizio con Gambas, è stato il concetto di variabili "globali", che in Gambas non esiste.
In VBA potevi dichiarare variabili pubbliche in un modulo iniziale e queste potevano essere chiamate senza riferimento al modulo stesso in qualsiasi punto del programma, mentre in Gambas serve sempre riferirsi ad una variabile esterna con il costrutto modulo.variabile.

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #26 il: 04 Giugno 2008, 11:35:04 »
Ah, infatti mi stavo chiedendo come collegarsi a una variabile non dichiarata internamente, e mi sembrava che la dichiarazione "public" non fosse così "pubblica"... :-)
Saluti a tutti

Mario

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #27 il: 06 Giugno 2008, 20:29:11 »
Bene, andando avanti con la gestione del mio progetto, ho finalmente capito (parola grossa) come aggiornare i dati del mio data base. Devo dire che è addirittura più versatile dell'RPG, ma anche in questo caso la logica è (molto vagamente) simile.
In ogni caso mi sono scontrato con un problema che sinceramente non capisco: nel video ci sono due spinbox per la gestione del campo Tariffa e Pagamento.
I valori riesco a scriverli correttamente nel file, ma poi non riesco a riportarli dentro le spinbox quando rileggo i dati.
Ho visto che la proprietà .text della spinbox è di sola lettura, e quindi lavoro su "value".
Nel file ho dei dati nulli, quindi ho fatto un piccolo controllo come questo:

 
Codice: [Seleziona]
SELECT CASE Val(hData!Tariffa)
        CASE NULL
         Tariffa.Value = Tariffa.MinValue
        CASE ELSE  
          Tariffa.Value = Val(hData!Tariffa)    
      END SELECT


A me pare giusto, ma pare che il controllo non funzioni mai, perché nella spinbox trovo sempre il valore minimo (25 euro, economico, no?)
Dove cavolo sto sbagliando? :-)
Saluti a tutti

Mario

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #28 il: 06 Giugno 2008, 20:34:53 »
Già che ci siamo vi faccio un'altra domanda: nella form i campi hanno lo stesso nome dei campi del file, per semplicità.
Ho capito come leggere l'elenco dei campi con un campo di tipo ResultFIelds (o quello che è), ma mi sono scontrato con un problemino.
Il mio obiettivo era di fare un loop per mettere ogni campo in quello che si chiama allo stesso modo nel form, una cosa del tipo

Codice: [Seleziona]

FOR EACH campo IN rDati.Fields
  Campo.text = rDati!Campo
  NEXT


Ma quando lo eseguo mi dice, ovviamente, che il campo CAMPO non ha una proprietà TEXT... anzi, non esiste proprio!
QUindi il problema è la possibilità di usare un CAMPO il cui nome sia contenuto in un altro CAMPO... sempre che si possa fare, ovviamente :-)

Ovviamente viceversa per quando scrivo sul file...
Saluti a tutti

Mario

g.paolo

  • Visitatore
Re: Utilizzo di DB: differenze con RPG
« Risposta #29 il: 06 Giugno 2008, 22:14:17 »
Il comando
Codice: [Seleziona]
Campo.text = rDati!Campo  

non brilla di chiarezza direi.
Io preferisco di gran lunga assegnare i nomi delle textbox ad esempio, anteponendo sempre la natura dell'oggetto, così una textbox contenente il nominativo diverrà "tb_nominativo", così almeno non faccio confusione.

Ecco un esempio di assegnazione alle textbox sul form dei valori dei campi di un record:
Codice: [Seleziona]

WITH connessione
  .Name = Avvio.nomeDB
  .Type = "sqlite3"
  .Open
  .Begin
      criterio = "id=&1"
      parametro = avvio.posizione
      Risultato = .Edit("agenti", criterio, parametro) '
      Tb_Id.Text = risultato!id    
      tb_nick.text = risultato!nick
      Tb_nominativo.Text = risultato!nominativo
      Tb_cellulare.Text = risultato!cellulare
      Tb_passw.Text = risultato!passw
  .Commit
  END WITH