Newsgroup: it.comp.lang.visual-basic
Titolo: [Vb.net][definire una procedura che ha come parametri i campi di tabella all'interno di un database]

Salve a tutti voi,
Sto cercando di scrivere delle estensioni di controlli comuni (come
listview e ComboBox) che gestiscano il BindingSource tramite
OleDbAdapter.
ho gia scritto qualche metodo di lettura delle query, ed adesso mi
cimentavo sull'aggiunta di rk sulla listview ke permettesse allo
stesso tempo di aggiornare i dati all'interno della tabella dati
gestita dal controllo.
Ho ben chiare le idee su come gestire tutto ciò: trovo qualche dubbio
invece su come sia possibile realizzare una procedura che abbia come
parametri i campi di una tabella.
Esempio:
'il mio bel controllo con metodo che carica  i risultati della query
sulla lista.
AdoDbListView1.LoadList("Select Nome, Cognome, Telefono FROM
Rubrica,"C:\prova.mdb")
'vorrei che i parametri del metodo rkAdd siano i seguenti.
AdoDbListView1.rkAdd(Nome as string, Cognome as string, Telefono as
string)
'se la query invece era la seguente:
AdoDbListView1.LoadList("Select Nome, Cognome, DataNascita FROM
Rubrica,"C:\prova.mdb")
'il metodo ha i seguenti parametri
AdoDbListView1.rkAdd(Nome as string, Cognome as string, DataNascita as
Date)
naturalmente il tipo di dati del parametro cambia a seconda del tipo
di dati del campo associato.
mi kiedevo se conosco sia il nome che il tipo di dati dei campi della
tabella come posso far in modo che vengano associati come parametri di
un metodo???
grazie per l'attenzione
   Daniele

Caro Daniele, temo che come voglia fare tu sia impossibile. E' invece
possibile specificare un metodo del tipo
ListViev.rkAdd(Parameters() as Object)
E' impossibile infatti cambiare la definizione a livello di runtime,
almeno nel modo in cui vuoi fare te. Probabilmente, ridefinendo
l'oggetto nel Common Language Runtime, potrebbe essere possibile, ma
potrei tranquillamente stare scrivendo una cretinata. Il metodo più
sicuro è quello dell'array di oggetti, meglio se associati a un
descrittore di tipo:
public enum ElementType
{
               etVarChar = 0,
               etMoney = 1
};
public class Element
{
Maui ha scritto:



Caro Daniele, temo che come vuoi fare tu non si possa fare, almeno nel
termine stretto del linguaggio (ovvero senza mettere in mezzo il CLR).
Ti consiglio:
rkAdd(Elements as Object()) ' Sintassi Vb
rkAdd(Object[] Elements) ' Sintassi C#
Dove potresti persino creare una classe generica Elements
public class Elements
{
           private int iElementType;
           private Object objValue;
           public int Type
           {
                     get
                     {
                               return this.iElementType;
                      }
           }
           public Object Value
           {
                       get
                       {
                                return this.objValue;
                       }
            }
           public Element(Object Value, int Type)
           {
                     this.objValue = Value;
                     this.iElementType = Type;
           }
}
Potresti persino overridare il metodo ToString() in modo da poter
visualizzare una stringa di testo dal contenuto da te voluto (ad
esempio il tipo di dato, oppure una rappresentazione stringa del dato
inserito).
Un'array di classi simili avrebbe lo stesso utilizzo del tuo metodo,
perchè all'interno del dato c'è anche indicato il tipo, e quindi il
programma sarebbe in grado di eseguire i cast appropriati da Object al
dato nativo.
Spero di esserti stato di aiuto.
(PS: Ma lol!)

 - Mostra testo tra virgolette -
PS: Scusate per il doppio messaggio (ho premuto male il TAB sul
browser) e sul fatto che ho usato codice C# su visual-basic, ma in
questo caso l'esempio calzava più l'idea.

alex.m...@gmail.com
 ha scritto:

Grazie del consiglio ale, proverò a costruire il metodo seguendo il
tuo consiglio.
Ps: Ma AriIol!!