Access Violation II

Delphi

03/05/2003

Bom, até agora ninguem respondeu minha pergunta, será que faço totalmente errado ou meu código tá complicado ou sem lógica, alguem poderia dar um caminho diferente então. Diferente talvez do que descrevi na 1ª pergunta acesss violation.
Obrigado por sua atencao desde já, é que to ficando preocupado, isto é para segunda-feira o cliente é chato para ajudar.

_____________________________________________________________
1ª pergunta foi assim:
Utilizando o Delphi 6, DBExpress e Interbase 6 fiz um form com 5 TEdits, 2 TMaskedit, e um TMEmo (observações) e um componente TSqlDataset que realiza um comando INSERT INTO em uma tabela onde os values sao parametros. Ao clicar no botão gravar passo os parametros, inclusive verifico se no maskedits que são datas foram digitadas, pois não são obrigatórias. Ele grava corretamenta tabela tudo OK, mas ao sair do formulário vem o erro ACCESS VIOLATION, percebi que ao acessar o form e sair sem realizar a operação de gravação isto não acontece, tenho certeza de que está no código de gravação, mas encontro o erro. Alguém tem alguma idéia, segue o código abaixo:

With QI do begin // QI - name da TSqlQuery de inclusão
Close;
Params[0].asInteger := StrToInt(ECod.text);
Params[1].asInteger := nCod; //Variavel que obtenho o valor antes deste codigo é um sequencial somente.
Params[2].asInteger := StrToInt(EEmp.text);
Params[3].asInteger := StrToInt(EVag.text);
Params[4].asString := EFun.text;
Params[5].asCurrency := ESal.ascurrency // Este esal é um componente para valores TFpnumericEdit sempre uso;
if Trim(EObs.text) <> ´´ then begin
Params[6].asMemo := EObs.Lines.text; // Este é o memo
end else begin
Params[6].asMemo := ´ ´;
end;
if EEnc.text <> ´ / / ´ then begin
Params[7].asDate := StrToDate(EEnc.text);
end else begin
Params[7].asDate := 0;
end;
if ECon.text <> ´ / / ´ then begin
Params[8].asDate := StrToDate(ECon.text);
end else begin
Params[8].asDate := 0;
end;
if EExp.text <> ´ / / ´ then begin
Params[9].asDate := StrToDate(EExp.text);
end else begin
Params[9].asDate := 0;
end;
ExecSql;
end;

Estou desconfiado do campo Blob no Interbase, quando atualizo através do comando INSERT INTO, será possível ? Todos os parametros foram definidos com seus tipos corretamente.
Se alguém puder ajudar, desde já agradeço.
César.
_____________________________________________________________


Cesarpir

Cesarpir

Curtidas 0

Respostas

Db

Db

03/05/2003

O código citado por si só não é suficiente para gerar acess violation... deve ter mais coisa...


GOSTEI 0
Farore

Farore

03/05/2003

Eu tentaria ir pelo comando insert.

Fabio Reis.


GOSTEI 0
4_olho

4_olho

03/05/2003

Colçega,

Apesar de sua questão estar repleta de informações, não é nesta parte que está o erro. Lembre-se que estamos partindo da SUA suposição de onde está o erro. E se você estiver errado ?

Você escreveu ´Ele grava corretamenta tabela tudo OK, mas ao sair do formulário vem o erro ACCESS VIOLATION, percebi que ao acessar o form e sair sem realizar a operação de gravação isto não acontece, tenho certeza de que está no código de gravação, mas encontro o erro. ´

Como diz que a tabela grava corretamente, ENTÃO a SQL está correta e o erro só se dá na SAÍDA do formulário. O que você faz ao fechar o formulário ? É de se supor então que você está tentando gravar o (ou no) registro errado, ou ainda, está tentando usar um valor já existente em um campo ÚNICO (campo chave).

Estou desconfiado dos 2 primeiros campos, que parecem ser chaves. Dê uma olhada.

Boa sorte !


GOSTEI 0
Cic.pop

Cic.pop

03/05/2003

Faça um tratamento de erro. Coloque o código entre try except como abaixo:

try

código

except
on E:exception do
Showmessage(´ERRO: ´ + E:Message)
end;

Talvez possa mosstrar onde está o erro.


GOSTEI 0
POSTAR