Fórum [FireDAC][Phys][SQLite] ERROR: UNIQUE constraint failed - AJUDEM PORFAVOOOR!! #589085
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
Curtir tópico
+ 0Posts
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.
Gostei + 0
24/11/2017
Henrique Nascimento
Gostei + 0
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"?
Gostei + 0
24/11/2017
Henrique Nascimento
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)