PDA

View Full Version : [Vb.Net/Access]Inserimento tabella con relazioni


RaouL_BennetH
12-06-2008, 19:27
Buona sera ragazzi :(

Per favore, aiutatemi a capire dove sbaglio :help:

Ho un dannato db fatto con access 97 (non posso cambiarlo purtroppo)

ora, ho una tabella di nome: ColorsCode fatta da due campi:

Code -> Testo - Chiave primaria
ColorName ->Testo

Questa tabella ha una relazione con altre tabelle.

Ora, succede questo:

1) Non riesco ad inserire nulla nella tabella se non direttamente dal db
2) Quando inserisco qualcosa, mi cancella i dati già presenti.

Può dipendere dalle relazioni?

Se si, come si popola una tabella avente relazioni con un'altra?

Grazie mille

RoauL

RaouL_BennetH
12-06-2008, 22:36
Ho fatto qualche piccolo progresso, nel senso che ho capito senz'ombra di dubbio, che senza capire come funzionano le relazioni fra le tabelle non posso riuscire a fare nulla.

Ora, c'è da vb.net un modo che mi permetta di non tenere conto delle relazioni?

Oppure, cosa posso indicarvi come tipi di relazioni per potermi far aiutare ?

Grazie.

RaouL.

RaouL_BennetH
12-06-2008, 22:57
altro piccolo step:

la tabella ColorsCode, ha una relazione uno a molti con la tabella ColorsGroup su questi campi:

ColorsCode.Code 1 --- molti--->ColorsGroup.CodeGroup

ho provato a tradurlo in una insert:



'pseudo-codice
insert into ColorsCode(Code, ColorsName) VALUES('1', 'Red')
insert into ColorsGroup(CodeGroup) VALUES(ColorsCode.Code)



Giustamente... mi dice che non può scrivere in ColorsGroup perchè l'indice o la chiave primaria nn può essere null.... ma allora mi chiedo, come diamine si deve fare?

Plz..... :help:

RaouL_BennetH
13-06-2008, 08:10
altro piccolo passo fatto durante la notte :

Facendo simultaneamente le diverse insert nelle tabelle relazionate.

Solo che succede questo: i dati nel db restano limitatamente alla sessione del programma. Se chiudo e riapro il programma le tabelle del db sono nuovamente vuote :confused: :mc: :muro: :help:

MarcoGG
13-06-2008, 08:49
altro piccolo step:

la tabella ColorsCode, ha una relazione uno a molti con la tabella ColorsGroup su questi campi:

ColorsCode.Code 1 --- molti--->ColorsGroup.CodeGroup

ho provato a tradurlo in una insert:



'pseudo-codice
insert into ColorsCode(Code, ColorsName) VALUES('1', 'Red')
insert into ColorsGroup(CodeGroup) VALUES(ColorsCode.Code)



Giustamente... mi dice che non può scrivere in ColorsGroup perchè l'indice o la chiave primaria nn può essere null.... ma allora mi chiedo, come diamine si deve fare?

Plz..... :help:


Non te lo fa inserire perchè la PK di ColorsGroup è un campo "id" tipo testo o numero non generato automaticamente ( non è contatore, insomma ).
In generale devi prima inserire nella tabella 1 ( nella relazione 1-Molti ) e poi nella tabella/tabelle Molti, ossia nelle tabelle dipendenti.
In soldoni :

INSERT INTO ColorsCode ( Code, ColorName )
VALUES ( '4', 'Yellow' )

INSERT INTO ColorsGroup ( id, CodeGroup )
VALUES ( 'nuovo_ID', '4' )

RaouL_BennetH
13-06-2008, 09:05
Grazie per la risposta :)

Si, come dicevo prima, ci ero arrivato a questa soluzione.

Ciò che non riesco assolutamente a spiegarmi è che fin quando il programma è in esecuzione, riesco a vedere i dati inseriti.

Se chiudo il programma e lo riapro, le tabelle sono vuote.

Ho fatto la prova inserendo i dati anche direttamente in access, e il risultato è lo stesso, cioè, popolo le tabelle, vedo i dati, chiudo access, lo riapro e i dati non ci sono più :confused:

Cosa devo controllare?

Grazie mille !

RaouL.

MarcoGG
13-06-2008, 09:19
Ho fatto la prova inserendo i dati anche direttamente in access, e il risultato è lo stesso, cioè, popolo le tabelle, vedo i dati, chiudo access, lo riapro e i dati non ci sono più :confused:


Ah, anche da Access ?! :mbe:
Se fosse accaduto solo da ADO.NET, magari poteva essere che eseguivi operazini su oggetti Table scollegati e non applicavi le modifiche sul DB...

Prima volta che sento di una cosa del genere.
Cioè inserisci una voce in tabella, Access non da messaggi di errore, chiudi/riapri e quella voce non c'è più ?
Mi sa che quel DB lì ha qualche grosso problema...
Esistono macro che scattano all'inserimento ?

RaouL_BennetH
13-06-2008, 09:36
Ah, anche da Access ?! :mbe:
Se fosse accaduto solo da ADO.NET, magari poteva essere che eseguivi operazini su oggetti Table scollegati e non applicavi le modifiche sul DB...

Prima volta che sento di una cosa del genere.
Cioè inserisci una voce in tabella, Access non da messaggi di errore, chiudi/riapri e quella voce non c'è più ?
Mi sa che quel DB lì ha qualche grosso problema...
Esistono macro che scattano all'inserimento ?

Ho controllato anche dalle schede di access, in macro non ho nulla.

Per quanto riguarda ado.net, ho provato sia utilizzando i tableadapters, sia utilizzando query 'brutali' di inserimento mediante oledb, sia usando oledbparameter. Non so dove sbattere la testa :(

MarcoGG
13-06-2008, 09:58
Ho controllato anche dalle schede di access, in macro non ho nulla.

Per quanto riguarda ado.net, ho provato sia utilizzando i tableadapters, sia utilizzando query 'brutali' di inserimento mediante oledb, sia usando oledbparameter. Non so dove sbattere la testa :(


Il problema risiede al 99% nel DB stesso. ADO.NET non c'entra nulla con questi errori...
Ti chiederei di postarmi il DB, in modo da dargli un'occhiata, ma dovrei sicuramente convertirlo in formato Access 2003 ( conversione a senso unico, perchè non si può più tornare alla ver.'97 ), perchè non uso più Office '97 da una vita.
Vedi tu...

RaouL_BennetH
13-06-2008, 11:28
Il problema risiede al 99% nel DB stesso. ADO.NET non c'entra nulla con questi errori...
Ti chiederei di postarmi il DB, in modo da dargli un'occhiata, ma dovrei sicuramente convertirlo in formato Access 2003 ( conversione a senso unico, perchè non si può più tornare alla ver.'97 ), perchè non uso più Office '97 da una vita.
Vedi tu...

Più che altro, credo sia il problema che uso windows vista.

Mi spiego meglio:

Ho portato il progetto ed il db su un pc con windows xp, e tutto funziona.

Boh, non so proprio che pensare.

Almeno, con il progetto sotto windows xp riesco a lavorare.

Ti ringrazio davvero tanto comunque per il supporto !

RaouL.

MarcoGG
13-06-2008, 13:34
Vista ?
Ah beh, su quello non posso proprio aiutarti...
L'ho bannato dai miei Pc ad interim, o meglio, considero di pensionare WinXP quando uscirà il S.O. successivo...
( sperando non sia un Vista 2 - la vendetta... ) :p.

RaouL_BennetH
21-06-2008, 00:37
Sistemati i prob sul db, non riesco ad eseguire la insert.

Cioè, sulla prima insert va tutto bene, sulla seconda invece mi dice che:


L'apporto modifiche non è riuscito perché si è cercato di duplicare i valori nell'indice,
nella chiave primaria o nella relazione. Modificare i dati nel campo o nei campi che
contengono dati duplicati, rimuovere l'indice o ridefinire l'indice per consentire
l'inserimento di voci duplicate, quindi ritentare l'operazione.


:muro:

RaouL_BennetH
21-06-2008, 00:56
risolto... e ovviamente il messaggio era giusto :(