Erro ao clicar no insert

Delphi

29/04/2014

Ola a clicar no botão insert aparece o seguinte erro "... raised exception class TDBXError with message 'unable to opne database file'.
Pesquisei bastante no google e não encontrei nada alguem sabe que erro é esse e como arrumar?

Estou usando o delphi xe6, windows 8.1 e sqlite.

obrigado
Wilton Júnior

Wilton Júnior

Curtidas 0

Respostas

Ricardo

Ricardo

29/04/2014

Esse erro aparece quando o SQLite já está em modo de inserção e a tabela esta automaticamente bloqueada para tal função.

Vale lembrar que o SQLite só permite uma operação de inserção por vez, já consultas podem ser feitas várias ao mesmo tempo.
GOSTEI 0
Wilton Júnior

Wilton Júnior

29/04/2014

Ricardo Cardoso vc quer dizer que o que fiz ta errado então:

procedure TFrmManutencao.FormShow(Sender: TObject);
begin
CdsQuery.Close;
with query do
begin
sql.Clear;
sql.Add('select * from tabcad');
if WOpc = 1 then
sql.Add('where id is null');
end;
CdsQuery.Open;

if cdsquery.IsEmpty then
begin
with wtabvir do
begin
close;
sql.Clear;
sql.Add('select MAX(ID) as ID from tabcad');
open;
end;
Edit1.Text := IntToStr(wtabvir.FieldByName('ID').AsInteger + 1);
Edit2.Text := datetimetostr(now);
Cdsquery.Insert;
end;


Edit3.SetFocus;
end;
GOSTEI 0
Ricardo

Ricardo

29/04/2014

Ricardo Cardoso vc quer dizer que o que fiz ta errado então:

procedure TFrmManutencao.FormShow(Sender: TObject);
begin
CdsQuery.Close;
with query do
begin
sql.Clear;
sql.Add('select * from tabcad');
if WOpc = 1 then
sql.Add('where id is null');
end;
CdsQuery.Open;

if cdsquery.IsEmpty then
begin
with wtabvir do
begin
close;
sql.Clear;
sql.Add('select MAX(ID) as ID from tabcad');
open;
end;
Edit1.Text := IntToStr(wtabvir.FieldByName('ID').AsInteger + 1);
Edit2.Text := datetimetostr(now);
Cdsquery.Insert;
end;


Edit3.SetFocus;
end;


Não, até porque você não tinha postado o código antes. Nesse código que você postou em nenhum lugar a tabela esta ficando aberta, a não ser que em outra parte do seu fonte isso esteja acontecendo. Mas é o seguinte; Quando comecei a estudar o funcionamento do SQLite, quebrei a cabeça durante dias para conseguir gravar algo no banco, e não tive sucesso.

Pois bem depois de muito procurar pela net (e ver que não tem nada) recorri a documentação oficial do SQLite, que por sinal não presta, mas resolveu o meu problema e era justamente em ralação a chave primária.

A documentação diz que; a chave primária teria que ser auto incremento e na hora de salvar as informações no banco o campo chave primária eu tenho que passar o valor como null ou simplesmente ignora-la. Antes eu estava tentando passar o valor manualmente incrementando +1 ao último valor salvo, mas não gravava no banco de jeito nenhum.

Assim a documentação do SQlite é confusa pra caramba e cheia de contradições com a prática dentro do banco, fala até que para declarar a chave primaria, basta declarar o campo como "INT NOT NULL", mas não adianta fazer isso que não da certo, tem que declarar "primary key" e documentação diz que não precisa.

Mas enfim, todas as vezes que preciso trabalhar como SQLite a chave primária é sempre auto incremento, já que não houve outra alternativa a ser feita. Pelo menos eu não consegui.

Não sei se as informações podem te ajudar. Qualquer coisa diz aê.
GOSTEI 0
Wilton Júnior

Wilton Júnior

29/04/2014

Eu consegui resolver o problema com sqlconeccion até ai da certo, mais ainda não consigo fazer insert
GOSTEI 0
POSTAR