ADO и CreateTable
3 отговора
82 прегледа
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;
Здравейте.
Искам да създам една таблица на 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;
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);
И така нататък и така нататък...
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);
И така нататък и така нататък...
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.
CREATE TABLE ThisTable (RID AUTOINCREMENT CONSTRAINT ttPK PRIMARY KEY, FirstName TEXT(15), LastName TEXT(15))
Am I evil?
Yes I am.
Редактирано от Hateras на
Re: ADO и CreateTable
Благодаря и на двамата. Е това AUTOINCREMENT ми свърши отлична работа.