Manipolazione Tabelle Access da codice

di il
23 risposte

23 Risposte - Pagina 2

  • Re: Manipolazione Tabelle Access da codice

    gibra ha scritto:



    Andrew, ti ho già indicato il link con 'le sintassi corrette' ......
    Ti assicuro gibra ho provato le sintassi indicate dal tuo link in tutte le salse ma... nisba...

    f3rr0 ha scritto:



    Dal mio lettino di influenzato e dall'alto dei miei 39 di febbre
    Sei in buona compagnia... io scrivo da un letto d'ospedale...
  • Re: Manipolazione Tabelle Access da codice

    Andrew61 ha scritto:


    gibra ha scritto:



    Andrew, ti ho già indicato il link con 'le sintassi corrette' ......
    Ti assicuro gibra ho provato le sintassi indicate dal tuo link in tutte le salse ma... nisba...

    f3rr0 ha scritto:



    Dal mio lettino di influenzato e dall'alto dei miei 39 di febbre
    Sei in buona compagnia... io scrivo da un letto d'ospedale...
    Hai provato con
    ALTER TABLE Tabella ADD CHECK (Colonna BETWEEN 0 AND 14)
    ?
  • Re: Manipolazione Tabelle Access da codice

    Andrew61 ha scritto:


    Ti assicuro gibra ho provato le sintassi indicate dal tuo link in tutte le salse ma... nisba...
    Impossibile. E te lo dico con assoluta certezza perché (per scrupolo) ho provato personalmente su un database Access.

    La sintassi indicata nel link è corretta. Questa non è un opinione, ma un fatto indiscutibile.
    Invece di continuare a dire che non funziona (che equivale ad offendere i partecipanti alla discussione)
    devi mostrare il codice che hai usato per eseguire le famose '6 tavolette' come ti è stato indicato, e gli eventuali messaggi di errore che hai ricevuto.
  • Re: Manipolazione Tabelle Access da codice

    gibra ha scritto:


    Impossibile. E te lo dico con assoluta certezza perché (per scrupolo) ho provato personalmente su un database Access.
    Vero. Ho testato io stesso direttamente da Delphi con codice: ovviamente il mio codice funziona.
  • Re: Manipolazione Tabelle Access da codice

    gibra ha scritto:


    Invece di continuare a dire che non funziona (che equivale ad offendere i partecipanti alla discussione)
    devi mostrare il codice che hai usato per eseguire le famose '6 tavolette' come ti è stato indicato, e gli eventuali messaggi di errore che hai ricevuto.
    Lungi da me il pensiero di voler offendere qualcuno...
    Trovo altrettanto "insensato" il poter pensare che qualcuno si possa offendere per aver detto un paio di volte che il codice suggerito mi dava un errore di sintassi. Ma sono sicuro che questo è un mio "limite"...

    Comunque sono anni che manipolo le mie tabelle per aggiungere campi, variarne le caratteristiche, creare relazioni, ecc. ecc. Il tutto attraverso codice.
    
    // ELIMINA INDICE --> Aggiornamento RC2.0830 (ID = 2)
    // DB:DentaLabor TAB:TAB_Clienti FIELD:Intestazione2 TIPO:Testo
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Drop Index Intestazione2 on TAB_Clienti');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO --> Aggiornamento RC2.0840 (ID = 3)
    // DB:DentaLabor TAB:TAB_Servizio FIELD:V71 TIPO:Boolean
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Servizio Add Column V71 Bit');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO --> Aggiornamento RC2.0910 (ID = 4)
    // DB:DentaLabor TAB:TAB_Fascicoli FIELD:DataUpDate TIPO:Data
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Fascicoli Add Column DataUpDate Date');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO
    // DB:DentaLabor TAB:TAB_Fascicoli FIELD:Ord TIPO:Numerico
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Fascicoli Add Column Ord Double Default 0');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO
    // DB:DentaLabor TAB:TAB_DettaglioFascicoli FIELD:Ord TIPO:Numerico
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_DettaglioFascicoli Add Column Ord Double Default 0');
    try Qy.ExecSQL except end;
    
    // CREA TABELLA
    // DB:DentaLabor TAB:TAB_DettaglioFasi
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Create Table TAB_DettaglioFasi(ID_DettaglioFase AutoIncrement Primary key,'
    + ' ID_Fase Integer Default 0 Not Null Unique,'
    + ' Descrizione Memo,'
    + ' Materiali Memo,'
    + ' Attrezzature Memo,'
    + ' Controlli Memo,'
    + ' Accettazione Memo )');
    try Qy.ExecSQL except end;
    
    // CREA RELAZIONE Uno-a-Uno
    // DB:DentaLabor TAB_DettaglioFasi(ID_Fase) con TAB_Fasi(ID_Fase)
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_DettaglioFasi'
    + ' Add Constraint TAB_Fasi'
    + ' Foreign Key (ID_Fase)'
    + ' References TAB_Fasi (ID_Fase)'
    + ' On Delete Cascade');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO --> Aggiornamento RC2.1090 (ID = 5)
    // DB:DentaLabor TAB:TAB_Laboratorio FIELD:Suspended TIPO:Numerico
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Laboratorio Add Column Suspended Integer Default 0');
    try Qy.ExecSQL except end;
    
    // Inserisce valore '0' nel campo Suspended precedentemente creato
    TbLaboratorio.Close;
    TbLaboratorio.Open;
    TbLaboratorio.Edit;
    TbLaboratorio['Suspended'] := 0;
    TbLaboratorio.Post;
    
    // ELIMINA RECORD --> Aggiornamento RC2.1100 (ID = 6)
    // DB:DatiContabili TAB:TAB_Divisioni FIELD:Divisione VALUE:Cli/For
    Qy.Connection := DatiContabili;
    Qy.SQL.Clear;
    Qy.SQL.Add('Delete From TAB_Divisioni Where ID_Divisione = 3');
    try Qy.ExecSQL except end;
    
    // AUMENTA DIMENSIONE CAMPO --> Aggiornamento RC2.1150 (ID = 7)
    // DB:DentaLabor TAB:TAB_TestataFatture FIELD:IntestazioneCliente
    Qy.Connection := DatiContabili;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_TestataFatture Alter Column IntestazioneCliente Varchar(100)');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO --> Aggiornamento RC2.1160 (ID = 8)
    // DB:DentaLabor TAB:TAB_Lavori FIELD:DataInizio TIPO:Data/ora
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Lavori Add Column DataInizio DateTime,'
    + ' Column TimeInizio DateTime,'
    + ' Column NoteInizio Memo,'
    + ' Column AgInizio Bit,'
    
    + ' Column DataP1 DateTime,'
    + ' Column TimeP1 DateTime,'
    + ' Column NoteP1 Memo,'
    + ' Column AgP1 Bit,'
    
    + ' Column DataP2 DateTime,'
    + ' Column TimeP2 DateTime,'
    + ' Column NoteP2 Memo,'
    + ' Column AgP2 Bit,'
    
    + ' Column DataP3 DateTime,'
    + ' Column TimeP3 DateTime,'
    + ' Column NoteP3 Memo,'
    + ' Column AgP3 Bit,'
    
    + ' Column DataP4 DateTime,'
    + ' Column TimeP4 DateTime,'
    + ' Column NoteP4 Memo,'
    + ' Column AgP4 Bit,'
    
    + ' Column DataFine DateTime,'
    + ' Column TimeFine DateTime,'
    + ' Column NoteFine Memo,'
    + ' Column AgFine Bit');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO --> Aggiornamento RC2.1190 (ID = 9)
    // DB:DentaLabor TAB:TAB_Laboratorio FIELD:ClickPrint01 TIPO:Numerico
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Laboratorio Add Column ClickPrint01 Integer Default 0');
    try Qy.ExecSQL except end;
    
    // Inserisce valore '0' nel campo ClickPrint01 precedentemente creato
    TbLaboratorio.Close;
    TbLaboratorio.Open;
    TbLaboratorio.Edit;
    TbLaboratorio['ClickPrint01'] := 0;
    TbLaboratorio.Post;
    
    // AGGIUNGE CAMPO --> Aggiornamento RC2.1200 (ID = 10)
    // DB:DentaLabor TAB:TAB_Servizio FIELD:V72 TIPO:Boolean
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Servizio Add Column V72 Bit');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO --> Aggiornamento RC2.1300 (ID = 11)
    // DB:DentaLabor TAB:TAB_Laboratorio FIELD:PrintFirma TIPO:Boolean
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Laboratorio Add Column PrintFirma Bit');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO --> Aggiornamento RC2.1380 (ID = 12)
    // DB:DentaLabor TAB:TAB_Clienti FIELD:MultiSede TIPO:Boolean
    // DB:DentaLabor TAB:TAB_Clienti FIELD:MultiMedico TIPO:Boolean
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Clienti Add Column MultiSede Bit,'
    + ' Column MultiMedico Bit');
    try Qy.ExecSQL except end;
    
    // CREA TABELLA -->
    // DB:DentaLabor TAB:TAB_Medici
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Create Table TAB_Medici(ID_Medico AutoIncrement Primary key,'
    + ' ID_Cliente Integer Default 0,'
    + ' TM_MedicoPrescrivente Text(50),'
    + ' TM_NumeroAlbo Text(50),'
    + ' TM_ProvinciaAlbo Text(50) )');
    try Qy.ExecSQL except end;
    
    // CREA TABELLA -->
    // DB:DentaLabor TAB:TAB_Sedi
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Create Table TAB_Sedi(ID_Sede AutoIncrement Primary key,'
    + ' ID_Cliente Integer Default 0,'
    + ' Sede Text(50) )');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO -->
    // DB:DentaLabor TAB:TAB_Lavori FIELD:Medico TIPO:Testo
    // DB:DentaLabor TAB:TAB_Lavori FIELD:Sede TIPO:Testo
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Lavori Add Column Medico Text (50),'
    + ' Sede Text (50)');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO -->
    // DB:DatiContabili TAB:TAB_RigoBolle FIELD:Medico TIPO:Testo
    // DB:DatiContabili TAB:TAB_RigoBolle FIELD:Sede TIPO:Testo
    Qy.Connection := DatiContabili;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_RigoBolle Add Column Medico Text (50),'
    + ' Sede Text (50)');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO -->
    // DB:DatiServizio TAB:TAB_RigoFatturaLavori FIELD:Medico TIPO:Testo
    // DB:DatiServizio TAB:TAB_RigoFatturaLavori FIELD:Sede TIPO:Testo
    Qy.Connection := DatiServizio;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_RigoFatturaLavori Add Column Medico Text (50),'
    + ' Sede Text (50)');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO --> Aggiornamento RC2.1470 (ID = 13)
    // DB:DentaLabor TAB:TAB_Laboratorio FIELD:SetLingua TIPO:Testo
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Laboratorio Add Column SetLingua Text (2) Not Null Default IT');
    try Qy.ExecSQL except end;
    
    // Inserisce valore 'IT' nel campo SetLingua precedentemente creato
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Update TAB_Laboratorio Set SetLingua = ''IT'' Where SetLingua = "" Or SetLingua Is Null');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO -->
    // DB:DentaLabor TAB:TAB_Clienti FIELD:SetLingua TIPO:Testo
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Clienti Add Column SetLingua Text (2) Not Null Default IT');
    try Qy.ExecSQL except end;
    
    // Inserisce valore 'IT' nel campo SetLingua precedentemente creato
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Update TAB_Clienti Set SetLingua = ''IT'' Where SetLingua = "" Or SetLingua Is Null');
    try Qy.ExecSQL except end;
    
    // AUMENTA DIMENSIONE CAMPO --> Aggiornamento RC2.1560(ID = 14)
    // DB:DentaLabor TAB:TAB_Laboratorio FIELD:PartitaIva
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Laboratorio Alter Column PartitaIva Varchar(20)');
    try Qy.ExecSQL except end;
    
    // AUMENTA DIMENSIONE CAMPO --> 
    // DB:DentaLabor TAB:TAB_Clienti FIELD:PartitaIva
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Clienti Alter Column PartitaIva Varchar(20)');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO --> Aggiornamento RC2.1650 (ID = 15)
    // DB:DentaLabor TAB:TAB_Lavori FIELD:Consegnato TIPO:Boolean
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Lavori Add Column Consegnato Bit');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO --> Aggiornamento RC2.1700 (ID = 16)
    // DB:DentaLabor TAB:TAB_Laboratorio FIELD:LastBackUp TIPO:Data
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Laboratorio Add Column LastBackUp Date');
    try Qy.ExecSQL except end;
    
    // Inserisce Data Sistema nel campo LastBackUp precedentemente creato
    TbLaboratorio.Close;
    TbLaboratorio.Open;
    TbLaboratorio.Edit;
    TbLaboratorio['LastBackUp'] := Date;
    TbLaboratorio.Post;
    
    // AGGIUNGE CAMPO --> Aggiornamento RC2.1740 (ID = 17)
    // DB:DatiCartelle TAB:TAB_Schema FIELD:NoteCartella TIPO:Memo
    Qy.Connection := DatiCartelle;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Schema Add Column NoteCartella Memo');
    try Qy.ExecSQL except end;
    
    // AGGIUNGE CAMPO --> 
    // DB:DentaLabor TAB:TAB_Servizio FIELD:V73-V74-V75-V76-V77-V78-V79-V80 TIPO:Boolean
    Qy.Connection := DatiDB;
    Qy.SQL.Clear;
    Qy.SQL.Add('Alter Table TAB_Servizio Add Column V73 Bit,'
    + ' V74 Bit,'
    + ' V75 Bit,'
    + ' V76 Bit,'
    + ' V77 Bit,'
    + ' V78 Bit,'
    + ' V79 Bit,'
    + ' V80 Bit');
    try Qy.ExecSQL except end;
    
    Per quanto riguarda il problema che mi si è presentato con il vincolo di CONSTRAINT ho seguito il suggerimento delle "6 tavolette", testando passo passo ma...
        //1 Crea Campo d'appoggio
        Qy.Connection := DatiDB;
        Qy.SQL.Clear;
        Qy.SQL.Add('ALTER TABLE TAB_Clienti_dummy ADD Campo_dummy Integer Default 1');
        Qy.ExecSQL;
    
        //2 Copia valori originali
        Qy.Connection := DatiDB;
        Qy.SQL.Clear;
        Qy.SQL.Add('UPDATE TAB_Clienti_dummy SET Campo_dummy = SceltaListino');
        Qy.ExecSQL;
    
        //3 Elimina Campo originale
        Qy.Connection := DatiDB;
        Qy.SQL.Clear;
        Qy.SQL.Add('ALTER TABLE TAB_Clienti_dummy DROP COLUMN SceltaListino');
        Qy.ExecSQL;
    
        //4 Ricrea Campo originale con nuovo constraint
        Qy.Connection := DatiDB;
        Qy.SQL.Clear;
        Qy.SQL.Add('ALTER TABLE TAB_Clienti_dummy ADD SceltaListino CHECK (SceltaListino >=0 AND <15)');
        Qy.ExecSQL;
    
        //5 Copia valori da Campo d'appoggio
        Qy.Connection := DatiDB;
        Qy.SQL.Clear;
        Qy.SQL.Add('UPDATE TAB_Clienti_dummy SET SceltaListino = Campo_dummy');
        Qy.ExecSQL;
    
        //6 Elimina Campo d'appoggio
        Qy.Connection := DatiDB;
        Qy.SQL.Clear;
        Qy.SQL.Add('ALTER TABLE TAB_Clienti_dummy DROP COLUMN Campo_dummy');
        Qy.ExecSQL;
    Qy.SQL.Add('ALTER TABLE TAB_Clienti_dummy ADD SceltaListino CHECK (SceltaListino >=0 AND <15)');
    ERRORE DI SINTASSI
  • Re: Manipolazione Tabelle Access da codice

    Ma li leggi i post precedenti? Prima devi fare l'add della colonna nel create, poi l'add del CHECK nell'alter. Nel tuo SQL tu fai un alter dove aggiungi una colonna e contemporaneamente un Constraint, ma non lo dichiari correttamente
    Se vuoi fare l'add contemporaneo della colonna e del check in una query di creazione devi usare la sintassi corretta specificando il CONSTRAINT. Va che è spiegato benissimo nel sito linkato...
  • Re: Manipolazione Tabelle Access da codice

    Andrew61 ha scritto:


    Lungi da me il pensiero di voler offendere qualcuno...
    Trovo altrettanto "insensato" il poter pensare che qualcuno si possa offendere per aver detto un paio di volte che il codice suggerito mi dava un errore di sintassi. Ma sono sicuro che questo è un mio "limite"...
    Vedo che non hai capito.
    L'insensato (e da qui l'offendere l'intelligenza dei membri) è dire SOLAMENTE: 'NON FUNZIONA'
    senza indicare le informazioni INDISPENSABILI che permettono a chi cerca di aiutarti di dirti dove sbagli, e costringendo i membri a chiedere nuovamente il codice incriminato.


    Andrew61 ha scritto:


    Qy.SQL.Add('ALTER TABLE TAB_Clienti_dummy ADD SceltaListino CHECK (SceltaListino >=0 AND <15)');
    ERRORE DI SINTASSI
    Manca il CONTRAINT

    C.V.D. (come volevasi dimostrare).
  • Re: Manipolazione Tabelle Access da codice

    Problema risolto!!!
    A forza di dai e dai ci sono riuscito, sicuramente e solo attraverso il vostro prezioso aiuto e per questo vi ringrazio indistintamente.
    Ad ogni modo uno dei motivi per cui mi restituiva l'errore era dovuto anche al fatto che non dichiaravo correttamente il CHECK
    ovvero
    (SceltaListino >=0 AND <15)
    anziché
    (SceltaListino >=0 AND SceltaListino <15)

    Grazie ancora!


    P.S.

    gibra ha scritto:


    Vedo che non hai capito.
    L'insensato (e da qui l'offendere l'intelligenza dei membri) è dire SOLAMENTE: 'NON FUNZIONA'
    Sarò ripetitivo ma credo che la "proprietà" di sentirsi offesi (addirittura intellettualmente...) per delle inezie come un "NON FUNZIONA" faccia parte di un paradosso.
    Una cosa è certa. Da sempre mi hanno insegnato che, indistintamente dalle situazioni, non è mai opportuno rivolgersi alle persone con un "non hai capito".
    Ma questo fa parte solo del bon ton... ed io sono "immune" alle offese...
    Non me ne volere... per me amici come prima e grazie ancora.
  • Re: Manipolazione Tabelle Access da codice

    Andrew61 ha scritto:


    Ad ogni modo uno dei motivi per cui mi restituiva l'errore era dovuto anche al fatto che non dichiaravo correttamente il CHECK
    ovvero
    (SceltaListino >=0 AND <15)
    anziché
    (SceltaListino >=0 AND SceltaListino <15)
    Infatti te l'avevo scritto giorni fa
Devi accedere o registrarti per scrivere nel forum
23 risposte