|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2001
Messaggi: 165
|
[vb] Aiutooooooooooooooo
come posso fare a collegare due DB in modo che entrambi puntino allo stesso record?
vi spiego meglio la situazione, ho un'oggetto data ed un adodc che puntano allo stesso db e alla stessa tabella, con l'adodc controllo una datagrid e con l'oggetto data controllo una serie di textbox e di Checkbox e dei dbcombo, ho provato ad utilizare solo l'adodc per gestire tutto ma pultroppo il dbcombo mi visualizza il contenuto del campo a cui l'ho assegnato ma non mi visualizza i dati contenuti in un secondo archivio che mi servono per permettere la scelta fra i vari elementi (perchè?? non lo capito, anzi se potete dirmelo voi evito di mettere due oggetti per gastire lo stesso db). ora come devo fare per far andare in sincrono i due db? per esempio l'ogetto data punta il quinto record ed andando a vedere la datagrid (che sfrutta l'adodc) ha selezionato il quinto rigo. non so se mi sono spiegato chiaramente comunque vi chiedo di darmi una mano!! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Mmmmm in effetti non ho capito bene
Vado ad intuito... quello che vuoi e' visualizzare + campi di una tabella all'interno di una datacombo? Beh, se e' cosi', scordatelo Si puo' fare ma non automaticamente, ti devi creare una piccola funzioncina...ma prima di addentrarmi nell'argomento aspetto una tua conferma, in quanto sarebbe inutile che iniziassi a parlare se non e' quello il problema che hai Bye
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2001
Messaggi: 165
|
hai fatto bene a fermarti dato che il mio problema è di tipo diverso.
innanzitutto grazie per l'interessamento. io riesco benissimo a far visualizare più RECORD all'interno di una datacombo, e riesco anche a far visualizare come "selezionato" il valore di un campo del record corrente. ciò è quello che voglio fare ma con un' unica differenza cioè che voglio prelevare i dati non da un'ogetto data (cosa che rieco a fare) ma bensì da un oggetto adodc, (il quale mi è indispensabile per il corretto funzionamento di una datagrid che mi visualizza l'intero db) solo che se utilizzo la stessa procedra che utilizzo quando ho due oggetti data non mi visualizza i vari elementi del secondo record che mi permettono di effettuare la scelta. Spero di essere stato un pò più chiaro e spero che possa aiutarmi ciao e grazie |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Scusami se sono particolarmente duro di comprendonio
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jun 2001
Messaggi: 165
|
non sei tu che sei duro di comprendoni sono io che non riesco a spiegarmi bene.
comunque il mio quesito è proprio quello perchè non funziona? eppure nell'help dice che dovrebbe funzionare! comunque grazie ancora per l'aiuto (e per la pazienza che hai avuto nel decriptare il mio post) |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Mi sono imbattuto nel tuo problema quando circa un anno fa ho fatto un programma di fatturazione per una carpenteria.
Dopo aver cercato qua e la' mi ricordo di essermi imbatutto in un comunicato ufficiale di micro$oft che diceva che esisteva un bug nelle datacombo inizializzate tramite adodc che non permetteva di visualizzare + campi contemporaneamente. Il bug non e' risolto nemmeno installando la service pack 5. Sempre dove ho letto tale notizia (non ricordo il link, mi spiace) veniva descritto come ovviare al problema. Bisogna in soldoni costruirsi a mano un recordset avente un campo, chiamiamolo "descrizione", di tipo testo nel quale inserisci una stringa ottenuta dalla concatenazione dei vari campi del db che ti interessa visualizzare. Poi al datacombo associ come origine dati il recordset. Sono a digiuno di Vb, e ora come ora non mi ricordo come fare esattamente,ma la funzione ce l'ho scritta a casa. Stasera la posto, cosi' puoi darle un'occhiata. Bye
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jun 2001
Messaggi: 165
|
grazie allora aspetto il tuo post di questa sera
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Bene la funzione è questa:
Private Function copyRecordSet(rs As ADODB.Recordset) Dim rsCopy As New ADODB.Recordset Dim saveBookmark As Variant ' se il recordset è vuoto, allora non faccio niente If rs.EOF = True And rs.BOF = True Then Exit Function End If ' creo la struttura del campo: stringa,50 caratteri, aggiornabile With rsCopy.Fields .Append "Descrizione", adBSTR, 50, adFldUpdatable End With ' apro il recordset rsCopy.Open ' salvo la posizione corrente nel recordset sorgente saveBookmark = rs.bookmark ' copio i recordset rs.MoveFirst Do Until rs.EOF rsCopy.AddNew rsCopy("Descrizione") = "N°" & rs!numero & " del " & rs!DataEmissione rs.MoveNext Loop ' recupero la posizione del record sorgente rs.bookmark = saveBookmark Set copyRecordSet = rsCopy End Function Vuole in input un recordset (passagli quello dell'adodc che stai usando, non spaventarti se c'è scritto ADODB.recordset...). Il trucco è crearsi un recordset "rscopy" contenente un solo campo "descrizione" di tipo stringa. Una volta creato il recordset, salvo la posizione in cui mi trovo sul db sorgente, mi sposto al primo record del suddetto ed inserisco in rscopy dei nuovi record aventi il campo stringa inizializzato col valore dei campi che mi in teressano. Una volta passati tutti i record del db sorgente mi riposiziono al record dove mi trovavo prima di iniziare la copia e quindi restituisco il nuovo recordset che dovrà essere assegnato alla proprietà rowsource della datacombo. Ora il problema è che il campo visualizzato nella datacombo è "descrizione" che non ha collegamenti col tuo db. Resta cmq il fatto che quando selezioni una voce dalla datacombo l'indice di tale voce corrisponderà all'indice del record che hai usato nella tabella per costruirti la stringa stessa: quindi puoi facilmente ricollegarti al campo o al record che ti serve aggiornare. Un ultima cosa: naturalmente se vengono effettuati dei cambiamenti nella tabella da dove prelevi i dati per creare "descrizione", dovrai richiamare la funzione per aggiornare la lista della datacombo stessa. Spero di essere stato utile Bye
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jun 2001
Messaggi: 165
|
mille grazie per il chiarimento
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jun 2001
Messaggi: 165
|
scusa seti disturbo magari puoi aiutarmi!
ho la datagrid di prima, con il relativo adodc e voglio che la datagrid mi visualizzi solo i campi che il valore di un determinato campo sia come dico io, come posso fare??? P.S. per la db combo mi sono inventato una cosa da far rizzare i capelli anche al programmatore più inesperto, ho sovrapposto alla parte destinata al testo della dbcombo una casella di testo lasciando fuori solo il pulsantino, così quando eseguo il programma sembra una normale dbcombo senza dover fare tutta quella trafila, dato che erano parecchie le dbcombo nel programma |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Se ti serve visualizzare nel datagrid solamente le righe che hanno un determinato valore in un determinato campo, allora devi usare la proprietà filter dell'oggetto recordset contenuto nell'adodc che usi per popolare la datagrid.
Attento però perchè il filtro sui dati si estenderà a tutti i controlli che usano tale adodc (mi spiego meglio: se hai 2 datagrid che utilizzano lo stesso adodc e vuoi che uno filtri i dati e l'altro no, se imposti la proprietà filter sull'adodc purtroppo ti troverai coi dati filtrati su entrambi i datagrid). Per ovviare a questo problema potresti crearti un oggetto recordset al quale assegni il recordset dell'oggetto adodc Una cosa del tipo: dim rs as ADODB.Recordset Set rs = Tuo_ADODC.Recordset Set rs.Filter = "Nome = 'Pippo'" In questo modo saranno 'visibili' solo i record che hanno il campo nome uguale a 'pippo'. Quindi assegni al datagrid il recordset che ti sei creato. Set datagrid.DataSource = rs In ogni momento puoi cambiare il filtro assegnando una nuova stringa di condizioni. Per togliere qualsiasi filtro basta impostare filter a "" , cioè alla stringa vuota. Occhio ai valori che inserisci nel filtro. Mi pare che le stringhe vanno tra apici, mentre le date ad esempio vanno tra #02/12/2002# . Controlla l'help per vedere i simboli adatti per ogni tipo di dato (putroppo la mia memoria limitata mi impedisce di ricordarli). Bye
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jun 2001
Messaggi: 165
|
Sei GRANDISSIMO
[color=red] [color] L'ho provato e funziona alla perfezione |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jun 2001
Messaggi: 165
|
per caso ti ricordi come si fanno a passare i parametri per variabile
ad esempio: datPrimaryRS.Recordset.Filter = "alimentari = true" è senza variabili ma utilizando il campo ed il valore richiesto datPrimaryRS.Recordset.Filter = "text1.text = text2.text" in modo da poter inserire dal programma in esecuzione il campo ed il parametro, solo che così come l'ho scritto non funziona grazie |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Quote:
[email protected] Risponderò molto più in fretta. Ora scappo, bye
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Ecco, oggi ho piu' tempo.
Allora fare quello che ti serve e' estremamente semplice. DIM s AS Sting s = "text1.text = " & text2.text datPrimaryRS.Recordset.Filter = s Bye
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:43.


















