Newsgroup: it.comp.lang.visual-basic
Titolo: Aiuto DB!!

Ciao a tutti, mi sto inoltrando nel modo dei DB, ma ho dei seri problemi:
ho creato (con Access) un DB composto da due tabelle
TabMain
.ID (contatore, chiave primaria)
.NomePezzo (string)
TabVar
.ID(contatore, chiave primaria)
.Colore (string)
Le tue tabelle (TabMain e TabVar) sono legate da una relazione 1-1 da
TabMain.ID a TabVar.ID
Se scrivo in TabMain non ho nessun problema (riporto la funzione che ho
fatto per aggiungere un record) ma quando scrivo su TabVar ho un errore
legato alla relazione (3201). Vi chiedo un aiuto per risolvere il problema
(che so essere concettuale a questo punto). Grazie infinite. Giuseppe
*******************************************************
Public Function AddRecordToDB(DBLocation As String, _
                                              TableName As String, _
                                              NewFields As Variant) As
Boolean
Dim FSObj As FileSystemObject
Dim DB As Database
Dim DBTable As Recordset
Dim i As Integer
'ini
AddRecordToDB = False
'Istanzio l'oggetto fileSystem
Set FSObj = New FileSystemObject
'Verifico che il file esista
If FSObj.FileExists(DBLocation) Then
   'istanzio il DB
   Set DB = OpenDatabase(DBLocation)
   'istanzio il recordset
   Set DBTable = DB.OpenRecordset(TableName, dbOpenDynaset)
  'scandisco i campi della tabella
 'On Error GoTo ErrGest
    With DBTable
      .AddNew
       For i = 1 To UBound(NewFields)
         .Fields(i).Value = NewFields(i)
       Next i
       .Update
      .Bookmark = .LastModified
      AddRecordToDB = True
      DBTable.Close
      DB.Close
    End With
'Se il file non esiste lo notifico
Else
  MsgBox "No database: " & DBLocation & " not found.", vbExclamation
End If
ErrGest:
Select Case Err.Number
   Case 3315: MsgBox "Please, fill all fields", vbExclamation
                    Exit Function
End Select
End Function
*********************************************************

 TabMain.ID a TabVar.ID
forse ti è sfuggito il fatto che nei campi "contatore" non puoi metterci il
valore che vuoi tu, ma è il db a mettercelo, di conseguenza, se vuoi mettere
dei campi in relazione, almeno uno dei due lo devi poter impostare tu.
--
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 TabMain.ID a TabVar.ID
Ossia intendi dire che ad ogni elemento in TabMain ne corrisponde sempre uno ed
uno solo in TabVar? Non credo che sia questo che vuoi (altrimenti ogni pezzo
puo' avere un solo colore, ma anche ogni colore corrisponde ad un solo pezzo!).
Semmai la relazione dovrebbe essere molti-a-uno ossia ogni elemento di TabMain
corrisponde ad un elemento in TabVar ma non il contrario (ogni elemento di
TabVar dovrebbe avere zero, uno o piu' elementi di TabMain).
Quindi il tuo DB va fatto cosi':
TabMain
.ID (contatore, chiave primaria)
.IDColore (intero lungo)
.NomePezzo (string)
TabVar
.ID(contatore, chiave primaria)
.Colore (string)
La relazione infinito-a-uno la farai da TabMain.IDColore verso TabVar.ID
-- 
Ciao!
   -DocDoc-
--- Per scrivermi: dottoATdespammed.com
Sei anche tu stanco dei messaggi spam? Usa Terminator, il programma
anti-spam italiano FREEWARE! 
http://www.sertel.net/terminator/


[...]
Il codice non l'ho neanche guardato, poichè affidarsi ad un campo contatore
per creare una relazione mi sembra alquanto masochistico!
magari hai aggiunto e/o tolto dei record a manina per fare delle prove....
ciaociao

 Il codice non l'ho neanche guardato, poichč affidarsi ad un campo


 Grazie mille a tutti
prego
ciaociao

 č giusto cosě?
No, e' l'esatto contrario. PRIMA crei il nuovo colore nella TabVar e ti annoti
l'ID del colore, e POI aggiungi in TabMain il nuovo record, inserendo in
IDColore l'ID di TabVar.


 > è giusto così?


 ci sia un set di parametri  D1,D2 ...
Questo non significa relazione 1-1 perche' significherebbe che ad ogni record di
Generator deve sempre corrisponde un solo record in Turbine, ed ogni record di
Turbine corrisponde ad un solo record in Generator.
In parole povere, quando crei un record in Turbine devi creare anche un nuovo
record in Generator (visto che ogni record di Generator va collegato ad uno ed
un solo record di Turbine) e quindi copiato il counter Generator.ID in
Turbine.GenID. Tutto questo non ha senso, perche' si fa molto prima a creare il
set di parametri D1, D2 come campi di Generator...
Se questo non dovesse bastare per chiarire la situazione, allora dovrei
approfondire meglio l'argomento, soprattutto capire perche' diamine abbiano dato
delle specifiche cosi' poco logiche, e per quale ragione tu debba metterti a
creare relazioni senza sapere bene come funzionano...
In tal caso pero' contattami in privato (l'indirizzo e' in firma, sostituisci
"AT" con "@") cosi' prendiamo accordi per una consulenza (faccio proprio il
consulente...;-)) e magari ti ristrutturo il DB in modo piu' razionale..;-)
