Delphi SQLite Ошибка: ограничение не выполнено
Я имею эту общую ошибку и не могу понять, что это вызывает, что
Это процедура для импорта данных из файла CSV
procedure TForm1.importarData;
var
S,D: TStringList;
fecha:TDate;
hora:TTime;
i,j: Integer;
FileName,Aux: String;
fExport : TextFile;
query:String;
rcDb:TextFile;
begin
S := TStringList.Create;
D := TStringList.Create;
D.Clear;
S.Clear;
OpenDialog1.Filter := 'Only CSV files (*.csv)|*.csv';
FileName:='';
OpenDialog1.FileName:='';
//fecha:=nil;
if OpenDialog1.Execute then
begin
S.LoadFromFile(OpenDialog1.FileName);
for I := 1 downto S.Count-1 do
begin
D.Clear;
D.CommaText := s[i];
for J := 0 to D.Count-1 do
D[J] := StringReplace(D[J], '_', ' ', [rfReplaceAll, rfIgnoreCase]);
FormatSettings.ShortDateFormat:= 'dd mm yyyy';
//260234920,John_Smith,Jane_Smith,Janet_Smith,Ryan_Smith,201_CENTRE_STREET,Nowhere,AB,T0J111,403-555-5555,smith@email.com,200,2523,2017,12345678,12-10-1971,12-10-1987,12-10-2003,12-10-2004
//Showmessage(D[1]);
query:='Insert Into RFID(CID,PrM,AddM1,AddM2,AddM3,Address,City,Province,Postal,Phone,Email,Paid,MID,MYear,MDob,MDob1,MDob2,MDob3,Pal) Values('; // "'++'",
query:=query+'"'+D[0]+'",';
query:=query+'"'+D[1]+'",';
query:=query+'"'+D[2]+'",';
query:=query+'"'+D[3]+'",';
query:=query+'"'+D[4]+'",';
query:=query+'"'+D[5]+'",';
query:=query+'"'+D[6]+'",';
query:=query+'"'+D[7]+'",';
query:=query+'"'+D[8]+'",';
query:=query+'"'+D[9]+'",';
query:=query+'"'+D[10]+'",';
query:=query+'"'+D[11]+'",';
query:=query+'"'+D[12]+'",';
query:=query+'"'+D[13]+'",';
query:=query+'"'+formatdatetime('yyyy-mm-dd', StrToDate(D[15]))+'",';
query:=query+'"'+formatdatetime('yyyy-mm-dd', StrToDate(D[16]))+'",';
query:=query+'"'+formatdatetime('yyyy-mm-dd', StrToDate(D[17]))+'",';
query:=query+'"'+formatdatetime('yyyy-mm-dd', StrToDate(D[18]))+'",';
query:=query+'"'+D[14]+'"';
query:=query+')';
ZQuery1.Close;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add(query);
ZQuery1.ExecSQL;
//showmessage('Done')
end;
end;
S.Free;
D.Free;
end;
Результат запроса перед выполнением SQL
'Вставить в RFID(CID,PrM,AddM1,AddM2,AddM3, адрес, город, провинция, почтовый, телефон, электронная почта, платный,MID,MYear,MDob,MDob1,MDob2,MDob3,Pal) значения ("260234920"," Джон Смит "," Джейн Смит "," Джанет Смит "," Райан Смит ","201 CENTER STREET"," Нигде ","AB","T0J111","403-555-5555","smith@email. ком","200","2523","2017","1971-10-12","1987-10-12","2003-10-12","2004-10-12","12345678")"
И это DDL из базы данных SQLite
CREATE TABLE [RFID](
[CID] VARCHAR(16),
[PrM] VARCHAR(32),
[AddM1] VARCHAR(32),
[AddM2] VARCHAR(32),
[AddM3] VARCHAR(32),
[Address] VARCHAR(512),
[City] VARCHAR(64),
[Province] VARCHAR(64),
[Postal] VARCHAR(16),
[Phone] VARCHAR(32),
[Email] VARCHAR(256),
[Paid] VARCHAR(8),
[MID] VARCHAR(4),
[MYear] VARCHAR(4),
[MDob] DATE,
[MDob1] DATE,
[Mdob2] DATE,
[MDob3] DATE,
[PAL] VARCHAR(64));
1 ответ
Я исправил это, создав новое поле с именем ID типа intger в качестве первичного ключа, а не NULL и с автоинкрементом, что-то вроде этого:
CREATE TABLE [RFID](
[ID] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
[CID] INTEGER(16) UNIQUE,
[PrM] VARCHAR(32),
[AddM1] VARCHAR(32),
[AddM2] VARCHAR(32),
[AddM3] VARCHAR(32),
[Address] VARCHAR(512),
[City] VARCHAR(64),
[Province] VARCHAR(64),
[Postal] VARCHAR(16),
[Phone] VARCHAR(32),
[Email] VARCHAR(256),
[Paid] VARCHAR(8),
[MID] VARCHAR(4),
[MYear] VARCHAR(4),
[MDob] DATE,
[MDob1] DATE,
[Mdob2] DATE,
[MDob3] DATE,
[PAL] VARCHAR(64));