Я новичок в программировании баз данных, и у меня возникла проблема. Не нажимаю ни одного, но я хочу знать, в чем проблема с кодом. Я использую библиотеку ADOX для создания базы данных доступа с таблицей. Он отлично работает и все создает. А позже я могу использовать AdoTable1.append для добавления новых записей в базу данных. У меня все данные вставлены в поля. Но когда я устанавливаю поле идентификатора или любое другое в качестве ключевого поля, я не могу добавлять никаких данных. Таблица базы данных и столбцы созданы, но AdoTable1.Append просто не работает. Когда я переключаю комментарии на Key1. строк и перекомпилировать, он работает нормально и добавляет данные в поля. Я искал в Интернете, но ничего не нашел. Буду рад, если кто-нибудь знает, в чем я ошибаюсь.
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ADOX_TLB, Vcl.OleServer, Data.DB,
Data.Win.ADODB;
type
TForm1 = class(TForm)
Catalog1: TCatalog;
Key1: TKey;
Table1: TTable;
Column1: TColumn;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Catalog1.Create1('Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source=' + 'test.accdb');
Table1.Name := 'ADOX';
Column1.ParentCatalog := Catalog1.DefaultInterface;
Column1.Name := 'ID';
Column1.type_:= adInteger;
Column1.Properties['Autoincrement'].Value := true;
Table1.Columns.Append(Column1.DefaultInterface,0,0);
Key1.Name := 'Primary';
Key1.type_ := adKeyPrimary;
Key1.Columns.Append('ID',adInteger,0);
Table1.Keys.Append(Key1.DefaultInterface,0,EmptyParam,'','');
Table1.Columns.Append('DATE', adDate,0);
Table1.Columns.Append('VALUE 1', adInteger,0);
Table1.Columns.Append('VALUE 2', adInteger,0);
Catalog1.Tables.Append(Table1.DefaultInterface);
Catalog1.Disconnect;
AdoConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source= test.accdb;Persist Security Info=False';
AdoConnection1.Connected := true;
AdoTable1.TableName := 'ADOX';
AdoTable1.Active := true;
AdoTable1.Append;
AdoTable1.FindField('DATE').AsDateTime := now;
AdoTable1.FindField('VALUE 1').AsInteger := 100;
AdoTable1.FindField('VALUE 2').AsInteger := 200;
AdoTable1.Post;
end;
end.