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

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Utilizzo di DB: differenze con RPG
« Risposta #30 il: 07 Giugno 2008, 02:44:10 »
Per fare il giochetto delle assegnazioni campo->controllo, puoi utilizzare un array di oggetti, che ti crei inizialmente all'apertura della forma (o la sua creazione... vedi metodo "_new()"), per coi riempirlo con i riferimenti ai controlli della form.

Se dai un'occhiata alla classe "Object" di gambas, e ai suoi metodi, ti accorgerai che puoi giocarci per capire cosa stai trattando al momento (quale oggetto, il tipo, il nome ecc.) e quindi, se implementato a dovere, riesci a tirarci fuori cose molto interessanti come, appunto, il giochetto che vuoi fare. :-P

Per quanto riguarda il mancato popolamento della spinbox, vedo che hai inserito un controllo su valori null. Sei sicuro che la lettura non restituisca proprio null?
E poi, un consiglio, se usi sqlite come database, ti faccio notare che per lui non esiste il concetto di null vero e proprio; al suo posto è fattibile che ti ritorni una stringa vuota, che puoi controllare anche con la funzione gambas "IsNull(var)". Inoltre, per continuare sul concetto sqlite, su cui ho scritto alcune note su questo sito e in altre discussioni, questo database non tratta le tipologie dei campi definite nella tabella come tali, ma gestisce tutto sempre e comunque come stringhe, per cui è possibile si verifichino errori se non opportunamente controllati dalla procedura (o programma...).

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #31 il: 07 Giugno 2008, 11:05:30 »
Proverò a fare qualche giochetto con le array, anche se non ho capito tanto il discorso del "riferimento"... :-)

Non uso Sqlite, anche se mi state incuriosendo perché ne parlate tutti.
Preferisco mySql, ma solo perché il mio interesse è in qualcosa di portabile e mi pare che questo DB sia parecchio diffuso
Saluti a tutti

Mario

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #32 il: 07 Giugno 2008, 11:07:49 »
@darth: il codice che ho messo è solo un esempio. Anche io preferisco mettere un prefisso che mi faccia capire su cosa sto lavorando :-)
Interessante il codice che hai messo
Saluti a tutti

Mario

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #33 il: 08 Giugno 2008, 18:41:47 »
Uff... niente da fare, non riesco a impostare il valore della spinbox con il campo contenuto del database: continua a dirmi che il valore atteso è "integer"ma che riceve "null"
Ho provato a controllare il null, ma in questo caso si limita a eseguire sempre quel ramo del codice.
Provo a farvi vedere cosa ho scritto:

Codice: [Seleziona]

sql = "Select * from Clienti where Codice = " & Right(tvMenu.Current.Key, 6)
hData = db.Exec(sql)

    Codice.Text = hData!Codice
    RagioneSociale.Text = hData!RagioneSociale
    Indirizzo.Text = hData!Indirizzo
    Localita.Text = hData!Localita
    CAP.text = hData!CAP
    Provincia.text = hData!Provincia
    CodiceFiscale.text = hData!CodiceFiscale
    PartitaIva.text = hData!PartitaIva
    sb_Tariffa.Value = Val(hData!Tariffa)
    sb_Pagamento.Value = Val(hData!Pagamento)


Quello che non capisco è perché il secondo campo, che è anche una spinbox, non mi dà errore...
Nel database mysql, i due campi sono configurati come decimali e "not null", quindi quel "null" proprio non lo capisco...
Saluti a tutti

Mario

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #34 il: 09 Giugno 2008, 09:21:24 »
Ho provato cambiando il tipo di elemento da Spinbox a campo semplice, e (ovviamente) funziona benissimo...
Per adesso lo lascio così, prima o poi capirò...
Saluti a tutti

Mario

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Utilizzo di DB: differenze con RPG
« Risposta #35 il: 09 Giugno 2008, 16:53:01 »
Tanto per dire... per caso il valore contiene decimali ?

La SpinBox non accetta decimali, solo valori interi. Inoltre controlla le proprietà di minimo e massimo.

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #36 il: 09 Giugno 2008, 20:01:01 »
Uhm... il valore contiene decimali, ma sono sempre a zero... probabilmente è questo il motivo, però anche l'altro campo (Trasferta) contiene decimali, per cui mi sembra strano...
Comunque ho risolto usando il campo normale, e va benissimo :-)
Adesso ho altri problemi, ma poco per volta il pargolo sta venendo alla luce :-)
Saluti a tutti

Mario

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #37 il: 12 Giugno 2008, 14:36:15 »
Allora, ho provato a seguire gli esempi che mi avete dato, ma evidentemente ho qualche lacuna di base. Penso sia meglio capire bene, altrimenti potrò solo continuare a fare le cose copiando e senza capire :-)

Dunque, vi spiego dove sono arrivato e cosa vorrei fare.
Sono riuscito a preparare il programma per la gestione dei Clienti e dei Progetti, legati tra di loro, con i vari frame che appaiono e scompaiono abbastanza senza problemi.
Adesso vorrei fare il passo successivo, e preparare un pannello concepito in questo modo:
nella parte superiore un elenco dei dati già presenti nel file "Interventi";
nella parte sottostante i vari campi dei file.
All'inizio vorrei vedere tutti i record del file sopra, e sotto i campi vuoti.
Se scrivo dei dati sotto, premendo "aggiungi" i dati (dopo il controllo) devono andare nel DB, e quindi questo deve essere aggiornato e ricaricato.
Se faccio doppio clic su una riga in alto, i dati devono essere portati sotto, pronti per la modifica.

Forse è un sistema poco "bello", ma è un metodo abbastanza standard su AS/400 e mi piacerebbe (per ora) utilizzare questo sistema.

Quello che veramente non riesco a comprendere è l'uso dei DataSource e degli altri oggetti relativi alla manipolazione dei dati (DataBrowser, GridView, e compagnia bella).

Grazie a tutti :-)
Saluti a tutti

Mario

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Utilizzo di DB: differenze con RPG
« Risposta #38 il: 12 Giugno 2008, 16:27:34 »
Uhm, dopo qualche simpatica bestemmia (tanto ormai il posto in paradiso me lo sono giocato...) sono venuto a capo di qualche cosa.
Innanzi tutto, la gerarchia datasource > databrowser si imposta con il "disegno" dell'interfaccia, e questo è abbastanza facile.
Una volta aperta la connessione con conn.open, è sufficiente indicare al datasource il nome della tabella (presente nel data base appena aperto) alla quale si desidera fare riferimento, con il comando
Codice: [Seleziona]

datasource.table = "Interventi"

A questo punto, indicando nel Databrowser le colonne da visualizzare (non ho capito come fare per vedere tutte le colonne, ma ci arrivo prima o poi), queste si vedono automagicamente :-)
Codice: [Seleziona]

databrowser.columns = ["DataIntervento", "Progetto", "TempoImpiegato"]


Bene, a questo punto funziona abbastanza bene e velocemente.
Ho anche cominciato a capire come funzionano i campi "datacontrol", e mi sembrano furbi e comodi.

Ma ho un altro problemino: il campo "progetto" vorrei inserirlo in una combobox, e ho visto che ne esiste un tipo proprio fatta per questo caso, che si chiama "datacombo".
Ma come faccio a metterci dentro l'elenco dei dati validi? Ho provato con la codifica normale, ma non funzia...
Un altro campo è di tipo checkbox (si/no, o booleano).
Come faccio a metterlo in un datacontrol?

Altra cosetta, piccola: se il file è vuoto, è normale che il programma vada in errore?

Quante domande, eh?
Però come vedete riesco anche ad arrangiarmi :-)
Saluti a tutti

Mario