h t t p : / / w w w . a g s s o f t . i t
AGS SOFTWARE
Consulenze
Informatiche
HOME PAGE
Contatti
Articoli MySql
Articoli PHP
Articoli Delphi
Download
Area riservata
25/02/2005 :
Nuove versioni del programma GESTFIN
Ristrutturazione o creazione di nuove tabelle in un DATABASE
============================================================ Oggetti sulla form: Old : TTable; New : TTable; BM : TBatchMove; BtnGo : TButton; (**************************************************************************) (* Implementazione di Ristruttura *) (**************************************************************************) procedure Ristruttura(NewFields : TFieldDefs); var i : integer; begin // Apertura della vecchia tabella Old.Open; // Copia delle definizioni dei campi e degli indici New.FieldDefs := Old.FieldDefs; New.IndexDefs := Old.IndexDefs; // Aggiunta di nuovi campi try for i := 0 to NewFields.Count - 1 do New.FieldDefs.Add(NewFields.Items[i].Name, NewFields.Items[i].DataType, NewFields.Items[i].Size, NewFields.Items[i].Required); except on E: Exception do begin MessageDlg(E.Message, mtError, [mbOK], E.HelpContext); Exit end; end; // Assegnazione del nome alla nuova tabella New.TableName := 'N_' + Old.TableName; // Creazione della nuova tabella New.CreateTable; // Apertura della nuova tabella New.Open; // Preparazione dell'oggetto BatchMove per la copia dei dati // dalla vecchia tabella a quella nuova with BM do begin // Tabelle sorgente e destinazione Source := Old; Destination := New; // Mappatura dei campi da copiare, tutti quelli della // vecchia tabella Mappings.Clear; for i := 0 to Old.FieldCount - 1 do Mappings.Add(Old.FieldDefs[i].Name + '=' + Old.FieldDefs[i].Name); // Esecuzione della copia Execute; end; // Chiusura delle tabelle Old.Close; New.Close; // Cancellazione della vecchia tabella Old.DeleteTable; // Rinomina della nuova tabella con il nome della vecchia New.RenameTable(Old.TableName); end; procedure TForm1.BtnGoClick(Sender: TObject); var NuoviCampi : TFieldDefs; begin NuoviCampi := TFieldDefs.Create(New); // Creazione di una nuova tabella with New do begin TableName := 'TEST'; FieldDefs.Clear; FieldDefs.Add('Pippo',ftString, 20); FieldDefs.Add('Pluto',ftString, 30); FieldDefs.Add('Paperino',ftSmallint); IndexDefs.Clear; IndexDefs.Add('','Pippo;Pluto',[ixPrimary]); IndexDefs.Add('I01','Paperino',[ixUnique, ixCaseInsensitive]); // Possibili valori per le opzioni dell'indice // ixPrimary Indice primario della tabella (NB! in questo caso il nome dell'indice è vuoto). // ixUnique Ogni valore è unico, non sono ammesse duplicazioni. // ixDescending Ordinamento per valori decrescenti. // ixExpression L'indice è basato su un'espressione dBASE. (Applicabile alle sole tabelle dBASE). // ixCaseInsensitive Nell'ordinamento maiuscole e minuscole sono ininfluenti. // ixNonMaintained L'indice non viene aggiornato automaticamente. CreateTable; end; // Ristrutturazione di una tabella Old.TableName := 'TABELLA'; NuoviCampi.Add('Data',ftDate); Ristruttura(NuoviCampi); NuoviCampi.Free; end;
ELENCO