Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 LiteTible SQLite  [new]
SDima55
Member

Откуда:
Сообщений: 40
Здравствуйте. Подскажите добавляю запись через LiteTible.Post пытаюсь зачитать ID (автоинкрементное поле) Выдает 0. После Close Open зачитывает. Понимаю что что-то нужно указать в свойствах но не могу разобраться. За ранее извиняюсь за тупой вопрос. Просто раньше работал с FIBPlus там все работало.
procedure TForm1.FormCreate(Sender: TObject);
const
 FileName = 'proba.db3';
var
 Path, SQL: String;
begin
 Path:=ExtractFilePath(Application.ExeName);
 IF Length(Path) > 1 then
    IF not(Path[Length(Path)] = '\')then Path:=Path+'\';

 IF FileExists(Path + FileName) = False then
    Begin
    LiteConnection1.Database:=Path + FileName;
    LiteConnection1.Options.Direct:=True;
    LiteConnection1.Options.ForceCreateDatabase:=True;
    LiteConnection1.Connected:=True;
    try
     SQL:='CREATE TABLE if not exists Tab_Sample ( '+
                         'ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,' +
                         'USERNAME CHAR(40) NOT NULL,' +
                         'DateReg DATE)';

     LiteConnection1.ExecSQL(SQL);
     SQL:='CREATE UNIQUE INDEX IDUSERDATE ON Tab_Sample (ID, USERNAME)';
     LiteConnection1.ExecSQL(SQL);

     LiteConnection1.Connected := False;
    except
     exit;
    end;
    end;//IF FileExists(Path + FileName) = False then

 LiteConnection1.Database:=Path + FileName;
 LiteConnection1.Options.Direct:=True;
 LiteConnection1.Options.ForceCreateDatabase:=True;
 try
  LiteConnection1.Connected := True;

  LiteTable1.SQL.Clear;
  LiteTable1.SQL.Add('SELECT * FROM Tab_Sample ORDER BY DateReg');
  LiteTable1.Open;
 except
  LiteConnection1.Connected := False;
 end;

end;

procedure TForm1.sBitBtn1Click(Sender: TObject);
begin
 LiteTable1.Append();
 LiteTable1.FieldByName('USERNAME').AsWideString:='User ' + IntToStr(LiteTable1.LastInsertId + 1);
 LiteTable1.FieldByName('DateReg').AsDateTime:=Now();
 LiteTable1.Post;

 ShowMessage('сен новый пользователь:' + 'ID = ' + IntToStr(LiteTable1.FieldByName('ID').AsInteger) + ' ' +
                                         'USERNAME = ' + LiteTable1.FieldByName('USERNAME').AsWideString + ' ' +
                                         'DateReg = ' + DateToStr(LiteTable1.FieldByName('DateReg').AsDateTime));
end;
6 июн 20, 10:39    [22146772]     Ответить | Цитировать Сообщить модератору
 Re: LiteTible SQLite  [new]
Cobalt747
Member

Откуда:
Сообщений: 2166
SDima55,

А вопрос-то в чём?
7 июн 20, 23:14    [22147203]     Ответить | Цитировать Сообщить модератору
 Re: LiteTible SQLite  [new]
ъъъъъ
Member

Откуда:
Сообщений: 795
Cobalt747
SDima55,

А вопрос-то в чём?


Карбюратор не сосает,
Маховик земля бросает.
7 июн 20, 23:34    [22147211]     Ответить | Цитировать Сообщить модератору
 Re: LiteTible SQLite  [new]
bk0010
Member

Откуда:
Сообщений: 4957
Вы бы хоть написали, какого типа у вас этот LiteTable. Если это AnyDac (FireDac), то там надо установить признак автоинкрементного и самозаполняемого поля где-то в UpdateOptions. Точнее не скажу: Арефьев свой сайт с хелпом (http://www.da-soft.com/anydac/) закрыл, видимо.
7 июн 20, 23:48    [22147213]     Ответить | Цитировать Сообщить модератору
 Re: LiteTible SQLite  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9856
Это DevArt LiteDac
8 июн 20, 09:23    [22147294]     Ответить | Цитировать Сообщить модератору
 Re: LiteTible SQLite  [new]
devart
Member

Откуда: www.devart.com
Сообщений: 1170
Описываемое Вами поведение присутствовало в ранних версиях LiteDAC. Попробуйте протестировать работу Вашего примера с использованием последней версии LiteDAC 4.2.4 (01-Jun-20)
12 июн 20, 16:27    [22149879]     Ответить | Цитировать Сообщить модератору
 Re: LiteTible SQLite  [new]
SDima55
Member

Откуда:
Сообщений: 40
Dmitry Arefiev,
Извеняюсь давно не заходил небыло возможности
Да это Deveart 4.2 последняя версия
16 июн 20, 11:27    [22151466]     Ответить | Цитировать Сообщить модератору
 Re: LiteTible SQLite  [new]
SDima55
Member

Откуда:
Сообщений: 40
Cobalt747,

Вопрос в том как сделать так чтоб он в одном наборе DataSet возращал ID (AutoInc). Сейчас я зделал так:
 Ind:=Tbl.LastInsertId;

 Tbl.DisableControls();
 Tbl.Close();
 Tbll.Open();
 Tbl.Locate('ID', Ind, []);
 Tbl.EnableControls();

 Result:=Tbl.FieldByName('ID').AsInteger;


Мне данное решение не очень нравиться. Ведь я работаю в пределе одного DataSet
16 июн 20, 11:35    [22151476]     Ответить | Цитировать Сообщить модератору
 Re: LiteTible SQLite  [new]
SDima55
Member

Откуда:
Сообщений: 40
devart,

Я установил последнюю версию. Набросал отдельный проект. Думал может что другое влияет в основном проект. Но эффект тот же. Пока я DataSet не переодкрою он не возращает нужное значение.
16 июн 20, 11:41    [22151486]     Ответить | Цитировать Сообщить модератору
 Re: LiteTible SQLite  [new]
devart
Member

Откуда: www.devart.com
Сообщений: 1170
Пожалуйста пришлите полный исходный код Вашего тестового проекта, воспроизводящего описываемую проблему. Это удобно сделать с помощью формы e-support https://www.devart.com/company/contactform.html

Сообщение было отредактировано: 16 июн 20, 15:57
16 июн 20, 15:58    [22151744]     Ответить | Цитировать Сообщить модератору
 Re: LiteTible SQLite  [new]
SDima55
Member

Откуда:
Сообщений: 40
devart,

Отправил.
16 июн 20, 18:25    [22151885]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить