Inserimento dati su tabelle con relazioni

mercoledì 20 gennaio 2010 - 00.57

nikkysixx Profilo | Junior Member

Salve a tutti,avvicinandomi da poco ai db, ho un dubbio basilare su vb.net e sui database in generale,cmq vi spiego la situazione ho 2 tabelle

Libro (isbn,nome,id_distributore) dove isbn è la chiave primaria

Distributore(id,nome) dove id è la chiave primaria

Le due tabelle sono collegate in relazione uno a molti con chiave esterna distributore.id

Nel mio programma vb ho importato come origine dati le due tabelle che visualizzo correttamente

Il problema è l inserimento dati da parte dell utente.Come creare un input che aggiorni entrambe le tabelle separate? ovvero come collegare libro.id_distributore e distributore.id nascondendo il tutto all utente?

In allegato ho messo l esempio realizzato sinora,se qualcuno potesse darmi una mano gliene sarei infinitamente grato

Grazie

TOPOAMORE Profilo | Expert

Ciao,

Considerato che la tua insert la crei a livello di programmazione e che quindi rimarrà sempre trasparente per l'utente.

Incomincia con il creare una combobox con i nomi degli autori inseriti in precedenza e una textbox libera per inserire i mancanti entrabi selezionabili tramite radio(o uno o l'altro)

dopo di che crei tante text box per inserire i dati sui libri.

Sul tasto salva va a fare le tue insert dove andrai:
1) preleva l'id dell'autore se e gia esistente e lo inserirai come parametro per l'inserimento del libro.
2)inserire l'autore,se noon presente nella combobox, e prelevare l'ultimo id inserito (tramite la funzione "SELECT @@IDENTITY from nomeTabella") per poi passarlo, come sopra , alla insert per inserire il libro

Se hai dubbio problemi posta.

ciaoooo

nikkysixx Profilo | Junior Member

Ci provo e ti dico come procede,nel frattempo essendo un novizio, aspettati domande cretine ^_^
La combobox ora provo a farla,ma non capisco la frase

"una textbox libera per inserire i mancanti entrambi selezionabili tramite radio(o uno o l'altro)"

E poi cosa intendi con @@identity???

Nella tabella editore,c è un ID tipo numerico...dovrei farlo forse autoincrementante?

TOPOAMORE Profilo | Expert

In pratica devi far in modo che ci sia un elenco di autori esistente (la combobox) e una casella libera dove aggiornare il db con autori non ancora esistenti (la textbox) in pratica la radiobutton va a disabilitare o la combobox o la textbox in base alla scelta delle radio. Questo è il metodo piu semplice c'e' ne sono altri ma incomincia con questo.

la stringa "SELECT @@IDENTITY from nometabella" restituisce l'ultimo id inserito nella tabella. Ma parleremo dopo di questo incomincia a progetare la pagina come detto o in un modo a te piu consono poi vedremo il seguito

Facci sapere
ASP 2.0 - VB 2008

nikkysixx Profilo | Junior Member

Un paio di premesse,l applicazione è un winform creato con vb2008 e database access mdb

Guarda un primo problema consiste proprio nell inserimento dell ID (dichiarato autoincrementante)
Supponendo che io abbia una tabella editore con ID,nome e un parametro in ingresso nella Textbox1

Quando eseguo l istruzione

Dim cmd As New OleDbCommand( _
"INSERT INTO editore (A) " & _
"VALUES (? )", _
nome_connessione)

cmd.Parameters.Add(New OleDbParameter("A", TextBox1.Text))

Ottengo un errore in quanto è necessario specificare un valore anche per l id

Come risolvere il problema?

ti ringrazio per la pazienza :D

TOPOAMORE Profilo | Expert

allora non è autoincrementante o l'hai messo come parametro nella query.

scrivimi la tabella e la query e diamo un'occhiata
ASP 2.0 - VB 2008

nikkysixx Profilo | Junior Member

Tabella editori presente nel file prova.mdb

editori
--------
campi
ID : contatore (Nuovi valori: Incremento, Indicizzato SI,duplicati non ammessi)
nome : testo

Query & Cattura parametro da textbox associate alla pressione di un Button
-----------------------------------------------------------------------------------------
Dim cmd As New OleDbCommand( _
"INSERT INTO editori (nome) " & _"VALUES (? )", _nome_connessione)

cmd.Parameters.Add(New OleDbParameter("nome", TextBox1.Text))



TOPOAMORE Profilo | Expert

modifica cosi

"INSERT INTO editori (nome) VALUES (TextBox1.Text)

fammi sapere
ASP 2.0 - VB 2008

nikkysixx Profilo | Junior Member

Perfetto funziona ,adesso ho nella tabella editore,un nome e un id autoincrementante

La tabella editore è collegata in relazione uno a molti (lato libro) con la tabella libro

Ora dovrei creare delle voci di inserzione per i campi del libro
-ISBN
-Titolo
-Combobox riempita coi valori presenti all interno della colonna nome degli editori (se ho capito bene)

Giusto?

TOPOAMORE Profilo | Expert

Si perfetto.

Quello che ti consiglio di crearti tutte le query lato db e richiamartele lato codice in modo da poterle riutilizzare e soprattutto in termini di prestazioni e molto superiore.
Riempi la tua combobox con i nomi editori.

Dopo di che non ti resta che fare una sola insert per "inserire" il libro.

Ora ti lascio in mani esperte vado a lavoro .

A Piu tardi
ASP 2.0 - VB 2008

nikkysixx Profilo | Junior Member

Ok ^_^

Sono riuscito ad associare il valore della combobox selezionata con il rispettivo id

Creando una combobox (ComboBox1),selezionando
Attività di ComboBox1
Usa elementi associati ai dati
BindingSource relativa alla tabella editore
Visualizza membro - > (relativo all editore)
Membro valore -> id (relativo all editore)

A questo punto durante l inserimento di un libro ho passato come parametro id_editore,il valore ComboBox1.SelectedValue e le tabelle si aggiornano correttamente . Spero di aver fatto tutto correttamente

E ora gli ultimi due dubbi

1)la combobox è possibile farla partire con un valore inizialmente nullo anzichè dal primo selezionato?

2)Ora rimane la questione delle due scelte col radiobutton e l identity

TOPOAMORE Profilo | Expert

bravo...

per far partire con valore nullo aggiungi come prima voce nel db il primo valore con la voce scegli in modo da non doverlo associare a nulla.

La radio ti serve per selezionare tra la combo oppure la textbox.

La combo serve se l'editore esiste gia mentre la text serve casomai si deve inserire un nuovo editore....

se ti e tutto chiaro in comincia a creare questo e poi si va avanti
ASP 2.0 - VB 2008

nikkysixx Profilo | Junior Member

"per far partire con valore nullo aggiungi come prima voce nel db il primo valore con la voce scegli in modo da non doverlo associare a nulla"

non ho capito perdonami,e ci sto provando da un po senza riuscirci

TOPOAMORE Profilo | Expert

Nel db come nome del primo editore metti "Scegli" in modo che comparira' questo al posto del primo valore utilizzabile.

Ricorda di confrontatre la scelta con il valore "scegli" altrimenti potranno essere inseriti libri con l'editore "scegli"

facci sapere
ASP 2.0 - VB 2008

nikkysixx Profilo | Junior Member

Ah ho capito ma come faccio a confrontarlo e a far apparire un avviso "Scegli un editore" nel caso in cui un utente inserisca erroneamente scegli come editore

oddio sembra uno scioglilingua

TOPOAMORE Profilo | Expert

Se il nome editore "scegli" ha id=0 paragone in questo modo prima di dare la insert

if not id=0 then
Codice insert
else
txterrore.text="Attenzione devi scegliere un nome editore"
end if

Questo e un metodo

prova e poi andiamo avanti

Se ho risposto a tutte le risposte e altre domande O.T. accette le risposte e apri un nuovo post cosi piu persone possono aiutarti

ciaoooo
ASP 2.0 - VB 2008

nikkysixx Profilo | Junior Member

Hai ragione grazie infinite per il supporto
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5