|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2001
Città: Roma
Messaggi: 142
|
come usare una variabile
Problema per me inrisolvibile in Visual Basic 6. Sono rimasto Bloccato !
____________________________ Public TipoAgenda ----------------------------- Function Legge TipoAgenda = "TbAgenda" 'Se il codice è il seguente : ' ( dopo aver aperto normalmente il database e essendone TbAgenda una tabella ) TbAgenda.index = "Data" TbAgenda.moveFirst ' Tutto Ok Ecc... ecc... ' Ma avendone la necessità, se nel codice sostituisco TbAgenda con la variabile -> TipoAgenda TipoAgenda.index = "Data" ' Mi da errore di runtime 424 ' Necessario oggetto -------------------------------------- 1 ---- Non so cosa fare e dove è l'errore. 2 -- Inoltre, non riesco a trovare dove è l'elenco degli errori sull' help MSDN é un labirinto inestricabile ! Grazie anticipate ! Zeno Pagliai zeno@tiscalinet |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Aug 2001
Città: Gerenzano
Messaggi: 129
|
Credo di aver capito cosa intendi ...
Vuoi utilizzare una variabile stringa per poter gestire le operazioni su un DB (GIUSTO ??? ) Ecco un esempio di come fare: Codice:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sTable As String
Dim sCampo As String
Dim sSql As String
' *** apri prima una connessione al Database [Semplifico x praticità ...]
'
Set cn = New ADODB.Connection
cn.ConnectionString = " ... " ' *** connessione che utilizzi
cn.Open
sTable = "tblNomeTabella"
Set rs = New ADODB.Recordset
Set rs = rs.Open(sTable, cn, adOpenStatic, adLockOptimistic, adCmdTable)
' *** Ora gestisci le operazioni sul tuo recordset ...
' ... Se vuoi utilizzare la stessa tecnica per un campo del recordset.
'
sCampo = "Campo1"
rs.Fields.item(sCampo) = "Quello che vuoi"
ecc ...
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jun 2001
Città: Roma
Messaggi: 142
|
Ancora sulla variabile
RINGRAZIO PER LA SOLLECITUDINE, MA VORREI RIPROPORRE LA DOMANDA PERCHE'
FORSE NON L' HO FORMULATA BENE, DATE LE MIE LACUNE IN VISUAL BASIC 6. PURTROPPO NON HO CAPITO LA TUA RISPOSTA. SCRIVERO IN MAIUSCOLO PER DISTINGUE IL CODICE DAI COMMENTI IL DATA BASE é ACCESS 97 NORMALMENTE USO UNA SOLA AGENDA. MA ORA HO LA NECESSITA' DI AVERNE ( UNA PER VOLTA NATURALMENTE ) , METTENDO IL NOME DELLA TABELLA IN UNA VARIABILE O DOVE NON SO ! SENZA DOVER RISCRIVERE UN CODICE PER OGNUNA DI ESSE: _______________________________________________________ Public TbAgendaA As Recordset Public TbAgendaB As Recordset Public TbAgendaC As Recordset Public TbAgendaD As Recordset ---------------------------------- '''''''''''''''''' QUESTE SOLO LE TABELLE DELLE AGENDE Set TbAgendaA = dBOdont.OpenRecordset("AgendaA") Set TbAgendaB = dBOdont.OpenRecordset("AgendaB") Set TbAgendaC = dBOdont.OpenRecordset("AgendaC") Set TbAgendaD = dBOdont.OpenRecordset("AgendaD") ----------------------------------------------------------------- Set dBOdont = DBEngine(0).OpenDatabase("C:\Visodont") '''''''''' APRE IL DATA BASE -------------------------------------------------------------- Function Agenda ''''''''' CON QUESTO CODICE DI ESEMPIO E FUNZIONA BENE !!!!!! Dim I,Ora as Integer ' MA PER LEGGERE TUTTE LE AGENDE DEVO SCRIVERE TbAgenda.Index = "Data" ' PIU' FUNZIONI CON IL NOME DELLA RELATIVA TABELLA TbAgenda.MoveFirst for I = 1 to 24 ' METTO I VALORI DEI CAMPI SULLA VARIABILE GIORNO(X) Ora(I) = TbAgenda(I) ' LEGGE I CONTENUTI DELLE ORE E QUESTO FUNZIONA CORRETTAMENTE next End Function ______________________________________________ ''''''''''''''''''''' VORREI FARE QUESTO ''''''''''''''''''''''''''''''''''''' ' METTERE ( QUANDO OCCORRE ) IL NOME DELLE TABELLE SU UNA VARIABILE ' PER POTERLE LEGGERE SENZA DOVER RISCRIVERE UNA FUNZIONE PER ' OGNI TABELLA ______________________________________________ Function Agenda Dim I,Ora as Integer Dim TipoAgenda TipoAgenda = "AgendaA" ''''''''''' OPPURE AgendaB OPPURE AgendaC ecc..... TipoAgenda.Index = "Data" '''''''' QUA' DA L' ERRORE RUNTIME 424 necessario oggetto TipoAgenda.MoveFirst for I = 1 to 24 Ora(I) = TbAgenda(I) next End Function _____________________________________________ IL DATA BASE é GIA' APERTO CORRETTAMENTE PERCHE' LO USO ATTUALMENTE CON UNA SOLA AGENDA. COME SPOSTARSI DA UN' AGENDA ALL'ALTRA, ( DA UNA TABELLA ALL' ALTRA ) CON IL DATA BASE APERTO COME SOPRA DESCRITTO ? GRAZIE ANCORA, SPERO PROPRIO DI RISOLVERE QUESTO PROBLEMA CHE E' IMPORTANTE PER ME. Zeno Pagliai - ( Visodont ) [email protected] |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
Se ho capito bene, dovresti avere bisogno di una cosa tipo questa:
Codice:
Public Sub Agenda(rs As Recordset, ora() As Integer)
Dim i As Integer
ReDim ora(1 To 24) As Integer
For i = 1 To 24
ora(i) = rs("Data")
Next
End Sub
Codice:
Public Sub Test() Dim dBOdont As Database Dim TbAgendaA As Recordset Dim TbAgendaB As Recordset Dim TbAgendaC As Recordset Dim TbAgendaD As Recordset Dim ora() As Integer Set dBOdont = DBEngine(0).OpenDatabase("C:\Visodont") Set TbAgendaA = dBOdont.OpenRecordset("AgendaA") Set TbAgendaB = dBOdont.OpenRecordset("AgendaB") Set TbAgendaC = dBOdont.OpenRecordset("AgendaC") Set TbAgendaD = dBOdont.OpenRecordset("AgendaD") 'esempio con agenda A Call Agenda(TbAgendaA, ora) 'esempio con agenda B Call Agenda(TbAgendaB, ora) 'esempio con agenda C Call Agenda(TbAgendaC, ora) 'esempio con agenda D Call Agenda(TbAgendaD, ora) End Sub |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jun 2001
Città: Roma
Messaggi: 142
|
Ancora variabili
No, veramente quello era solo un esempio, io vorrei usare le seguenti linee di codice
sostituendo TbAgendaA, TbAgendaB, TbAgendaA che sono i nomi tabelle del data base già aperto Es.. ______________________ Function Legge TbAgendaA.Index = "Data" TbAgendaA.MoveNExt TbAgendaA.MoveFirst Ecc... End Function ________________ con la variabile TipoAgenda ( che non è il nome di una tabella è una variabile ) nella quale mettere di volta in volta il nome di una tabella e fare le stesse cose, ma usando solamente la funzione legge con i nomi delle tabelle delle diverse agende nella variabile TipoAgenda. Se ad es. metto nella variabile TipoAgenda = "TbAgendaA" Function Legge TipoAgenda.index = "Data" TipoAgenda.MoveNext TIpoAgenda.MoveFirst ecc.... End Function ______________________________ mi dovrebbe legere la tabella TbAgendaA Vi ringrazio per la pazienza ! Cordiali saluti Zeno Pagliai -Roma - Visodont [email protected] |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Aug 2001
Città: Gerenzano
Messaggi: 129
|
SPERO CHE QUESTO CODICE FACCIA AL CASO TUO,la funzione F_Agenda recupera le date da un agenda devi passargli come argomenti il Database,il nome della tabella e l'array delle ore che vuoi recuperare !!!
Codice:
Private Sub Test()
Dim dBOdont As Database
Dim TbAgenda As Recordset
Dim sTabella As String
Dim ora() As Integer
Dim bOK As Boolean
Set dBOdont = DBEngine(0).OpenDatabase("C:\Visodont")
' *** esempio con agenda A
'
sTabella = "AgendaA"
bOK = f_Agenda(dBOdont, sTabella, ora())
If Not bOK Then
' *** Se si è verificato un erorre ...
MsgBox "Errore di recupero dati con tabella " & sTabella
End If
' *** esempio con agenda B
'
sTabella = "AgendaB"
bOK = f_Agenda(dBOdont, sTabella, ora())
If Not bOK Then
' *** Se si è verificato un erorre ...
MsgBox "Errore di recupero dati con tabella " & sTabella
End If
End Sub
Private Function f_Agenda(oDB As Database, ByVal sTblAgenda As String, ByRef ora() As Integer) As Boolean
Dim rs As New Recordset
Dim I As Integer
Dim bRet As Boolean
On Error GoTo lError
' *** Azzero l'array delle ore
ReDim ora(24)
' *** Apro il recordset
Set rs = oDB.OpenRecordset(sTblAgenda)
' *** Recupero i dati
'
rs.Index = "Data"
rs.MoveFirst
For I = 1 To 24
ora(I) = rs(I)
Next
bRet = True
lExit:
' *** Chiudo il recordset
On Error Resume Next
rs.Close
Set rs = Nothing
f_Agenda = bRet
lError:
Resume lExit
End Function
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jun 2001
Città: Roma
Messaggi: 142
|
Ricominciamo
No, chiedo scusa, non mi mandate a quel paese, ma purtroppo anche questa volta non sono riuscito a spiegarmi.
Dimentichiamo tutto quanto scritto prima e ricominciamo da capo come fosse una nuova domanda. Dopo aver aperto un DataBase in VB 6 e tutte le tabelle in esso contenute ( ACCESS ) Invece di spostare il puntatore del record usando il nome della tabella Es.. TbAgenda.MoveNext come faccio ora, Vorrei poter spostare il puntatore o fare qualsiasi altra cosa a quella tabella, sostituendo il nome con una variabile che ne contiene il nome e possa contenere il nome di altre tabelle, quando occorre. Es….. se Agen è una variabile e assegno ad Agen il nome “TaAgenda” ( Agen = “TbAgenda” ) dovrei poter fare : Agen.MoveNext ecc.. invece di TbAgenda.MoveNext Tutto qua. Lo scopo per fare questo è presto detto, vorrei usare una sola funzione per agire su molte tabelle, assegnando un nome diverso alla variabile Agen ogni volta che mi occorre, senza dover scrivere una funzione per ogni tabella. Più di cosi non so cosa dire. Cordiali saluti Zeno Pagliai - visodont |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Aug 2001
Città: Gerenzano
Messaggi: 129
|
Se vuoi assegnare ad una variabile una tabella,(o meglio un recordset) , devi dichiarare la variabile come un oggetto.
x chiarirti le idee, un codice del genere non funzionerà mai: dim rsAgenda rsAgenda = "AgendaA" rsAgenda.Movenext ' *** ERRORE !!! *** ------------------------------------------------------------- Non funziona per 2 o + motivi: 1) Siccome non hai definito il tipo di variabile rsAgenda, di default VB gli assegna un tipo Variant (Cioè puo' essere qualsiasi cosa) ... [e fin qui tutto OK] .... ma se assegni a rsAgenda la stringa "AgendaA" codice:[rsAgenda = "AgendaA"] , la variabile rsAgenda diventa una stringa e non un Oggetto(Recordset). 2) Quando lavori con variabili di tipo oggetto non puoi impostarli con una sintassi 'Normale' ma devi usare l'istruzione SET es: dim rsAgenda set rsAgenda = new Recorset 3) x ritornare al tuo problema, la variabile che identifica le tue tabelle devi dichiararla cosi': dim rsAgenda as recordset set rsAgenda = new recordset rsagenda.open ... ' *** Ecc.. 4) La funzione standard che vuoi creare x gestire le tabelle,deve operare o con un Recordset che tu passerai x Riferimento alla funzione o se vuoi puoi passargli la stringa con il nome della tabella, ma in questo caso devi aprire un recordset X FORZA!!!!! es : Vedi funzione f_Agenda (Nel mio Post precedente!) [in quel caso gli passo il nome della tabella e nella funzione apro e gestisco le operazioni sul Recordset] x FINIRE: in alternativa apri prima il recordset e fai una funzione di questo tipo : private function f_Agenda(byRef rs as Recordset ) [e gestisci tutte le operazioni che vuoi .... ] spero che ti sia chiaro, CIAO |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Beh...meglio passare il nome della tabella ed usarlo nella open del recordset...
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Jun 2001
Città: Roma
Messaggi: 142
|
Grazie mille, proverò !
Grazie ancora. Zeno Pagliai - Visodont |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:02.



















