Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
ola todos, tenho um codigo para criar indices em runtime, toda vez q ele termina aparece uma mensagem de erro, mas o codigo funciona mesmo assim, entaum gostaria de saber como eu faço para cancelar a mensagem de erro, fazer com q ela naum apareça?
Estou usando um componente chamado TDBF, q abre database do tipo dbf....
Começa aqui, nessa parte naum tem erro, soh to colocando pra saber oq tem no combobox1 e 2 :
procedure TForm1.Button5Click(Sender: TObject);
var
x:integer;
begin
opendialog1.Execute;
dbf1.TableName := opendialog1.FileName;//escolhe o arquivo do dbf q eh pra abrir
dbf1.Active:= true;//ativa a tabela
combobox2.Items := dbf1.FieldDefList;//faz com q o combobox receba o nome das colunas da tabela
for x:=0 to ComboBox2.Items.Count - 1 do
ComboBox1.Items.Add(ComboBox2.Items[x] + '.NDX');// preenche o combobox1 com o nome dos indices
end;
a mensagem de erro ocorre aki :
procedure TForm1.Button1Click(Sender: TObject);
var
x: integer;
begin
dbf1.Close;
dbf1.Exclusive := true;
dbf1.Open;
for x:=0 to ComboBox2.Items.Count -1 do
dbf1.AddIndex( combobox2.Items.Strings[x]+'.NDX', dbf1.FieldDefs[x].name,[]);//comando para criar os indices, com o nome da coluna mais a extensão .NDX , arquivo de indice
dbf1.OpenIndexFile(dbf1.FilePathFull + combobox1.Items.Strings[x]);// salva o indice para naum precisar ficar criando o tempo todo
end;procedure TIndexFile.CreateIndex(FieldDesc, TagName: string; Options: TIndexOptions);
var
tagNo: Integer;
fieldType: Char;
TempParser: TDbfIndexParser; TDbfFile(FDbfFile).CheckExclusiveAccess;
// parse index expression; if it cannot be parsed, why bother making index?
TempParser := TDbfIndexParser.Create(FDbfFile);
try
TempParser.ParseExpression(FieldDesc);
// check if result type is correct
fieldType := 'C';
case TempParser.ResultType of
etString:; { default set above to suppress delphi warning }
etInteger, etLargeInt, etFloat: fieldType := 'N';
else
raise EDbfError.Create(STRING_INVALID_INDEX_TYPE);//essa linha aqui abre a mensagem de erro, faz parte do componente, entaum acho melhor naum mexer nele se naum pode bugar o componente....
end;
finally
TempParser.Free;
end;O que esta havendo é uma excessão e não um erro, você pode optar por desabilitar no delphi essas excessões, mas será de forma geral, todas excessões que ocorrerem sem paralizar o projeto, não será exibida.
Menu Tools/debugger options/language exceptions/stop on delphi exceptions
esperto ter ajudado..
abs
naum parou o programa, mas a mensagem ainda aparece...
Não apresentará o erro, faça o teste..
abs
>
Não apresentará o erro, faça o teste..
abs
testei varias vezes e ainda apareceu o erro, soh naum parou o programa....
naum teria algum comando do tipo : do not showmessage error ...
Desconheço amigo..
Mas tenta colocar o parte do código onde ocorre o erro, dentro de um try, talvez isto o ajude a desviar da mensagem de erro.
abs
Deio post seu código p/ a gente poder analisar melhor, antes disso coloque um break point p/ você poder ver em que momento exato ocorre esse erro. Como você disse ele faz o procedimento mais em algum lugar ele esta retornando o erro.