ADO и CreateTable

3 отговора 82 прегледа
#1

ADO и CreateTable

Delphi7, ADO.
Здравейте.
Искам да създам една таблица на Access и описаното по долу работи добре, но ми е необходимо IDTariff да бъде AutoNumber. Ако някой знае как да го направя ще му дъда много благодарен за помощта.
Таблицата трябва да я създам Run Time, просто я допълвам към съществуваща база от данни.
10х предварително.

procedure TForm1.Button2Click(Sender: TObject);
const
CommandDanTariff=
'Create Table TableTariff ('+
'IDTariff INTEGER Not Null Primary key, '+
'NameTariff TEXT(12))';
begin
ADOCommand2.CommandText:=CommandDanTariff;
ADOCommand2.Execute;
end;

Отговор
в отговор на TRN #2

Re: ADO и CreateTable

Опитай се всичко това да го направиш с ADOX. За повече подробности относно него - MSDN...

procedure CreateTableADO(ADOTableName:String);
var
Catalog: _Catalog;
bTable, aTable : _Table;
AllTables: Tables;
Column : _Column;
aIndex: _Index;


DS: String;
I:Integer;

// BaseName - пътя до базата с името и

begin
DS:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+BaseName;

Catalog := CreateCOMObject(StringToGUID('ADOX.Catalog')) as _Catalog;

Catalog.Set_ActiveConnection(DS);


AllTables:=Catalog.Tables;

aTable := CreateCOMObject(StringToGUID('ADOX.Table')) as _Table;

aTable.Name := WideString(ADOTableName);

//WriteLn('Create table :'+ String(aTable.Name));

//ако съществува я изтриваме

for I:=0 to AllTables.Count-1 do
begin
bTable:=AllTables.Item[I];
if AnsiSameText(bTable.Type_,'TABLE')
and
AnsiSameText(bTable.Name,aTable.Name)
then
begin
Catalog.Tables.Delete(aTable.Name);
break;
end;
end;

Catalog.Tables.Refresh;

//поставяме новата таблица

Catalog.Tables.Append(aTable);

Catalog.Tables.Refresh;

// създаваме колоните
Column:=CreateCOMObject(StringToGUID('ADOX.Column')) as _Column;

Column.Name:='ID'; // Име
Column.DefinedSize:=4; // Размер
Column.Type_:=adInteger; // тип
// Column.Attributes:=adColNullable; // Атрибути
Column.Properties("Autoincrement") := True; // Те това искаш ти
aTable.Columns.Append(Column,varEmpty,varEmpty); // Поставяме колоната

//Следваща колона
Column:=CreateCOMObject(StringToGUID('ADOX.Column')) as _Column;

Column.Name:='InsertDate';
Column.DefinedSize:=8;
Column.Type_:=adDate;
Column.Attributes:=adColNullable;
aTable.Columns.Append(Column,varEmpty,varEmpty);

И така нататък и така нататък...

Отговор
в отговор на TRN #3

Re: ADO и CreateTable

ето още нещо което да пробваш, но не съм го гледал в Delphi - нямам на това РС, пробвах го в модул на Access, работи

CREATE TABLE ThisTable (RID AUTOINCREMENT CONSTRAINT ttPK PRIMARY KEY, FirstName TEXT(15), LastName TEXT(15))

Am I evil?
Yes I am.

Редактирано от Hateras на

Отговор
в отговор на Hateras #4

Re: ADO и CreateTable

Благодаря и на двамата. Е това AUTOINCREMENT ми свърши отлична работа.

Отговор