Fórum Problema... migrando sistema do BDE para ADO #187226
08/10/2003
0
Estou migrando um sistema e estou com algumas dificuldades..
Esta dando a seguinte mensagem:
[b:7105048d2c]Current Provider does not support the necessary interface for index functionality[/b:7105048d2c]
O procedimento do botão pesquisar antigo:
[color=darkred:7105048d2c]var
Resultado: string;
SalvaIndice: string;
begin
PageControl.ActivePage := Page1;
SalvaIndice := MyTable.IndexName;
MyTable.IndexName := IndiceCampoChave(MyTable);
Resultado := Pesquisa(MyTable.TableName, MyTable.FieldDefs.Items[0].Name, MyTable.FieldDefs.Items[1].Name);
if Resultado <> MyTable.Fields[0].AsString then
begin
Screen.Cursor := crHourGlass;
MyTable.FindKey([Resultado]);
Screen.Cursor := crDefault;
end;
MyTable.IndexName := SalvaIndice;[/color:7105048d2c]
eu mudei e ficou assim, não sei se está certo:
[color=blue:7105048d2c]var
Resultado: string;
SalvaIndice: string;
begin
PageControl.ActivePage := Page1;
SalvaIndice := MyTable.IndexName;
MyTable.IndexName := IndiceCampoChave(MyTable);
Resultado := Pesquisa(MyTable.TableName, [b:7105048d2c]MyTable.FieldDefList.FieldDefs[0].Name,MyTable.FieldDefList.FieldDefs[1].Name[/b:7105048d2c]);
if Resultado <> MyTable.Fields[0].AsString then
begin
Screen.Cursor := crHourGlass;
[b:7105048d2c]MyTable.Locate(Resultado,´´,[LoPartialKey, LoCaseInsensitive]);[/b:7105048d2c]
Screen.Cursor := crDefault;
MyTable.IndexName := SalvaIndice;[/color:7105048d2c]
A função IndiceCampoChave:
function IndiceCampoChave(Table: TAdoTable): string;
var
Cont: byte;
begin
// se o índice for da chave primária...
Table.IndexDefs.Update;
for Cont := 0 to Table.IndexDefs.Count -1 do
if ixPrimary in Table.IndexDefs.Items[Cont].Options then
begin
Result := Table.IndexDefs.Items[Cont].Name;
Break;
end;
end;
A função Pesquisa
function Pesquisa(Tabela, CampoChave, CampoDeBusca: string): string;
// Retorna um valor de CampoChave pesquisado através de CampoDeBusca.
// EX: Pesquisa(´Clientes´, ´Codigo´, ´Nome´)
var
TextoSQL: string;
begin
TextoSQL := ´SELECT ´ + CampoChave + ´, ´ + CampoDeBusca + ´ FROM ´ + Tabela + ´ WHERE ´ + CampoDeBusca + ´ LIKE ´;
FmPesPadrao.SQL := TextoSQL;
FmPesPadrao.ComplementoSQL := ´ORDER BY ´ + CampoDeBusca;
if FmPesPadrao.ShowModal = mrOk
then Result := FmPesPadrao.RegistroAtual
else Result := ´´;
end;
Será que eu estou errando em alguma coisa:
No formulário de Pesquisa, tem o botão OK:
[color=blue:7105048d2c] if (Query1.Active) and (Query1.RecordCount <> 0)
then RegistroAtual := Query1.Fields[0].Value
else RegistroAtual := ´´;
ModalResult := mrOk;[/color:7105048d2c]
Alguém poderia me ajudar
Ficaria grato
[]´s
Esta dando a seguinte mensagem:
[b:7105048d2c]Current Provider does not support the necessary interface for index functionality[/b:7105048d2c]
O procedimento do botão pesquisar antigo:
[color=darkred:7105048d2c]var
Resultado: string;
SalvaIndice: string;
begin
PageControl.ActivePage := Page1;
SalvaIndice := MyTable.IndexName;
MyTable.IndexName := IndiceCampoChave(MyTable);
Resultado := Pesquisa(MyTable.TableName, MyTable.FieldDefs.Items[0].Name, MyTable.FieldDefs.Items[1].Name);
if Resultado <> MyTable.Fields[0].AsString then
begin
Screen.Cursor := crHourGlass;
MyTable.FindKey([Resultado]);
Screen.Cursor := crDefault;
end;
MyTable.IndexName := SalvaIndice;[/color:7105048d2c]
eu mudei e ficou assim, não sei se está certo:
[color=blue:7105048d2c]var
Resultado: string;
SalvaIndice: string;
begin
PageControl.ActivePage := Page1;
SalvaIndice := MyTable.IndexName;
MyTable.IndexName := IndiceCampoChave(MyTable);
Resultado := Pesquisa(MyTable.TableName, [b:7105048d2c]MyTable.FieldDefList.FieldDefs[0].Name,MyTable.FieldDefList.FieldDefs[1].Name[/b:7105048d2c]);
if Resultado <> MyTable.Fields[0].AsString then
begin
Screen.Cursor := crHourGlass;
[b:7105048d2c]MyTable.Locate(Resultado,´´,[LoPartialKey, LoCaseInsensitive]);[/b:7105048d2c]
Screen.Cursor := crDefault;
MyTable.IndexName := SalvaIndice;[/color:7105048d2c]
A função IndiceCampoChave:
function IndiceCampoChave(Table: TAdoTable): string;
var
Cont: byte;
begin
// se o índice for da chave primária...
Table.IndexDefs.Update;
for Cont := 0 to Table.IndexDefs.Count -1 do
if ixPrimary in Table.IndexDefs.Items[Cont].Options then
begin
Result := Table.IndexDefs.Items[Cont].Name;
Break;
end;
end;
A função Pesquisa
function Pesquisa(Tabela, CampoChave, CampoDeBusca: string): string;
// Retorna um valor de CampoChave pesquisado através de CampoDeBusca.
// EX: Pesquisa(´Clientes´, ´Codigo´, ´Nome´)
var
TextoSQL: string;
begin
TextoSQL := ´SELECT ´ + CampoChave + ´, ´ + CampoDeBusca + ´ FROM ´ + Tabela + ´ WHERE ´ + CampoDeBusca + ´ LIKE ´;
FmPesPadrao.SQL := TextoSQL;
FmPesPadrao.ComplementoSQL := ´ORDER BY ´ + CampoDeBusca;
if FmPesPadrao.ShowModal = mrOk
then Result := FmPesPadrao.RegistroAtual
else Result := ´´;
end;
Será que eu estou errando em alguma coisa:
No formulário de Pesquisa, tem o botão OK:
[color=blue:7105048d2c] if (Query1.Active) and (Query1.RecordCount <> 0)
then RegistroAtual := Query1.Fields[0].Value
else RegistroAtual := ´´;
ModalResult := mrOk;[/color:7105048d2c]
Alguém poderia me ajudar
Ficaria grato
[]´s
Erucci
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)