Newsgroup: it.comp.lang.visual-basic
Titolo: ?Recordset e DB relazionali

Salve a tutti...
Ho un problema che non riesco proprio a risolvere nonostante che sia da
circa due settimana che giro di qua e di la per la rete a cercare
informazioni specie nei siti consigliati da questo ng
Premetto che non sono un superesperto di DB relazionali, anzi mi ci stò
avvicinando piano piano...
Il mio problema è questo:
Ho due tabelle:
Prodotto
-----------
IDProdotto
Nome
Prezzo
IDTipologia
e la tabella
Tipologia
----------
IDTipologia
Nome
Codice
Le due tabelle sono collegate tramite IDTipologia in Access 2000 e
l'integrità referenziale è impostata su Aggiungi campi correlati a catena e
elimina record collegati a catena.
Il mio problema è questo:
Non riesco ad aprire un recordset che mi permetta di eliminare  un prodotto
oppure di aggiungerne uno selezionando anche un valore valido per
IDTipologia
Qualcuno sa come aiutarmi?
Vi ringrazio e faccio gli Auguri di Natale a tutto il NG!
PS Scusate se sono un principiante!

 ha scritto
| Prodotto
| -----------
| IDProdotto
| Nome
| Prezzo
| IDTipologia
|
|
| Tipologia
| ----------
| IDTipologia
| Nome
| Codice
|
| Le due tabelle sono collegate tramite IDTipologia in Access 2000 e
[...]
| Non riesco ad aprire un recordset che mi permetta di eliminare  un prodotto
| oppure di aggiungerne uno selezionando anche un valore valido per
| IDTipologia
Quando hai creato la relazione, hai preso il campo [Tipologia].[IDTipologia] e lo hai trascinato sul
campo [Prodotto].[IDTipologia]? O hai fatto il contrario?

 campo [Prodotto].[IDTipologia]? O hai fatto il contrario?
Ho preso il campo  [Tipologia].[IDTipologia] e l'ho trascinato sul campo
[Prodotto].[IDTipologia]
Il problema è inoltre che quando premo il bulsante che dovrebbe eseguire
l'inserimento mi appare anche un errore run-time che dice: " '91' ---
variabile oggetto o variabile del blocco with non impostata"
Ho usato come adodc un componente visuale adodc1, devo crearmelo manualmente
o può andare bene anche quello?
Grazie mille per esserti interessato!

 ha scritto
| Il problema è inoltre che quando premo il bulsante che dovrebbe eseguire
| l'inserimento mi appare anche un errore run-time che dice: " '91' ---
| variabile oggetto o variabile del blocco with non impostata"
|
| Ho usato come adodc un componente visuale adodc1, devo crearmelo manualmente
| o può andare bene anche quello?
Potresti postare il codice? Anche se ti sconsiglio vivamente di usare i controlli visuali come
l'adodc... sono poco flessibili...

 l'adodc... sono poco flessibili...
Ho riscritto la procedura senza i controlli visuali ma mi dice che non è
possibile eseguire l'aggiornamento sul recordset:
errore run-time 3251
ti posto il codice di seguito...
Private Sub Command1_Click()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
    conn.Mode = adModeWrite
    conn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Documents
and Settings\Administrator\Documenti\db3.mdb;Persist Security Info=False")
   rs.Open "SELECT Prodotto.Nome, Prodotto.IDTipologia FROM Tipologia INNER
JOIN Prodotto ON Tipologia.IDTipologia = Prodotto.IDTipologia;", conn,
adOpenStatic
   rs.MoveLast
   rs.AddNew
   rs!Nome = Text1.Text
   rs!IDTipologia = CInt(Text2.Text)
   rs.Update
End Sub
Ti faccio inoltre una domanda: con ADO quando voglio eseguire un inserimento
di un record devo crearmi un recordset ma la stringa SQL di apertura del
recordset deve essere di tipo SELECT oppure INSERT INTO??
Grazie Mille e scusami se non ti ho risp prima ma sono rimasto un po' preso
con i pranzi e le cene varie insieme ai parenti!!
Grazie ancora e Buone Feste!!!

 ha scritto
| ti posto il codice di seguito...
|
| Private Sub Command1_Click()
| Dim conn As New ADODB.Connection
| Dim rs As New ADODB.Recordset
|     conn.Mode = adModeWrite
|
|     conn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Documents
| and Settings\Administrator\Documenti\db3.mdb;Persist Security Info=False")
|    rs.Open "SELECT Prodotto.Nome, Prodotto.IDTipologia FROM Tipologia INNER
| JOIN Prodotto ON Tipologia.IDTipologia = Prodotto.IDTipologia;", conn,
| adOpenStatic
No! Se la tua intenzione e' di aggiungere record, NON devi eseguire una query SELECT! Apri
direttamente la tabella a cui desideri aggiungere il record:
rs.Open "[Prodotto]", conn, adOpenStatic
|    rs.MoveLast
|    rs.AddNew
|    rs!Nome = Text1.Text
|    rs!IDTipologia = CInt(Text2.Text)
|    rs.Update
| End Sub
|
|
| Ti faccio inoltre una domanda: con ADO quando voglio eseguire un inserimento
| di un record devo crearmi un recordset ma la stringa SQL di apertura del
| recordset deve essere di tipo SELECT oppure INSERT INTO??
Quando inserisci nuovi record NON devi fare una query SELECT! Le query SELECT servono per
interrogare il database sui dati esistenti, e non per inserirne di nuovi. Per effettuare
l'operazione di inserimento puoi operare in l'SQL con la query INSERT INTO, oppure aprire la tabella
ed usare l'oggetto RecordSet ed il metodo AddNew
| Grazie Mille e scusami se non ti ho risp prima ma sono rimasto un po' preso
| con i pranzi e le cene varie insieme ai parenti!!
Idem per me... :))
| Grazie ancora e Buone Feste!!!
Altrettanto!