DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 
DevWare  
Novidade: DevMedia lança o DevWare - Saiba mais!


  Este é um post disponível para assinantes MVP
Você também pode acessá-lo através de Créditos DevMedia.  Clique aqui para saber mais!

Video: Criando rotina para listar Campos da tabela – Curso de criação de uma aplicação para repasse de dados com Delphi – Parte 6

Neste vídeo aula, vamos programar em nosso projeto, uma rotina para capturarmos a lista de campos existentes em uma determinada tabela do banco de dados e exibir a lista em um componente do tipo TListBox.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você gostaria de comentar o que não lhe agradou?

Tempo:  14:34 min

Mini resumo: Neste vídeo aula, vamos programar em nosso projeto, uma rotina para capturarmos a lista de campos existentes em uma determinada tabela do banco de dados e exibir a lista em um componente do tipo TListBox. Para isso criaremos uma procedure onde passaremos como parâmetro o componente para receber a lista, a indicação de Origem ou destino e o nome da tabela, que será capturado previamente pela procedure de leitura da lista de tabelas, criada na etapa anterior do curso.

Metodologia de desenvolvimento do exemplo: A metodologia do curso é baseada na criação de um projeto para repasse de dados entre bancos de mesma estrutura ou diferentes, podendo ser DBF/Paradox, Firebird/Interbase, Acess, SQLServer ou MySQL. Utilizaremos para isso o delphi 7 com seus componentes de conexão com banco de dados BDe e ADO. Serão montados dois projetos. O primeiro para gravar as configurações de conexão através da classe TIniFile, e o segundo para realizará o processamento.

Tecnologias utilizadas: Delphi, BDe, Ado, ClientDataSet.

Exemplos construídos: Aplicação para repassar dados entre banco de dados.

Palavras-chave: Delphi, DBF, SQLServer, MySQL, Acessl.

Este post faz parte do Curso Criação de uma aplicação para repasse de dados com Delphi

Luis Carlos Godinho
Programador formado em 1995, pela ETEIT – Escola técnica da UNIVALE. Atualmente trabalhando com a plataforma Delphi. Tem se dedicado nos últimos anos, ao desenvolvimento de aplicações PAF-ECF, SPED fiscal e NFe.
O que você achou deste post?

    8 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Marco Polo Viana.
Prezado Luis,
Estou na 6ª vídeo-aula do curso de Repasse de dados com Delphi e XML e considero ela um divisor de águas, onde se o que fizemos não roda igual ao que vc mostrou até essa vídeo-aula, inclusive mostrando o seu exemplo rodando ao final desta aula, não adianta seguir sem entender o que está errado.
Abaixo listo pontualmente o que ocorre:
1 - ao executar, ocorre: List index out of bounds(0). Sendo que nos listBox está conforme descrito na aula e nos seus fontes;

2 - Depois de dar OK, mostra: No fields defined. Cannot create dataset. O cliente-dataset do dbx está igual na vídeo aula sem nenhuma base indicada direto.

3 - Em seguida, consigo gerar o arquico config. Porém na rotina de listar as tabelas e os campos ele não traz, e na vídeo-aula, exatamente ao final da 6a aula sua aplicação traz as tabelas e campos origem e destino.

Como aqui não podemos fazer upload do código escriuto para constatar identidade com a vídeo-aula, como podempos sanar essa dúvidas e prosseguir com o curso?


Conto com sua compreensão.

Abs
[há +1 ano] - Responder

 

Wesley Yamazack
Olá Marco, entramos em contato com o autor para que ele possa te auxiliar, tudo bem ? Peço que aguarde um pouco até que o mesmo possa retornar o contato.

Um abraço.
[há +1 ano] - Responder
 

[autor] Luis Carlos Godinho
Olá!

A qual dos 2 executaveis se refere. O Repasse.exe ou o P_repasse.exe?

Fiz os testes com os codigos do video em questão e não apresntou este problema.

Faça um debug no sistema ai e post o trecho do codigo onde ocorre o erro. assim ficará mais facil para te ajudar, pois com as informações prestadas eu não consegui entender o que esta errado ai.

Abs.!
[há +1 ano] - Responder
 

Marco Polo Viana.
A princípio o problema começa aqui:

procedure TDM_Repasse.DataModuleCreate(Sender: TObject);
begin
Leini;
case iTipoO of
0 : begin // dbf
dbfOrigem.Connected := false;
dbfOrigem.Params.Strings[0] := 'Path='+sPathO;
dbfOrigem.Connected := true;
end;
1 : begin // firebird
fbOrigem.Connected := false;
fbOrigem.Params.Values['Database'] := sPathO;
fbOrigem.Params.Values['User_Name'] := sUsuarioO;
fbOrigem.Params.Values['Password'] := sSenhaO;
fbOrigem.Connected := true;
end;
2 : begin // access
accessOrigem.Connected := false;
accessOrigem.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
'DataSource='+sPathO+';'+'Persist Security Info=False';
accessOrigem.Connected := true;
end;
3 : begin // mssql
msSqlOrigem.Connected := false;
msSqlOrigem.ConnectionString := 'Provider=SQLOLEDB.1;'+
'Integrated Security = SSPI;'+
'Persist Security Info=False;'+
'Initial Catalog='+sCatalogoO+';'+
'Data Source='+sUsuarioO;
msSqlOrigem.Connected := true;
end;
4 : begin // mysql
MySqlOrigem.Connected := false;
MySqlOrigem.ConnectionString := 'Provider=MySqlProv;'+
'Persist Security Info=False;'+
'User ID='+sUsuarioO+';'+
'Data Source='+sCatalogoO;
MySqlOrigem.Connected := true;
end;
end;

case iTipoD of
0 : begin // dbf
dbfDestino.Connected := false;
dbfDestino.Params.Strings[0] := 'Path='+sPathD;
dbfDestino.Connected := true;
end;
1 : begin // firebird
fbDestino.Connected := false;
fbDestino.Params.Values['Database'] := sPathD;
fbDestino.Params.Values['User_Name'] := sUsuarioD;
fbDestino.Params.Values['Password'] := sSenhaD;
fbDestino.Connected := true;
end;
2 : begin // access
accessDestino.Connected := false;
accessDestino.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
'DataSource='+sPathD+';'+'Persist Security Info=False';
accessDestino.Connected := true;
end;
3 : begin // mssql
msSqlDestino.Connected := false;
msSqlDestino.ConnectionString := 'Provider=SQLOLEDB.1;'+
'Integrated Security = SSPI;'+
'Persist Security Info=False;'+
'Initial Catalog='+sCatalogoD+';'+
'Data Source='+sUsuarioD;
msSqlDestino.Connected := true;
end;
4 : begin // mysql
MySqlDestino.Connected := false;
MySqlDestino.ConnectionString := 'Provider=MSDASSQL.1;'+
'Persist Security Info=False;'+
'User ID='+sUsuarioD+';'+
'Data Source='+sCatalogoD;
MySqlDestino.Connected := true;
end;
end;

end;


Aqui também:

procedure TDM_Repasse.LeIni;
begin
ArqIni := TInifile.Create(ExtractFilePath(Application.ExeName)+'perdata.ini');
iTipoO := ArqIni.ReadInteger('ORIGEM','TIPO_BD',0);
sPathO := ArqIni.ReadString('ORIGEM','PATH','');
sUsuarioO := ArqIni.ReadString('ORIGEM','USUARIO','');
sSenhaO := ArqIni.ReadString('ORIGEM','SENHA','');
sCatalogoO := ArqIni.ReadString('ORIGEM','CATALOGO','');

iTipoD := ArqIni.ReadInteger('DESTINO','TIPO_BD',0);
sPathD := ArqIni.ReadString('DESTINO','PATH','');
sUsuarioD := ArqIni.ReadString('DESTINO','USUARIO','');
sSenhaD := ArqIni.ReadString('DESTINO','SENHA','');
sCatalogoD := ArqIni.ReadString('DESTINO','CATALOGO','');

ArqIni.Free;
end;


Neste evento:
Application.CreateForm(TfrmMigracao, frmMigracao);

"Exception class EStringListError with message 'List index out of bound(0)'"


e aqui gera o erro do dataset:

procedure TfrmMigracao.FormCreate(Sender: TObject);
begin
if not cdsEsquema.Active then
cdsEsquema.CreateDataSet;
cdsEsquema.EmptyDataSet;
end;

"Exception class EDatabaseError with message 'No fields defined. Cannot create dataset'"


Abraços


[há +1 ano] - Responder
 

Marco Polo Viana.
Uma observação: Deixei tudo em um único executável, dividido em abas... uma aba com a configuração. Um outro form no mesmo executável com a listagem dos dados.

abs
[há +1 ano] - Responder
 

[autor] Luis Carlos Godinho
Olá!

Aparentemente não esta criado os campo no ClientDataSet de memoria (CdsEsquema). Como mudou a estrutura do sistema certamente deixou algum detalhe para traz que da forma como esta passando não tenho como saber. Mas pelas caracteristicas apresentadas o problema esta neste ClientDataSet temporario pois parece estar tentando carregar os campos no DbGrid que não existem no mesmo.

Abs.!
[há +1 ano] - Responder
 

Marco Polo Viana.
Correto, mas ao final da 6a aula o seu exemplo lista as tabelas e campos no listBox sem o datagrid e nao houve nada configurado especificamente no clientdataset. Por isso questiono no final da 6a aula seu exmplo no video trazer as tabela e campos eo meu executado iddentico nao trazer e trazer esses erros.

Abs
[há +1 ano] - Responder
 

[autor] Luis Carlos Godinho
Já conferiu as conexões de bancos de dados. Analizando aqui este List index of bounds esta deve estar ocorrendo exatamente quando é passado o comando de conectado igual a true. Se for o erro esta na sua configuração de conexão com o banco. Dai realmente não será listado nada nos listbox pois não foi conectado ao banco.

Abs.!
[há +1 ano] - Responder
 
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
[Fechar] Você precisa estar logado para dar seu feedback.

Clique aqui para efetuar o login

Caso não tenha um cadastro DevMedia, clique aqui para se cadastrar (gratuito)
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03