Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jessica07

Delphi e Mysql

Recommended Posts


Boa tarde,


Estava precisando de uma ajuda pra conectar o mysql com o delphi, se puder ajudar agradeço.

Já copiei um arquivo para o delphi reconhecer os drivers do mysql 5.5.


Coloquei aquele componente TSQLConnection no meu data module, criei uma nova conexao no delphi, coloquei o servidor, o nome do meu database, usuario e a senha, testei a conexao e tudo ok.


Mas quando eu coloco o componente TSQLTable, na propriedade SQLConnection eu coloco o nome da minha conexao, mas quando vou selecionar a propriedade TableName, minhas tabelas nao aparecem.

Eu criei o database atraves do mysqlfront, só nao estou entendendo o pq nao mostra minhas tabelas.



Estou fazendo algo errado?

Quando eu seleciono o meu database e seleciono para mostrar uma tabela, era pra estar aparecendo no command line nao era?

Não consigo achar o erro.


Desde já agradeço.

Obrigada.


Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá! Tudo jóia?

 

Vamos por partes.

 

O primeiro ponto, qual a versão do Delphi você está utilizando?

 

Basicamente, o que você precisaria fazer é:

 

1- Ter um componente SQLConnection apontando para o driver do MySQL e configurado com as propriedades básicas do seu servidor, que seriam:

 

Host: Servidor a qual o MySQL está rodando.

User: Usuário que você cadastrou no banco de dados. Caso não tenha feito, o MySQL assumirá como root.

Pass: A senha que você cadastrou no banco de dados. Caso não tenha feito, o MySQL assumirá em branco.

Port: Por padrão, seria a 3306.

 

2) Ter um componente SQLTable ou SQLQuery com a propriedade Connection apontada para o seu SQLConnection acima.

 

Basicamente seria isso.

 

Se você puder, anexe seu exemplo e envie para que eu possa analisar e tentar te ajudar.

 

Até a próxima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

Consegui fazer a conexão usando o componente ZEOS :)

 

Porem agora estou com outro problema na hora de inserir os registros.

Quando vou inserir os registros na tabela, aparece um erro falando que o valor inteiro é invalido.

Esse é o codigo no qual estou usando:

 

dmPrincipal.qClientes.Close;
dmPrincipal.qClientes.SQL.Clear;
dmPrincipal.qClientes.SQL.Add('insert into clientes');
dmPrincipal.qClientes.SQL.Add('(id_cli, cli_nome, cli_documento, cli_fantasia, cli_endereco, cli_bairro, cli_cidade, cli_cep, cli_uf, cli_tel, cli_fax, cli_cel, cli_obs, cli_email, cli_dtCadastro, cli_pessoa, id_vend, cli_contato)');
dmPrincipal.qClientes.SQL.Add('values (:pId_cli, :pCli_nome, :pCli_documento, :pCli_fantasia, :pCli_endereco, :pCli_bairro, :pCli_cidade, :pCli_cep, :pCli_uf, :pCli_tel, :pCli_fax, :pCli_cel, :pCli_obs, :pCli_email, :pCli_dtCadastro, :pCli_pessoa, :pId_vend, :pcli_contato)');

dmPrincipal.qClientes.ParamByName('pId_cli').AsInteger:= StrToInt(dbe_idCli.Text);
dmPrincipal.qClientes.ParamByName('pCli_nome').AsString:= dbe_CliNome.Text;
dmPrincipal.qClientes.ParamByName('pCli_documento').AsString:= dbe_CliDocumento.Text;
dmPrincipal.qClientes.ParamByName('pCli_fantasia').AsString:= dbe_CliFantasia.Text;
dmPrincipal.qClientes.ParamByName('pCli_endereco').AsString:= dbe_CliEndereco.Text;
dmPrincipal.qClientes.ParamByName('pCli_bairro').AsString:= dbe_CliBairro.Text;
dmPrincipal.qClientes.ParamByName('pCli_cidade').AsString:= dbe_CliCidade.Text;
dmPrincipal.qClientes.ParamByName('pCli_cep').AsString:= dbe_CliCep.Text;
dmPrincipal.qClientes.ParamByName('pCli_uf').AsString:= dbe_CliUf.Text;
dmPrincipal.qClientes.ParamByName('pCli_tel').AsString:= dbe_CliTel.Text;
dmPrincipal.qClientes.ParamByName('pCli_fax').AsString:= dbe_CliFax.Text;
dmPrincipal.qClientes.ParamByName('pCli_cel').AsString:= dbe_CliCel.Text;
dmPrincipal.qClientes.ParamByName('pCli_obs').AsString:= dbm_CliObs.Text;
dmPrincipal.qClientes.ParamByName('pCli_email').AsString:= dbe_CliEmail.Text;
dmPrincipal.qClientes.ParamByName('pCli_dtCadastro').AsDate:= StrToDate(dbe_ClidtCad.Text);
dmPrincipal.qClientes.ParamByName('pCli_pessoa').AsString:= dcb_CliPessoa.Text;
dmPrincipal.qClientes.ParamByName('pId_vend').AsInteger:= StrToInt(dbe_idVend.Text);
dmPrincipal.qClientes.ParamByName('pcli_contato').AsString:= dbe_CliContato.Text;

dmPrincipal.qClientes.ExecSQL;

 

Apenas uma observação, o campo id_cli é integer e autoincremento..

 

Você poderia me ajudar?

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, bom dia!

 

No momento que você está executando essa instrução, você já possuí o número gerado pelo seu campo ID_CLI?

 

Pergunto isso por que geralmente, o auto-incremento é disparado pelo próprio banco de dados na hora que os dados são gravados. Até então, a sua aplicação não sabe qual o número foi/será gerado ainda.

 

Caso esse seja o problema, existem algumas maneiras de contornar isso, mas primeiro vamos detectar o causador para depois pensarmos na "cura".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então imaginei que seria por isso mesmo.

Quando clico em NOVO o campo id_cli fica em branco, pq por ser autoincremento ele só vai gerar o codigo depois que eu salvar o cadastro.

 

Eu teria que criar algum tipo de variavel pra ir incrementando o campo do código?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

O que você pode fazer é passar no "Values" do seu SQL o valor Null no lugar de :pId_cli e retirar a linha que contem o código dmPrincipal.qClientes.ParamByName('pId_cli').AsInteger:= StrToInt(dbe_idCli.Text);

 

Assim, na hora que houver a gravação do registro, o banco de dados irá gerar seu próximo código normalmente e sua aplicação não terá problemas.

 

Experimente e veja o que acha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz essa troca da qual me falou, mas agora da outro erro :/

Fala que a data nao é valida. Mas no meu banco de dados coloquei que o campo dtCadastro poderia ser vazio.

 

Para tentar resolver o problema, no meu edit dtCadastro, no evento onEnter, coloquei o seguinte código: dbe_dtCadastro.text:=DateToStr(Date());

Desta maneira a data ja vem automatica.. mas ainda sim fica dando o mesmo problemas.

No meu cadastro, nem todos os campos sao obrigatorios. Se tiver algum campo em branco na hora de salvar, vai dar este problema de que o dado nao é valido?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Como está definida o tipo da coluna a qual você armazena a data no seu banco de dados? Verifique se o tipo dessa coluna não está diferente de Date ou Timestamp. Se estiver, essa é a possível causa do problema, ou seja, você estaria tentando guardar uma informação de um tipo diferente da que ele aceita.

 

As colunas da sua tabela que estiverem definidas com a restrição de "NOT NULL", são colunas aonde se torna obrigatório o preenchimento por parte do seu sistema. Quando essa mesma coluna vier sem a informação no momento de gravação, o erro retornado pelo seu programa deve ser uma mensagem com alguma informação "IS NOT NULL OR IS NOT EMPTY".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Confirmei e o campo estava como data mesmo, nao sei pq o erro entao :/

 

Mas ja resolvi.. coloquei uma zTable para salvar os dados na tabela e usei o componente actionmanager para realizar esses comandos.

Não sei se é aconselhavel, mas foi a unica maneira que achei para resolver.

 

Obrigada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Entendi, disponha.

 

Edite o tópico e não esqueça de colocar [Resolvido] na frente do título. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.