PDA

Visualizza versione completa : Origine record diverse.


Fast-M
24-10-2004, 16.43.49
Salve, se in access ho una maschera con due text box,posso usare il contenuto della prima text box per aggiungere un record ad una tabella e il contenuto della seconda text box per aggiungere un record ad un'altra tabella?
Praticamente ho notato che access mi fa associare l'origine record della maschera al più ad una tabella, quindi poi entrambe le text box possono essere associate a campi diversi, ma della stessa tabella che fa da origine record alla maschera che le contiene.
Ho pensato a creare due query di accodamento sulle due tabelle, ma il problema è lo stesso perchè access mi fa associare la maschera al più ad una query come origine record?!
Come faccio?
Grazie in anticipo!
:rolleyes:

Fast-M
25-10-2004, 02.02.27
Allora, provo a rispondermi da solo e magari mi dite solo se è giusto o sbagliato:
Se uso del codice vb che esegue due query di azione e ciascuna aggiunge un record alla rispettiva tabella magari con la pressione di un button, non ho bisogno affatto di preoccuparmi dell'origine record della maschera.
Aspetto una conferma, grazie.
:|

LoryOne
25-10-2004, 08.52.29
Dipende.
I controlli possono essere associati oppure no.
Nel caso specifico la textbox associata è utile per aggiornare/visualizzare il contenuto di una cella.

Fast-M
25-10-2004, 15.24.26
Allora, ho semplicemente implementato il codice nei due eventi Enter delle due text box.
Ho eseguito la stringa della query di azione con il metodo Execute sul db corrente per ciascuna text box:
-------------
Per Textbox1:
----------------------------------
Private Sub Text1_Enter()
Dim db As Database
Dim rs As Variant
Dim intMax As Integer
Set db = CurrentDb()
Set rs = db.OpenRecordset("select Tabella1 FROM [Tabella1]")
rs.MoveLast
intMax = rs.RecordCount
db.Execute ("INSERT INTO Tabella1 Campo_ID,Campo2,Campo3,Campo4,Campo5)" & _
"Select " & intDato & ",'" & Text1.Text & "','Campo3',Campo4,Campo5 from Tabella1")
End Sub
-------------------------
Per Textbox2:
---------------------------------
Private Sub Text2_Enter()
Dim db As Database
Dim rs As Variant
Dim intMax As Integer
Set db = CurrentDb()
Set rs = db.OpenRecordset("select Tabella2 FROM [Tabella2]")
rs.MoveLast
intMax = rs.RecordCount
db.Execute ("INSERT INTO Tabella2 Campo_ID,Campo2,Campo3,Campo4,Campo5)" & _
"Select " & intMax & ",'" & Text2.Text & "','Campo3',Campo4,Campo5 from Tabella2")
End Sub
---------------------------
Premendo enter dopo avere inserito il dato nella prima text box funziona e aggiunge il record alla Tabella1 e il controllo passa alla Textbox2. Inserendo il dato anche in questa e premendo enter aggiunge un nuovo record, ma in corrispondenza del valore della Textbox2 non compare il dato che è appena stato immesso?!
E' incredibile perchè è tutto identico alla prima?!
Perchè nella prima funziona tutto e nella seconda no?
:o
Aiutooooo!
P.S.Qual'è il tipo di dato dell'oggetto che uso per accedere al recordset ?
Ho provato come RecordSet ma mi dice che il tipo non corrisponde e ho dovuto dichiararlo come Variant :|

Fast-M
25-10-2004, 20.15.54
Ho risolto!
Bastava associare il codice all'evento LostFocus.
Evidentemente l'evento Enter crea problemi con le tabelle collegate esterne.
Il problema dei tipo Variant resta comunque in attesa di chiarimento.
:)

LoryOne
26-10-2004, 08.24.26
Sono contento che tu abbia risolto anche se non penso sia qesta

Bastava associare il codice all'evento LostFocus.

la soluzione al problema.
Per quanto riguarda il Recordset, il problema è dovuto al fatto che l'oggetto Recordset è lo stesso sia per DAO che per ADO.

Sebbene le dichiarazioni siano per DAO:
Dim rs As Recordset
e per ADO:
Dim rs As ADODB.Recordset

quando viene eseguito il codice, ACCESS da la precedenza ad ADO.
Per evitare questo spiacevole inconveniente hai giustamente dichiarato la variabile di tipo Variant.
Tutto funziona ma non è corretto.
Devi evitare di creare il riferimento agli ADO ed utilizzare esclusivamente i DAO o viceversa. ;)