Newsgroup: it.comp.appl.access
Titolo: errore in istruzione che popola combobox

ciao; con il seguente blocco posto sull'attivazione della combo, popolo la
stessa con i nomi delle mie tabelle:
Private Sub elenco_GotFocus()
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Set db = OpenDatabase("c:\libri\elencolibri.mdb", False, False, "MS
Access;PWD=ppppp")
For Each tdf In db.TableDefs
If Left(tdf.Name, 4) <> "MSys" Then
    Me!elenco.RowSource = Me!elenco.RowSource & tdf.Name & ";"
End If
Next
Me!elenco.RowSource = Left(Me!elenco.RowSource, Len(Me!elenco.RowSource) -
1)
Set tdf = Nothing
Set db = Nothing
End Sub
con la prima selezione, cioč ad apertura form e passaggio parametri ad un
report per la stampa dei record chiusura report, tutto ok; se faccio
un'altra selezione, a chiusura del report per la seconda volta, mi genera
un'errore di run-time che recita:
Impostazione troppo lunga per questa proprietŕ
e nel debug mi evidenzia la stringa:
Me!elenco.RowSource = Me!elenco.RowSource & tdf.Name & ";"
non riesco a capire il perché
grazie
F
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 F
Valuta se questo metodo è meno complesso:
Inserici nel ControlSource questo:
SELECT MSysObjects.Name FROM MsysObjects _
WHERE (Left$([Name],1)<>"~") AND (Left$([Name],4) <> "Msys") AND
(MSysObjects.Type)=1 _
ORDER BY MSysObjects.Name;
Ciao
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


 
Ho provato a mettere la stringa nell'origine riga e origine controllo ma non
funziona; ho provato a fare cosě ma neanche funziona:
Private Sub elencoesami_GotFocus()
Dim db As DAO.Database
Set db = OpenDatabase("c:\libri\libri.mdb", False, False, "MS
Access;PWD=pppp")
Me!elencolibri.RowSource = "SELECT MSysObjects.Name FROM MsysObjects WHERE
(Left$([Name],1)<>"~") AND (Left$([Name],4) <> "Msys")
AND(MSysObjects.Type)=1 ORDER BY MSysObjects.Name;"
Set db = Nothing
End Sub
grazie


 wrote in message
news:151Z38Z188Z87Y1...@usenet.libero.it
Io ho riprovato per scrupolo ad inserire nell'Origine Riga
di una Combo e di una ListBox questo e funziona:
SELECT MsysObjects.Name FROM MsysObjects WHERE
(((Left$([Name],4))<>"Msys") AND ((MsysObjects.Type)=1)) ORDER BY
MsysObjects.Name;
Saluti.


 F
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------

 grazie
Prego



ha scritto:

Caro Roberto grazie come sempre per le info preziose. Ho fatto come dicevi e
ho trasferito il codice al caricamento della maschera e pare tutto ok.
Adesso sto impazzendo con il passaggio dei dati ad un report per la stampa.
Dando un'occhiata qua e la nei vari post ho trovato una tua soluzione per la
stampa di una query a campi incrociati che secondo me va bene anche nel mio
caso; il codice è:
Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = "libri"
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Dim Conta As Integer
Set qdf = CurrentDb().QueryDefs("libri")
Conta = 1
For Each fld In qdf.Fields
    Me("Etichetta" & Trim(Conta)).Caption = fld.Name
    Me("Etichetta" & Trim(Conta)).Visible = True
    Me("Controllo" & Trim(Conta)).ControlSource = fld.Name
    Me("Controllo" & Trim(Conta)).Visible = True
    Conta = Conta + 1
Next
End Sub
ma ovviamente non funziona. Gli errori sono diversi, vanno da origine record
inesistente, poi invece il report si apre; altro errore che il db è stato
messo in una posizione etc. etc. insomma mi sto perdendo.
Ricapitolando, data una stringa, selezionata da combo, che corrisponde ad
una delle tabelle contenute in un db esterno che apro con la routines di cui
sopra, messa in evento apertura maschera come da te consigliato per popolare
la combo, devo stampare report che riporta il totale dei record.
in sequenza io faccio:
popolo la combo cosi:
Private Sub elenco_GotFocus()
 Dim db As DAO.Database
 Dim tdf As DAO.TableDef
 Set db = OpenDatabase("c:\libri\elencolibri.mdb", False, False, "MS
Access;PWD=ppppp")
 For Each tdf In db.TableDefs
 If Left(tdf.Name, 4) <> "MSys" Then
 Me!elenco.RowSource = Me!elenco.RowSource & tdf.Name & ";"
 End If
 Next
 Me!elenco.RowSource = Left(Me!elenco.RowSource, Len(Me!elenco.RowSource) -
1)
 Set tdf = Nothing
 Set db = Nothing
 End Sub
poi dopo l'aggiornamento combo metto:
Private Sub elencolibri_AfterUpdate()
Dim MyQueryDef As QueryDef
Dim stringa As String
Dim strSQL As String
stringa = Me.elencolibri.Column(0)
strSQL = "SELECT "
strSQL = strSQL & "*"
strSQL = strSQL & " FROM " & "[" & stringa & "]"
strSQL = strSQL & ";"
intrep = stringa
Set MyQueryDef = CurrentDb.CreateQueryDef("libri", strSQL)
DoCmd.OpenReport "libri", acViewPreview, , , acWindowNormal
Set MyQueryDef = Nothing
End Sub
apertura report e questo codice in evento apertura:
Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = "libri"
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Dim Conta As Integer
Set qdf = CurrentDb().QueryDefs("libri")
Conta = 1
For Each fld In qdf.Fields
    Me("Etichetta" & Trim(Conta)).Caption = fld.Name
    Me("Etichetta" & Trim(Conta)).Visible = True
    Me("Controllo" & Trim(Conta)).ControlSource = fld.Name
    Me("Controllo" & Trim(Conta)).Visible = True
    Conta = Conta + 1
Next
End Sub
ma errori già descritti......insomma mi sono incartato come si suol dire
che si puo' fare?
grazie mille
Francesco


 Francesco




Scusami forse hai ragione ma c'e' un po' di casotto. cerco di mettere ordine
dall'inizio del post. Ho un db con una serie di tabelle divise per argomento
che chiameremo libri.mdb; poi ho un altro che contiene le maschere per la
gestione che chiamerò maschlibri.mdb
Adesso veniamo al dunque del problema:
con la famosa combo incriminata io vorrei selezionare il nome tabella che mi
riguarda e stamparne tutti i record in essa contenuti, automaticamente dopo
la selezione della tabella e senza nessun altro passaggio.
Quindo ho pensato di popolare la combo con i nomi tabella così come da tuo
consiglio:
Private Sub Form_Load()
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Set db = OpenDatabase("c:\libri\libri.mdb", False, False, "MS
Access;PWD=pppppp")
For Each tdf In db.TableDefs
If left(tdf.Name, 4) <> "MSys" Then
    Me!elencoesami.RowSource = Me!elencoesami.RowSource & tdf.Name & ";"
End If
Next
Me!elencoesami.RowSource = left(Me!elencoesami.RowSource,
Len(Me!elencoesami.RowSource) - 1)
Set tdf = Nothing
Set db = Nothing
End Sub
e fin quì tutto ok. Adesso nell'evento "dopo aggiornamento" della combo
avevo pensato a questo:
Private Sub elencolibri_AfterUpdate()
Dim MyQueryDef As QueryDef
Dim stringa As String
Dim strSQL As String
stringa = Me.elencolibri.Column(0)
strSQL = "SELECT "
strSQL = strSQL & "*"
strSQL = strSQL & " FROM " & "[" & stringa & "]"
strSQL = strSQL & ";"
intrep = stringa
Set MyQueryDef = CurrentDb.CreateQueryDef("libri", strSQL)
DoCmd.OpenReport "libri", acViewPreview, , , acWindowNormal
Set MyQueryDef = Nothing
End Sub
dove penserei di generare una query di selezione dei record e poi passare il
tutto ad un report per la stampa, che come ti dicevo in precedenza avevo
attinto codice da un post che riguardava la gestione di un report con query:
Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = "libri"
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field
Dim Conta As Integer
Set qdf = CurrentDb().QueryDefs("libri")
Conta = 1
For Each fld In qdf.Fields
    Me("Etichetta" & Trim(Conta)).Caption = fld.Name
    Me("Etichetta" & Trim(Conta)).Visible = True
    Me("Controllo" & Trim(Conta)).ControlSource = fld.Name
    Me("Controllo" & Trim(Conta)).Visible = True
    Conta = Conta + 1
Next
End Sub
detto questo e spero che mi sia spiegato, cominciano gli errori. Quali sono:
avvio la maschera con la combo e dopo la selezione a volte mi da " il db è
stato messo dall'utente Admin in posizione.......ecc. ecc. e si blocca.
Annullo e rifaccio la selezione e tutto funziona ok.
non mi passa una stringa al report per cambiare di volta in volta
l'intestazione del report a seconda dei casi
errore sul Recordset del report che dice di non trovare mentre esso c'e'
Insomma questi sono più o meno gli errori; resta il fatto che forse mi sto
complicando la vita con una cosa che si potrebbe fare in maniera più
semplice e cioè:
dato un db con x tabelle, selezionarne una alla volta e stamparne il
contenuto.
Scusami ancora se ti faccio impazzire ma mi sono incartato per l'ennesima
volta
grazie mille sempre
francesco


 francesco




Fatto; le tabelle era già collegate nel db maschlibri.mdb. Cmq non funziona
il popolamento della combo come tu mi hai detto. Metto la stringa
nell'origine riga e setto come dici ma all'avvio la combo risulta vuota
anche cliccando per vedere la lista e tutto vuoto
ciao
F


 F
Il problema è che sono Linked_Table pertanto il predicato SQL 
le esclude avendo una proprietà differente, se non ricordo male
è Type.
Vado a memoria perchè non ho tempo di fare un test, ma
prova a sostituire (MSysObjects.Type)=1 con 
(MSysObjects.Type)=6 oppure 5
In realtà basta aprire la Tabella di sistema e guardare...!



infatti ho sostituito 1 con 6 e funziona tutto. L'unica cosa che non son
riuscito a fare è assegnare il nome tabella che seleziono da combo come
intestazione del report cioè passargli la stringa e fargliela diventare
intestazione
ciao
F
Ovviamente grazie anche a Roberto


 F
Beh se la Form è sempre aperta mentre apri il Report
metti nell'origine dati di una TextBox nel Report la
Combo:
=Forms!NomeForm!NomeCombo


 @Alex
Ok tutto a posto. Funziona
Adesso mi chiedo.......se la fonte dati dovesse trovarsi in rete (es: il pc
è \\pippo1\libri\libri.mdb) che faccio collego le tabelle direttamente dalla
rete e lascio la routine invariata o devo intervenire anche su di essa?
grazie


 F




ok tutto a posto
grazie sempre per la sopportazione dei neofiti come me
