Autore Topic: mysql field read  (Letto 1262 volte)

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
mysql field read
« il: 06 Ottobre 2014, 16:14:01 »
Nell'usare mysql una volta fatta la connessione è abbastanza agevole  muoversi, sia in lettura che in scrittura.
Ossia     
               dim MyConn As Connection
               dim  MyRS As Result
               dim query as string
               dim edh As New String[20, 8]
               dim t as integer
               query=Select * from "alunni"
               DD.MyRS = DD.MyConn.Exec(query)
                t = -1
                If DD.MyRS.Available = True Then '
                    Inc t
                   edh[t, 0] = DD.MyRS!id_Is_iscrizioni
                    ..........................................................
               Endif
  Return edh
    In tal modo riesco a leggere tutti i record, ma devo riportare il nome dei vari campi:
        DD.MyRS!id_Is_iscrizioni      è possibile parametizzare l'operazione usando i field                          usando un qualcosa di simile   DD.MyRS............field[0].name???????
giorgio

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: mysql field read
« Risposta #1 il: 08 Ottobre 2014, 21:28:59 »
Puoi utilizzare la classe ResultField.
Il codice seguente lista i campi ed il loro contenuto di pg_database:

Codice: gambas [Seleziona]
Dim oConn As Connection
Dim oResult As Result
Dim oField As ResultField
  With oConn = New Connection
    .Host = "localhost"
    .Port = "5432"
    .Type = "postgresql"
    .Login = "username"
    .Password = "password"
    .Name = ""
    .Open
  End With
  oResult = oConn.Exec("SELECT * FROM pg_database")
  If oResult.Available Then
    For Each oResult
      For Each oField In oResult.Fields
        Print oField.name;; oResult[oField.Name]
      Next
    Next
  Endif
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: mysql field read
« Risposta #2 il: 10 Ottobre 2014, 00:49:29 »
Funziona grazie; Vedo che hai un certa esperienza nell'uso di database, ti chiedo pertanto :
 -dove hai trovato tali notizie nell'uso dei Db con gambas per quanto riguarda i field.
 -Quanto da te proposto, evita di richiamare information schema  e permette di automatizzare il processo di lettura e scrittura di un db; pertanto conviene riporre  la routine da te proposta su un modulo e richiamarla alla bisogna portando i risultati in un form con un return, ma in tal caso dovresti affidare al return due array ofield ed il dato, evitando  possibilmente la doppia
 chiamata....................... sai come fare?
-Posso usare il field anche in insert to?
-E se oltre il Field.name volessi leggere il commento sul campo?
grazie
giorgio
« Ultima modifica: 10 Ottobre 2014, 10:24:57 da giob1642 »

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: mysql field read
« Risposta #3 il: 10 Ottobre 2014, 18:36:45 »
Funziona grazie; Vedo che hai un certa esperienza nell'uso di database, ti chiedo pertanto :
 -dove hai trovato tali notizie nell'uso dei Db con gambas per quanto riguarda i field.

http://gambaswiki.org/wiki/comp/gb.db

Il vantaggio del componente Database di Gambas3, ed anche il suo maggior limite, è l'indipendenza dal motore in uso. Infatti puoi usare gli stessi oggetti con MySQL, PostgreSQL e SQLite, senza preoccuparti di gestire i metodi di accesso ai dati, cioè non devi costruire stringhe sql dedicate per eseguire le query. Se dai un'occhiata alla guida sul wiki ufficiale vedrai che hai a disposizione anche degli oggetti DB.Form che ti permettono di manipolare i dati in modo semplice ed abbastanza velocemente. Questo vale se non hai esigenze particolari, quali ad esempio utilizzare trigger o constraint.

La cosa che in assoluto meno mi piace del componente Database è il fatto che un Result esiste fino a che la Connessione è attiva (aperta). Se chiudi la connessione il Result risulta non disponibile. Dato che personalmente preferisco il flusso:
1 Apro connessione
2 Leggo/Scrivo i record
3 Chiudo la connessione

Per la gestione dei dati utilizzo delle classi personalizzate per gli oggetti Field - Record - Result
Field: è un oggetto costituito da tutte le proprietà del campo ( Nome, Dimensione, Tipo, Valore, Valore predefinito...)
Record: è un array di oggetti dove vado ad inserire tutti gli oggetti Field, contiene i metodi e le proprietà per gestire inserimento, ricerca, eliminazione e modifica dei Fields
Result: altro array di oggetti dove vado ad inserire tutti i record prelevati dalla query, anche qui inserisco metodi e funzioni per la ricerca e la modifica dei Records


L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: mysql field read
« Risposta #4 il: 10 Ottobre 2014, 19:31:48 »
non vorrei contraddirti ma sostituendo nel tuo esempio:
  For Each DD.MyField In DD.MyRS.Fields 
    Print oField.name;; oField.comments
  Next 
ti renderai conto che non funziona.
Ciò dimostra che la gestione della memoria delle chiamate a db è piuttosto carente e non sempre è possibile di utilizzare il db, almeno con gambas ......................... c'è qualcosa che mi sfugge

giorgio


Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: mysql field read
« Risposta #5 il: 10 Ottobre 2014, 20:47:47 »
  For Each DD.MyField In DD.MyRS.Fields 
    Print oField.name;; oField.comments
  Next 

Presumo che DD.MyField  sia la classe ResultField; allora sarebbe DD.MyField.Name. E soprattutto oField.comments dove l'hai trovato?
 
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: mysql field read
« Risposta #6 il: 11 Ottobre 2014, 01:33:29 »
volevo riportare le stesse variabili che usi nel tuo esempio , ma ho fatto il lavoro a metà.
Scusami  e considera  le seguenti dichiarazioni:
Dim oConn As Connection 
Dim oResult As Result 
Dim oField As ResultField 
Se utilizzi phpmyadmin, ma vale anche per altri db  comments è un campo come name, come tale dovresti poter leggere oField.comments come leggi  oField.name.......................ma non funziona.
giorgio

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: mysql field read
« Risposta #7 il: 11 Ottobre 2014, 14:00:05 »
Sei decisamente fuori strada.
PhpMyadmin è uno strumento, come altri, progettato per amministrare uno specifico motore di database. In quanto tale è in grado di gestire la quasi totalità delle funzioni e delle proprietà di quel motore; essendo Comment una proprietà dei campi di una tabella MySQL ( come potrebbe esserlo di una tabella PostgreSQL), PhpMyadmin è in grado di riconoscerla e gestirla.

Diversamente Gambas mette a disposizione un Layer indipendente, il componente gb.db, che permette di utilizzare i principali motori di database, MySql, PostgreSQL e SQLite, senza che ti debba preoccupare di scrivere codice specifico. Il grosso vantaggio di questa soluzione è la possibilità di sviluppare un applicativo che possa essere installato all'interno di una rete con un Server MySql o su un PC stand-alone utilizzando SQLite, senza modificare una riga di codice.
Ovviamente questo comporta dei limiti. Uno dei quali è la impossibilità di gestire tutte le specifiche di tutti i DB Server.
Veniamo al codice che ti ho postato; la riga
Codice: gambas [Seleziona]
Dim oField as ResultField
altro non fa che creare una istanza della classe ResultField.
tale classe, nativa di Gambas, non corrisponde esattamente al campo di una tabella MySql, ma una sua rappresentazione e non possiede tutte le proprietà che sono specifiche del campo di MySQL.
Se dai un occhio alla documentazione del componente al link che ti ho postato precedentemente vedrai quali sono le proprietà che puoi gestire, Comments non è fra esse.
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: mysql field read
« Risposta #8 il: 11 Ottobre 2014, 16:02:15 »
giusto ma allora? ...................dovrei riscrivere il componente od utilizzare una doppia chiamata al database, chiamando la tabella ed ottenere  le sue specifiche chiamando information schema?
 Non credere che sia solo un inutile gusto poter disporre di un field  con tutte le sue proprietà e ciò per  tutti i campi ;mi spiego:
Supponiamo che stai facendo un prog con qualche decine di tabelle con frequenti chiamate al db; la linea di comment può essere utilizzata per preparare una videata di input come in fig. ove i textbox hanno la dimsnsione max  dei vari field ed additittura sul textbox pruò porsi un combobox con un altra tabella ove per es scegliere per es. (sig,dott,spett...............); e questo è solo uno dei modi in cui usare field.comments.
Il lavoro triplicherebbe ed anche i tempi d'accesso alle varie tabelle.
giorgio

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: mysql field read
« Risposta #9 il: 11 Ottobre 2014, 16:59:26 »
Supponiamo che stai facendo un prog con qualche decine di tabelle con frequenti chiamate al db; la linea di comment può essere utilizzata per preparare una videata di input come in fig. ove i textbox hanno la dimsnsione max  dei vari field
Questo vale solo se disegni la maschera al volo, cioè disegnando di volta in volta i controlli sulla base della tabella cui accedi; se prepari la maschera dall'ide, posizionando i controlli all'interno di esse, puoi stabilire la dimensione massima del testo di ogni textbox sapendo quale sia la dimensione massima del campo corrispondente.
ed additittura sul textbox pruò porsi un combobox con un altra tabella ove per es scegliere per es. (sig,dott,spett...............)

ma il titolo (sig,dott,spett...) è contenuto in un campo di altra tabella o corrisponde al commento di quel campo? Credo sia il contenuto del campo, altrimenti l'utente non potrebbe aggiungere nessun nuovo titolo e questo ti costringe a prevedere ogni possibile alternativa, quindi puoi popolare il combobox con i valori del campo titolo.

giusto ma allora? ...................dovrei riscrivere il componente
lo vedo un lavoraccio e anche inutile.

L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: mysql field read
« Risposta #10 il: 11 Ottobre 2014, 19:28:56 »
non sono d'accordo; tuttavia sto provando a realizzarlo a modo mio.
Quando l'avrò finito una t'invierò una copia principalmente perche tengo in modo particolare al tuo giudizio.

giorgio