Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-10-2002, 20:10   #1
visodont
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
visodont è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2002, 14:06   #2
cisky
Member
 
L'Avatar di cisky
 
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 ...
Nel tuo caso ti da' errore perchè VBi si apetta di trovare un oggetto che ha un metodo (Una sub o una function) es: Index,movefirst (ecc..) MA LA VARIABILE NON E' UN OGGETTO ... quindi si verifica un errore!!!!!!!
cisky è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2002, 22:58   #3
visodont
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]
visodont è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2002, 00:16   #4
tas
Senior Member
 
L'Avatar di tas
 
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
... funzione che potrebbe essere utilizzata così:
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
tas è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2002, 00:47   #5
visodont
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]
visodont è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2002, 14:03   #6
cisky
Member
 
L'Avatar di cisky
 
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
cisky è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2002, 23:28   #7
visodont
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
visodont è offline   Rispondi citando il messaggio o parte di esso
Old 31-10-2002, 14:08   #8
cisky
Member
 
L'Avatar di cisky
 
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
cisky è offline   Rispondi citando il messaggio o parte di esso
Old 31-10-2002, 15:20   #9
cionci
Senior Member
 
L'Avatar di cionci
 
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...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 31-10-2002, 21:00   #10
visodont
Member
 
Iscritto dal: Jun 2001
Città: Roma
Messaggi: 142
Grazie mille, proverò !
Grazie ancora.
Zeno Pagliai - Visodont
visodont è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
Vodafone annuncia la dismissione di un s...
Stiga lancia i nuovi robot tagliaerba co...
Bullismo e cyberbullismo, Keenetic lanci...
Con AI Skills Checker Bitdefender mette ...
E-bike giapponese con 1.000 km di autono...
Un eVTOL con cui basta saper andare in b...
Dal mercato cinese al mondo: HONOR firma...
Sovranità digitale: l'UE sperimen...
Accesso alla memoria su Windows 11 solo ...
iPhone 18 Pro Max con batteria da oltre ...
Windows 11, cali di prestazioni sulle GP...
Un altro iPhone economico è in arrivo a ...
The Grand Tour 2026: ecco chi saranno i ...
Dai display alle soluzioni: Samsung tra ...
Ruba gli account Snapchat di quasi 60 do...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:02.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v