[FireDAC][Phys][SQLite] ERROR: UNIQUE constraint failed - AJUDEM PORFAVOOOR!!
22/11/2017
0
procedure TDM.downloadProds; const _INSERT = 'INSERT INTO PRODUTO ' + '( ' + ' COD, ' + ' DESCRICAO, ' + ' COMPLEMENTO, ' + ' VLRAVISTA, ' + ' VLRAPRAZO, ' + ' LOCALIZACAO ' + ') ' + 'VALUES ' + '( ' + ' :COD, ' + ' :DESCRICAO, ' + ' :COMPLEMENTO, ' + ' :VLRAVISTA, ' + ' :VLRAPRAZO, ' + ' :LOCALIZACAO ' + '); '; var dsProd : TFDJsonDataSets; iInserts : Integer; begin dsProd := CM.ServerMetodosClient.GetProdutos(); Assert(TFDJSONDataSetsReader.GetListCount(dsProd) = 1); memAux.AppendData(TFDJSONDataSetsReader.GetListValue(dsProd, 0)); iInserts := memAux.RecordCount; qryAuxiliar.Active := False; qryAuxiliar.SQL.Clear; qryAuxiliar.SQL.Text := _INSERT; qryAuxiliar.Params.ArraySize := iInserts; while not memAux.EOF do begin qryAuxiliar.ParamByName('COD').AsIntegers[memAux.RecNo -1] := memAux.FieldByName ('pcodprod').AsInteger; qryAuxiliar.ParamByName('DESCRICAO').AsStrings[memAux.RecNo -1] := memAux.FieldByName ('pdescricao').AsString; qryAuxiliar.ParamByName('COMPLEMENTO').AsStrings[memAux.RecNo -1]:= memAux.FieldByName ('compl').AsString; qryAuxiliar.ParamByName('VLRAVISTA').AsFloats[memAux.RecNo -1] := memAux.FieldByName ('pprecovenda').AsFloat; qryAuxiliar.ParamByName('VLRAPRAZO').AsFloats[memAux.RecNo -1] := memAux.FieldByName ('pprecoprazo').AsFloat; qryAuxiliar.ParamByName('LOCALIZACAO').AsStrings[memAux.RecNo -1]:= memAux.FieldByName ('plocalizacaoprod').AsString; memAux.Next; end; qryAuxiliar.Execute(iInserts, 0); end;
E aqui a forma na qual criei a database do SQLite
CREATE TABLE [PRODUTO]( [COD] INTEGER PRIMARY KEY AUTOINCREMENT, [DESCRICAO] VARCHAR(50), [COMPLEMENTO] VARCHAR(100), [VLRAVISTA] NUMERIC(15, 3), [VLRAPRAZO] NUMERIC(15, 2), [LOCALIZACAO] VARCHAR(10));
Agradeço desde já !!
Henrique Nascimento
Posts
23/11/2017
Rafael Bosco
P.S: Não entendo muito bem de SQLite, mas, você está executando o QryAuxiliar.Execute(iInserts, 0) depois do WHILE, eu vi que você colocou um ArraySize da Query pela contagem de registros do seu MemAux, não seria melhor colocar o QryAuxiliar.ExecSQL dentro do seu WHILE e após isso dar o QtyAuxiliar.Next? Apenas uma opinião.
24/11/2017
Henrique Nascimento
24/11/2017
Raffael Mendonça
1- você confirmou se o INSERT gravou no banco?
2- de que forma você esta "trazendo os dados do SQLite"?
24/11/2017
Henrique Nascimento
Clique aqui para fazer login e interagir na Comunidade :)