Este é um post disponível para assinantes MVPVideo: 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.
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.
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.
8 COMENTÁRIOS
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
Um abraço.
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.!
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
abs
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.!
Abs
Abs.!

download

