PDA

Visualizza la versione completa : [Delphi 5] autoincrement con alter table


zephyr
29-04-2005, 16:09
Ciao,

è possbile aggiungere un nuovo campo di tipo autoincrement in una tabella paradox e poi metterlo come chiave primaria della stessa?
come si fa?

grazie.

zephyr
29-04-2005, 16:19
Scusate,

vorrei conoscere la strada utilizzando l'ALTER TABLE:
ALTER TABLE tabella_x ADD PIPPO ????

Grazie.

zephyr
29-04-2005, 17:37
ok, sono riuscot a fargli aggiungere un campo autoincrement ma adeso ho il problema di come impostarlo a chiave primaria perchè facendo un AddIndex dopo l'inserimento del campo mi dice "field not found" ma se vedo la tabella ce l'ha dentro quindi perchè? :dhò: :confused:

inoltre se lo rieseguo saltando l'inserimento ma solo facendo l'impostazione a chiave primaria con AddIndex lui mi dice "number is out of range", perchè?
:dhò: :confused:

aiuto.

zephyr
03-05-2005, 09:36
Ciao,

perchè nessuno mi risponde?
non si riesce a spiegare e/o a risolvere?

:ciauz:

alka
03-05-2005, 14:29
Quali componenti stai utilizzando? Come hai aggiunto il campo alla tabella Paradox? Perchè non usi Database Desktop?

zephyr
03-05-2005, 15:34
1. il componente che sto utilizzando è una tabella paradox che creo via codice a cui assegno di volta in volta il nome della tabella che devo aggiornare in modo tale da non utilizzare "tremila" componenti nella form.
2. il campo lo aggiungo così, o meglio il codice che uso è:



TbTable := TTable.Create(Self);
MyQry := TQuery.Create(Self);
try
MyQry.Databasename := EditDir.Text;
With TbTable Do begin
TableType := ttParadox;
Databasename := EditDir.Text;
TableName := 'Pippo';
if Exists then begin
Active := True;
sField := '';
For nF := 0 To FieldCount - 1 Do
if (Uppercase(Fields[nF].FieldName) <> 'PROGRESSIVO')
and (Uppercase(Fields[nF].FieldName) <> 'OGGETTO') then
sField := sField + ' DROP ' + Fields[nF].FieldName + ',';
Active := False;
if sField <> '' then begin
sField := Copy(sField,1,Length(sField)-1);
MyQry.Sql.Clear;
MyQry.Sql.Add('Alter Table "Pippo" ' + sField);
MyQry.ExecSql;
end;

Active := True;
sField := '';
if FindField('PROGRESSIVO') = nil then
sField := ' ADD PROGRESSIVO AutoInc,';
if FindField('OGGETTO') = nil then
sField := ' ADD OGGETTO Char(15),';
Active := False;
if sField <> '' then begin
sField := Copy(sField,1,Length(sField)-1);
MyQry.Sql.Clear;
MyQry.Sql.Add('Alter Table "Pippo" ' + sField);
MyQry.ExecSql;
end;
//DeleteIndex('');
AddIndex('', 'PROGRESSIVO', [ixPrimary]);
end;
End;
finally
TbTable.Free;
MyQry.Free;
end;



nel codice il problema mi viene dall'PROGRESSIVO

3. non uso database desktop perchè sto realizzando un programma per aggiornare un database (posto su diversi server) a seconda della presenza o meno di certi campi, di conseguenza visto che sui server esistono versioni differenti ho pensato di creare questo programma per allineare tutti i database al database definitivo in un colpo e per farlo diventa troppo lungo col database desktop perchè non si parla di due o tre tabelle con 4/5 campi.

:ciauz:

zephyr
06-05-2005, 09:19
qualcuno ha altre idee sulla mia situazione?
non ne riesco a venire fuori :dhò:

:ciauz:

zephyr
09-05-2005, 16:56
ok, ho visto che se il campo che voglio far diventare chiave primaria NON è all'inizio della lista dei campi lui non me lo mette come chiave e mi dà o errore (se uso AddIndex) oppure non fa nulla (se uso ALTER TABLE pippo ADD PRIMARY KEY campo).

come si fa (se si fa) ad ordinare i campi di una tabella paradox con delphi 5? così poi applico l'AddIndex ed il mio la voro è finito.
:biifu:


spero che mi possiate aiutare
:ciauz:

Loading