Błąd przy dodawaniu rekordu do bazy w SQLite

0

Witam,

przeczytałam ostatnio artykuł na 4programmers o SQLite i przyznam że jest dość ciekawy. Nawiązując do tego artykułu i komentarzy pod nim zawartych, napisałam program w Delphi jednak wywala on błąd przy dodawaniu wpisu. Mam więc taki oto kod:

procedure TForm1.FormCreate(Sender: TObject);
begin
  SQLBaza := nil;

  sciezka := ExtractFilePath(application.ExeName);

  if not FileExists(sciezka + 'baza.dat') then
  begin
     SQLBaza := TSQLiteDataBase.Create(sciezka + 'baza.dat');
     //nie moze byc NOT NULL przy tworzeniu tabeli tylko przy tworzeniu kolumny
     SQLBaza.ExecSQL('CREATE TABLE tabela (id INTEGER PRIMARY KEY AUTOINCREMENT, imie VARCHAR, nazwisko VARCHAR, email VARCHAR)');

  end
  else
     SQLBaza := TSQLiteDataBase.Create(sciezka + 'baza.dat');

end;

i przycisk gdzie dodaję wpis:

procedure TForm1.Button1Click(Sender: TObject);
begin
//format:'INSERT INTO tabela VALUES("", "", "")
  SQLBaza.ExecSQL('INSERT INTO tabela VALUES("", "' + Edit1.Text + '", "' + Edit2.Text + '", "' + Edit3.Text +'")');
end;

Otóż chciałam napisac program który dodaje nowe wpisy i sam ustala unikalny numer ID. Jednak dostaje komunikat z błędem "datatype mismatch". Domyślam się, że chodzi tutaj o to, że nie mogę wprowadzić parametru id jako pustego (""). Ale gdy, nawiązując do komentarza @Excray nie umieszczam żadnej wartości w parametrze id to pojawia się komunikat o tym, że tabela ma 4 kolumny a ja podałam 3. Jak mogłabym to rozwiązać?

2

data mismatch - oznacza, że nie pasują do siebie typy. jako ID podajesz INTEGER PRIMARY KEY AUTOINCREMENT a przekazujesz w zapytaniu jako pierwszy parametr "" - pusty string. Spróbuj przekazać null.

0

@misiakufal Działa, dzięki :) Własnie nie wiedziałam jak w SQLu podać pusty parametr a z przyzwyczajenia próbowałam podać "nil", dzięki ;)

0

Jeżeli ID jest AUTOINCREMENT to po co przekazywać tam cokolwiek?
Może należałoby to zrobić po bożemu:

SQLBaza.ExecSQL('INSERT INTO tabela(imie, nazwisko, email) VALUES(Edit1.Text + '", "' + Edit2.Text + '", "' + Edit3.Text +'")'); 

1 użytkowników online, w tym zalogowanych: 0, gości: 1