Erro Delphi Argument out of range
Meus prezados,
Tenho uma função de listar os dados da tabela no DBGrid , mas quando clico no botão, aparece a mensagem " Argument out of range". Alguém pode me ajudar?
Segue o código abaixo:
procedure TPageCadastroPessoas.btnPesquisarClick(Sender: TObject);
var
lGrid : TDBGrid;
FDatasource : TDataSource;
begin
PnlPrincipal.ActiveCard := cardPesquisa;
FDatasource := TDataSource.Create(nil);
FController.Pessoa.Build.ListarTodos;
try
FController.Pessoa.Build.DataSource(FDatasource).ListarTodos;
if FDatasource.DataSet.IsEmpty then
begin
ShowMessage(''''Não existem dados a serem visualizados '''');
Exit;
end;
FDatasource.DataSet.First;
DBGrid1.Columns.Clear;
DBGrid1.Columns.Add;
FDatasource.DataSet.First;
while not FDatasource.DataSet.Eof do
begin
DBGrid1.Columns[0].FieldName := FDatasource.DataSet.FieldByName
(''''ID'''').AsString;
DBGrid1.Columns[1].FieldName := FDatasource.DataSet.FieldByName
(''''TIPOCADASTRO'''').AsString;
DBGrid1.Columns[2].FieldName := FDatasource.DataSet.FieldByName
(''''NOME'''').AsString;
DBGrid1.Columns[3].FieldName := FDatasource.DataSet.FieldByName
(''''DATANASCREG'''').AsString;
DBGrid1.Columns[4].FieldName := FDatasource.DataSet.FieldByName
(''''CPFCNPJ'''').AsString;
DBGrid1.Columns[8].FieldName := FDatasource.DataSet.FieldByName
(''''TELEFONE'''').AsString;
DBGrid1.Columns[5].FieldName := FDatasource.DataSet.FieldByName
(''''CIDADE'''').AsString;
DBGrid1.Columns[6].FieldName := FDatasource.DataSet.FieldByName
(''''BAIRRO_DISTRITO'''').AsString;
DBGrid1.Columns[7].FieldName := FDatasource.DataSet.FieldByName
(''''ESTADO'''').AsString;
DBGrid1.Columns[9].FieldName := FDatasource.DataSet.FieldByName
(''''EMAIL'''').AsString;
DBGrid1.Columns[10].FieldName := FDatasource.DataSet.FieldByName
(''''ATIVO'''').AsString;
DBGrid1.Columns[11].FieldName := FDatasource.DataSet.FieldByName
(''''DATAINICIO'''').AsString;
DBGrid1.Columns[12].FieldName := FDatasource.DataSet.FieldByName
(''''DATAFIM'''').AsString;
FDatasource.DataSet.Next;
end;
finally
FDatasource.DisposeOf;
end;
end;
Agradeço a ajuda.
Tenho uma função de listar os dados da tabela no DBGrid , mas quando clico no botão, aparece a mensagem " Argument out of range". Alguém pode me ajudar?
Segue o código abaixo:
procedure TPageCadastroPessoas.btnPesquisarClick(Sender: TObject);
var
lGrid : TDBGrid;
FDatasource : TDataSource;
begin
PnlPrincipal.ActiveCard := cardPesquisa;
FDatasource := TDataSource.Create(nil);
FController.Pessoa.Build.ListarTodos;
try
FController.Pessoa.Build.DataSource(FDatasource).ListarTodos;
if FDatasource.DataSet.IsEmpty then
begin
ShowMessage(''''Não existem dados a serem visualizados '''');
Exit;
end;
FDatasource.DataSet.First;
DBGrid1.Columns.Clear;
DBGrid1.Columns.Add;
FDatasource.DataSet.First;
while not FDatasource.DataSet.Eof do
begin
DBGrid1.Columns[0].FieldName := FDatasource.DataSet.FieldByName
(''''ID'''').AsString;
DBGrid1.Columns[1].FieldName := FDatasource.DataSet.FieldByName
(''''TIPOCADASTRO'''').AsString;
DBGrid1.Columns[2].FieldName := FDatasource.DataSet.FieldByName
(''''NOME'''').AsString;
DBGrid1.Columns[3].FieldName := FDatasource.DataSet.FieldByName
(''''DATANASCREG'''').AsString;
DBGrid1.Columns[4].FieldName := FDatasource.DataSet.FieldByName
(''''CPFCNPJ'''').AsString;
DBGrid1.Columns[8].FieldName := FDatasource.DataSet.FieldByName
(''''TELEFONE'''').AsString;
DBGrid1.Columns[5].FieldName := FDatasource.DataSet.FieldByName
(''''CIDADE'''').AsString;
DBGrid1.Columns[6].FieldName := FDatasource.DataSet.FieldByName
(''''BAIRRO_DISTRITO'''').AsString;
DBGrid1.Columns[7].FieldName := FDatasource.DataSet.FieldByName
(''''ESTADO'''').AsString;
DBGrid1.Columns[9].FieldName := FDatasource.DataSet.FieldByName
(''''EMAIL'''').AsString;
DBGrid1.Columns[10].FieldName := FDatasource.DataSet.FieldByName
(''''ATIVO'''').AsString;
DBGrid1.Columns[11].FieldName := FDatasource.DataSet.FieldByName
(''''DATAINICIO'''').AsString;
DBGrid1.Columns[12].FieldName := FDatasource.DataSet.FieldByName
(''''DATAFIM'''').AsString;
FDatasource.DataSet.Next;
end;
finally
FDatasource.DisposeOf;
end;
end;
Agradeço a ajuda.
Mauricio Bomfim
Curtidas 0
Respostas
Arthur Heinrich
26/09/2023
Você está atribuindo o conteúdo de uma coluna à propriedade FieldName?
DBGrid1.Columns[0].FieldName := FDatasource.DataSet.FieldByName(''''ID'''').AsString;
É possível isto esteja errado e exista alguma limitação para o nome de uma coluna. Ao atribuir o valor de uma coluna String do DataSource para o FieldName, pode estar violando este tamanho máximo.
DBGrid1.Columns[0].FieldName := FDatasource.DataSet.FieldByName(''''ID'''').AsString;
É possível isto esteja errado e exista alguma limitação para o nome de uma coluna. Ao atribuir o valor de uma coluna String do DataSource para o FieldName, pode estar violando este tamanho máximo.
GOSTEI 0
Mauricio Bomfim
26/09/2023
Você está atribuindo o conteúdo de uma coluna à propriedade FieldName?
DBGrid1.Columns[0].FieldName := FDatasource.DataSet.FieldByName(''''ID'''').AsString;
É possível isto esteja errado e exista alguma limitação para o nome de uma coluna. Ao atribuir o valor de uma coluna String do DataSource para o FieldName, pode estar violando este tamanho máximo.
DBGrid1.Columns[0].FieldName := FDatasource.DataSet.FieldByName(''''ID'''').AsString;
É possível isto esteja errado e exista alguma limitação para o nome de uma coluna. Ao atribuir o valor de uma coluna String do DataSource para o FieldName, pode estar violando este tamanho máximo.
Pode me dizer o que devo usar para substitui o FiledName?
GOSTEI 0
Arthur Heinrich
26/09/2023
Aparentemente, tudo o que você precisa fazer é indicar para o DBGrid, a origem dos dados (DataSource). A partir disso, ele identificará sozinho a lista de colunas, o datatype de cada uma e carregará os dados.
DBGrid1.DataSource := FDatasource;
GOSTEI 0