AUTO INCREMENT SQLite no MQL5

 
//--- criamos a tabela COMPANY 
   if(!DatabaseExecute(db, "CREATE TABLE COMPANY("
                       "ID INT AUTO INCREMENT PRIMARY KEY ,"
                       "NAME           TEXT    NOT NULL,"
                       "AGE            INT     NOT NULL,"
                       "ADDRESS        CHAR(50),"
                       "SALARY         REAL );"))
     {
      Print("DB: ", filename, " create table failed with code ", GetLastError());
      DatabaseClose(db);
      return;
     }

//--- insere dados na tabela 
   if(!DatabaseExecute(db, "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',32,'California',25000.00); "
                       "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (NULL,'Allen',25,'Texas',15000.00); "))
     {
      Print("DB: ", filename, " insert failed with code ", GetLastError());
      DatabaseClose(db);
      return;
     }

Fala turminha, estou tentando realizar um AUTO INCREMENT na coluna ID tabela COMPANY do exemplo acima, inserindo um valor  "NULL" para tentar gerar um ID automático, mas o resultado retorna uma string NULL, em vez de incrementar um inteiro.

Saída do comando: SELECT * FROM 'COMPANY';

SAIDA

A coluna "ID" deveria ter sido "2" para o incremento automático. 

alguém sabe a solução? 


...

somos trades. 

 
Robson Ferreira:
//--- insere dados na tabela    if(!DatabaseExecute(db, "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Paul',32,'California',25000.00); "                        "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (NULL,'Allen',25,'Texas',15000.00); "))      {       Print("DB: ", filename, " insert failed with code ", GetLastError());       DatabaseClose(db);       return;      }

Já tentou remover a coluna id da declaração ?

INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ('Paul',32,'California',25000.00);
 
Jonathan Pereira #:

Já tentou remover a coluna id da declaração ?

Fala Jonathan, eu tentei fazendo o INSERT acima citado e o valor inserido foi também NULL, eu pesquisei no site oficial SQLite e encontrei isso "Cada coluna de uma PRIMARY KEY deve ser individualmente NOT NULL. No entanto, NOT NULL não foi aplicado nas colunas PRIMARY KEY pelas versões anteriores do SQLite devido a um bug. No momento em que esse bug foi descoberto, tantos bancos de dados SQLite já estavam em circulação que foi tomada a decisão de não corrigir esse bug por medo de quebrar a compatibilidade." 

Irei tentar pesquisar qual foi a solução deles  e posto por aqui se conseguir.

 
Por favor não criar tópicos aleatoriamente sem ter em conta a secção adequada. O seu tópico foi movido para a secção: Expert Advisors e Negociação Automatizada
 

Solução encontrada na documentação https://www.sqlite.org/autoinc.html, eu tinha declarado ID do tipo INT e para existir o AUTOINCREMENT teria que ser do tipo INTEGER, conforme documentação SQLite: " Se uma tabela contiver uma coluna do tipo  INTEGER PRIMARY KEY , essa coluna se tornará um alias para o ROWID", "u ma coluna PRIMARY KEY só se torna uma chave primária inteira se o nome do tipo declarado for exatamente "INTEGER".  Outros nomes de tipo inteiro como "INT" ou "BIGINT" ou "SHORT INTEGER" ou "UNSIGNED INTEGER" fazem com que a coluna de chave primária se comporte como uma coluna de tabela comum com afinidade de inteiro e um índice exclusivo, não como um alias para o  rowid  ". A solução esta editado no código abaixo:

//--- criamos a tabela COMPANY 
   if(!DatabaseExecute(db, "CREATE TABLE COMPANY("
                       "ID INTEGER PRIMARY KEY AUTOINCREMENT,"
                       "NAME           TEXT    NOT NULL,"
                       "AGE            INT     NOT NULL,"
                       "ADDRESS        CHAR(50),"
                       "SALARY         REAL );"))
     {
      Print("DB: ", filename, " create table failed with code ", GetLastError());
      DatabaseClose(db);
      return;
     }
AUTOINCREMENT não é permitido em tabelas   que não seja INTEGER PRIMARY KEY.  Qualquer tentativa de usar AUTOINCREMENT em uma tabela  diferente da coluna INTEGER PRIMARY KEY resulta em erro.