Fórum Indice paradox #155393
16/04/2003
0
(...)
Qdo o programa executa esta linha acima ele mostra a seguinte mensagem:
TbPoMKU No index currently active.
Mas esta tabela não tem índices.
Pq ele dá essa mensagem? O que devo fazer?
Obrigada
Debora
Curtir tópico
+ 0Posts
16/04/2003
Midas
o metodo findkey procura uma chave exata ... por tanto na sua tabela tem que haver um indice por mesano ... como esta querendo fazer uma pesquisa em um indice que nao existe, eis a resposta do delphi .... assim aconselho que crie um indice secundario ... para que de certo o metodo ...
se ajudei sorria ... :P
Gostei + 0
16/04/2003
Debora
mas,... tenho uma dúvida (estou fazendo manutenção neste sistema)
Esta tabela não tem nenhum índice. Consultei os bancos anteriores, e nenhum deles tem índice secundário, a única coisa que a tabela tem é um tal de Dependent Tables com o nome de <Nome>. (Nuca vi isso.)
MesAno é uma variável do programa.
Aqui vai o código:
--------------- :cry: Por favor, não sei mais o que fazer :cry: ------------
Var
[color=red:58d554b900] MesFecIni,AnoFecIni,MesAno :String;[/color:58d554b900]
mValMarKup : Real;
QrMarKup : TQuery;
VarTemp :Real;
begin
mValOs := 0.00;
mValMarKup:= 0.00;
QrMarKup := TQuery.Create(Application);
MesFecIni := copy(MaskEdit1.text,1,2);
AnoFecIni := copy(MaskEdit1.text,4,4);
MesAno := copy(MaskEdit1.Text,4,4)+copy(MaskEdit1.Text,1,2);
BitBtn1.Enabled := False;
Panel2.Caption := ´Verificando campos, aguarde...´;
Panel2.Visible := true;
Application.ProcessMessages;
if FechaMes then
begin
ShowMessage(´Processo de Checagem Ok.´);
if Importacao then
begin
Panel2.Visible := false;
Gauge1.Visible := false;
Application.ProcessMessages;
Panel2.Caption := ´Processando MARK_UP,Aguarde ...´;
Panel2.Visible := true;
Application.ProcessMessages;
QrMarKup.SQL.Clear;
QrMarKup.SQL.Add(´Select Sum(FeValFat) as Valfat from ::power::pofec Where FePerio = :FePerio´);
QrMarKup.ParamByName(´FePerio´).AsInteger := StrToInt(AnoFecIni+MesFecIni);
QrMarKup.Open;
[color=red:58d554b900] if Dm.TbPoMKU.FindKey([MesAno]) then[/color:58d554b900]
Dm.TbPoMKU.Delete;
Dm.TbPoMKU.Insert;
Dm.TbPoMKU.FieldByName(´MKPERIO´).asString := MesAno;
Dm.TbPoMKU.FieldByName(´MKVALFAT´).asFloat := QrMarKup.FieldByName(´ValFat´).asFloat;
Dm.TbPoMKU.Post;
QrMarKup.SQL.Clear;
QrMarKup.SQL.Add(´Select * from ::power::pocic Where ciperio = :ciperio ´);
QrMarKup.ParamByName(´ciperio´).AsString := MesAno;
QrMarKup.Open;
QrMarKup.First;
While not QrMarKup.eof do
Begin
// if (QrMarKup.fieldbyname(´CICENTRO´).AsString = ´54´) or (QrMarKup.fieldbyname(´CICENTRO´).AsString = ´52´) then
VarTemp := StrToInt(QrMarKup.FieldByName(´CICENTRO´).AsString);
if (VarTemp > 49) then
Begin
QrMarKup.Next;
Continue;
End;
mValMarKup := mValMarKup+QrMarKup.fieldbyname(´CIVALOR´).asFloat;
QrMarKup.Next;
End;
Dm.TbPoMKU.FindKey([MesAno]);
Dm.TbPoMKU.Edit;
Dm.TbPoMKU.FieldByName(´MKVALDES´).asFloat := mValMarKup;
Dm.TbPoMKU.Post;
Dm.TbPoMKU.Edit;
Try
Dm.TbPoMKU.FieldByName(´MKMARKUP´).asFloat := ((Dm.TbPoMKU.FieldByName(´MKVALDES´).asFloat/Dm.TbPoMKU.FieldByName(´MKVALFAT´).asFloat)*100);
except
Dm.TbPoMKU.FieldByName(´MKMARKUP´).asFloat := 0 ;
End;
Dm.TbPoMKU.Post;
Panel2.Visible := false;
Application.ProcessMessages;
ShowMessage(´Processo de Importação Ok.´);
end
else
begin
Panel2.Visible := false;
Gauge1.Visible := false;
Application.ProcessMessages;
ShowMessage(´Atenção - erro no processo de importação.´);
ShowMessage(´Comunique o responsável imediatamente.´);
BitBtn1.Enabled := true;
Exit;
end;
end
else
begin
Panel2.Visible := false;
Gauge1.Visible := false;
Application.ProcessMessages;
BitBtn1.Enabled := true;
Exit;
end;
BitBtn1.Enabled := True;
FreeAndNil(QrMarKup);
FrmFecMe.Close;
end;
Gostei + 0
17/04/2003
Silvino Cavassana
Se o que você quer é localizar nesta tabela o registro que contenha no campo MKPERIO o valor que está na variável MesAno, faça o seguinte:
após as duas barras // são só comentários
// no lugar de if Dm.TbPoMKU.FindKey([MesAno]) then
// Dm.TbPoMKU.Delete; INCLUA AS SEGUINTES LINHAS:
Dm.TbPoMKU.First; //posiciono no primeiro registro da tabela
While not Dm.TbPoMKU.Eof and Dm.TbPoMKU.FieldByName
(´MKPERIO´).Value <> MesAno;
begin
Dm.TbPoMKU.Next; // percorro a tabela até encontrar MesAno no
end; // campo MKPERIO ou até atingir o fim do arquivo
if not Dm.TbPoMKU.Eof then Dm.TbPoMKU.Delete; // se não for fim do
// arquivo, é porque encontrei o registro,
// eliminando-o então
//continua sua rotina
Dm.TbPoMKU.Insert;.....
Gostei + 0
17/04/2003
Silvino Cavassana
Pelo que entendi, você tem uma tabela Paradox chamada TBPOMKU e nesta tabela existe um campo chamado MKPERIO do tipo String onde você armazena o conteúdo da variável MesAno.
Se o que você quer é localizar nesta tabela o registro que contenha no campo MKPERIO o valor que está na variável MesAno, faça o seguinte:
após as duas barras // são só comentários
// no lugar de if Dm.TbPoMKU.FindKey([MesAno]) then
// Dm.TbPoMKU.Delete; INCLUA AS SEGUINTES LINHAS:
Dm.TbPoMKU.First; //posiciono no primeiro registro da tabela
While not Dm.TbPoMKU.Eof and Dm.TbPoMKU.FieldByName
(´MKPERIO´).Value <> MesAno do // na outra mensagem sobrou o ; e
begin // faltou o do
Dm.TbPoMKU.Next; // percorro a tabela até encontrar MesAno no
end; // campo MKPERIO ou até atingir o fim do arquivo
if not Dm.TbPoMKU.Eof then Dm.TbPoMKU.Delete; // se não for fim do
// arquivo, é porque encontrei o registro,
// eliminando-o então
//continua sua rotina
Dm.TbPoMKU.Insert;.....
Gostei + 0