Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [VB6] Creare una relazione 1-molti tra 2 tablle Access tramite istruzioni SQL

    ragazzi... vi prego aiutatemi

    ho la seguente procedura:

    codice:
    Set Cn = New ADODB.Connection 
    Cn.ConnectionString = PATH_DB 
    Cn.Open 
    
    
        Cn.BeginTrans 
             'crea il nuovo campo id_pubblicita nella tabella 
    Tbl_Anagrafica_Clienti 
            sql = "ALTER TABLE Tbl_Anagrafica_Clienti ADD COLUMN 
    id_pubblicita INTEGER;" 
            'Cn.Execute sql 
    
    
            'crea la tabella Tbl_ritorno_pubblicitario 
            sql = "create table Tbl_ritorno_pubblicitario(id_pubblicita 
    autoincrement primary Key, pubblicita Text(100));" 
            'Cn.Execute sql 
    
    
            sql = "ALTER TABLE Tbl_Anagrafica_Clienti " & _ 
                  "ADD CONSTRAINT FKPubblicita " & _ 
                  "FOREIGN KEY ([id_pubblicita]) " & _ 
                  "REFERENCES Tbl_ritorno_pubblicitario ([id_pubblicita]) 
    ON UPDATE CASCADE ON DELETE CASCADE " 
             Cn.Execute sql 
    
    
        Cn.CommitTrans 
    
    
    ...ChiudiDB

    con quesata procedura speravo di:
    1)creare il nuovo campo 'id_pubblicita' nella tabella esiste
    denominata Tbl_Anagrafica_Clienti
    2)creare la nuova tabella 'Tbl_ritorno_pubblicitario'
    3) creare una relazione 1-n tra la tabella 'Tbl_ritorno_pubblicitario'
    e la tabella Tbl_Anagrafica_Clienti


    i primi 2 passi vanno a buon fine mentre quando tento di creare la
    relazione mi restituisce un errore di sintassi.


    Qualcuno sa perchè?

    sto pregando davanti alla cartolina di padre Pio che qualcuno mi risponda

  2. #2
    supposizione....anche se magari non sarà quella: il ";" finale nell'ultima query.
    So che non è indispensabile (anche quando faccio io i programmi in vb6 non lo metto mai) però sai com'è...non si sa mai.

  3. #3

    non è il ';'

    Ciao motogpdesmo16,

    grazie per la risposta ma purtroppo non è colpa del ';' finale.

    Mi è venuto il sospetto che magari in Access non è possibile creare relazioni tra tabelle in questo modo!!!

    Qualcuno sa se è possibile o meno?

    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    Io ho provato il tuo codice senza BeginTrans e CommitTrans e non mi dà nessun errore, hai provato a verificare che Tbl_Anagrafica_Clienti non abbia già integrità referenziali con altra tabella?

    E, questo comando non è un pochino rischioso?
    codice:
    sql = "ALTER TABLE Tbl_Anagrafica_Clienti " & _ 
                  "ADD CONSTRAINT FKPubblicita " & _ 
                  "FOREIGN KEY ([id_pubblicita]) " & _ 
                  "REFERENCES Tbl_ritorno_pubblicitario ([id_pubblicita]) ON UPDATE CASCADE ON DELETE CASCADE "
    Se cancelli un record Tbl_ritorno_pubblicitario ti elimina tutti i clienti che hanno quell' id_pubblicita.


    Ciao

  5. #5

    fuochino...

    Ciao mgmg :-)
    e Grazie per essere intervenuto alla discussione.

    Credo che tu abbia individuato dei punti importanti che non avevo preso in considerazione.

    1)La tabella Tbl_Anagrafica_Clienti ha già molte altre integrita referenziali e non deve succedere che "Se cancelli un record Tbl_ritorno_pubblicitario ti elimina tutti i clienti che hanno quell' id_pubblicita." ma vorrei cancellare un recordo di 'Tbl_ritorno_pubblicitario' se e solo se non è referenziato in nessun record della tabella Tbl_Anagrafica_Clienti.

    1)se tolgo la calusola "ON UPDATE CASCADE ON DELETE CASCADE"
    tutto funziona.

    Per cui se ho ben capito l'istruzione SQL corretta dovrebbe essere la seguente:

    codice:
     'crea la relazione 1-n tra le tabelle: Tbl_Anagrafica_Clienti,Tbl_ritorno_pubblicitario
            sql = "ALTER TABLE Tbl_Anagrafica_Clienti " & _
                  "ADD CONSTRAINT FKPubblicita " & _
                  "FOREIGN KEY ([id_pubblicita]) " & _
                  "REFERENCES Tbl_ritorno_pubblicitario ([id_pubblicita]);"

    Confermi?

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    Sì così c'è solo integrità referenziale.
    Quindi:
    quando inserisci in un record della Tbl_Anagrafica_Clienti il campo id_pubblicita controlla che sia presente nella Tbl_ritorno_pubblicitario altrimenti dà errore, idem quando cancelli un record dalla Tbl_ritorno_pubblicitario che non sia presente nella Tbl_Anagrafica_Clienti

    Ciao

  7. #7
    infatti mi funziona esattamente così ed è esattamente quello che volevo attenere.

    sul Forum di google mi avevo detto che poteva dibendere dal tipo di connesione che faceco verso il DB. Ho risposto che mi connettevo con ADO via ODBC in questo modo:

    codice:
    Set Cn = New ADODB.Connection 
    Cn.ConnectionString = PATH_DB 
    Cn.Open 
    ìdove PATH_DB  e il nome del profilo ODBC
    loro mi hanno risposto che :
    codice:
    'devi usare il "Microsoft.Jet.OLEDB.4.0" provider 
    Dim Cn As New ADODB.Connection 
    Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data 
    Source=C:\Dati\Db1.mdb" 
    Cn.Open
    Google gruppi
    Approffitto della tua disponibilità per chiederti cosa ne pensi a riguardo?

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    Senz'altro per access è meglio utilizzare il provider OLEDB che viene installato automaticamente con VB.
    Ma, ci si può connettere anche tramite driver ODBC. Vedi esempi di connessione in questo sito:
    http://www.connectionstrings.com/

    Il tuo "problema" non era dato dalle modalità di connessione al database ma dalla relazione nelle tabelle.

    Ciao

  9. #9

    ringraziamenti

    Sei stato chiarissimo

    grazie infinite per l'aiuto che mia hai dato e a buon rendere ovviamente


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.