Problema em um UPDATE via query.

Delphi

13/04/2004

Olá, meu problema é o seguinte:

tenho uma tabela em mysql, na qual acesso com o componente zeoslib.
tenho vários campos, todos eles do tipo varchar, exceto o ´Codigo´ (Int(+)).



em um append eu puxo os dados da grid e jogo eles no edit, tudo certo ate ai, mas, na hora de atualizar, nao estou conseguindo dar um Update..


abaixo segue minha rotina:



Sql.Text := ´Update tbFuncionarios ´+
            ´   Set Nome             = :00,´+
            ´       Endereco         = :01,´+
            ´       Bairro           = :02,´+
            ´       Cidade           = :03,´+
            ´       CartProfissional = :04,´+
            ´       SeriedaCart      = :05,´+
            ´       Cpf              = :06,´+
            ´       Profissao        = :07,´+
            ´       Cep              = :08,´+
            ´       Cbo              = :09,´+
            ´       scontrato        = :10,´+
            ´       identidade       = :11,´+
            ´       ssp              = :12,´+
            ´       sal_base         = :13,´+
            ´       DataNasc         = :14,´+
            ´       DataAdm          = :15 ´+
            ´ Where Codigo = Codigo ´;
Params[00].asString := edNome.Text;    // Nome
Params[01].asString := edEnd.Text;     // Endereço
Params[02].asString := edBairro.Text;  // Bairro
Params[03].asString := edCidade.Text;  // Cidade
Params[04].asString := edCarteiraProf.Text; // CartProfissional
Params[05].asString := edSerie.Text;      // SeriedaCart
Params[06].asString := edCpf.Text;        // Cpf
Params[07].asString := edProfissao.Text;  // Profissao
Params[08].asString := edCep.Text;        // Cep
Params[09].asString := edCbo.Text;        // Cbo
Params[10].asString := edscontrato.Text;  // scontrato
Params[11].asString := edIdentidade.Text; // Identidade
Params[12].asString := edSsp.Text;        // SSP
Params[13].asString := edSalario.Text;    // sal_base
Params[14].asString := edDataNasc.Text;   // DataNasc
Params[15].asString := edDataAdm.Text;    // DataAdm
ExecSql;


o erro é este:




obrigado...


Otto

Otto

Curtidas 0

Respostas

G1b4

G1b4

13/04/2004

Você só esqueceu de colocar aspa simples nos parâmetros...
.
.
.
ParamByName[´00´]:=....
.
.
.
FLWS :D :D :D :D

[i:441e79e2ad]>g1b4<
Programador Delphi[/i:441e79e2ad]


GOSTEI 0
G1b4

G1b4

13/04/2004

HEhe
Não vi q era Params...
Use ao invés de Params
ParaByName[´00´].AsString:=...
Ok?


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

13/04/2004

Sql.Text := ´Update tbFuncionarios ´+
                        ´     Set Nome                         = :Nome,´+
                        ´             Endereco                 = :Endereco,´+
                        ´             Bairro                     = :Bairro,´+
                        ´             Cidade                     = :Cidade,´+
                        ´             CartProfissional = :CartProfissional,´+
                        ´             SeriedaCart           = :SeriedaCart,´+
                        ´             Cpf                           = :Cpf,´+
                        ´             Profissao               = :Profissao,´+
                        ´             Cep                           = :Cep,´+
                        ´             Cbo                           = :Cbo,´+
                        ´             scontrato               = :scontrato,´+
                        ´             identidade             = :identidade,´+
                        ´             ssp                           = :ssp,´+
                        ´             sal_base                 = :sal_base,´+
                        ´             DataNasc                 = :DataNasc,´+
                        ´             DataAdm                   = :DataAdm ´+
                        ´ Where Codigo = :Codigo´;
ParamByName(´Nome´).asString := edNome.Text;       // Nome
ParamByName(´Endereco´).asString := edEnd.Text;         // Endereço
ParamByName(´Bairro´).asString := edBairro.Text;   // Bairro
ParamByName(´Cidade´).asString := edCidade.Text;   // Cidade
ParamByName(´CartProfissional´).asString := edCarteiraProf.Text; // CartProfissional
ParamByName(´SeriedaCart´).asString := edSerie.Text;           // SeriedaCart
ParamByName(´Cpf´).asString := edCpf.Text;               // Cpf
ParamByName(´Profissao´).asString := edProfissao.Text;   // Profissao
ParamByName(´Cep´).asString := edCep.Text;               // Cep
ParamByName(´Cbo´).asString := edCbo.Text;               // Cbo
ParamByName(´scontrato´).asString := edscontrato.Text;   // scontrato
ParamByName(´identidade´).asString := edIdentidade.Text; // Identidade
ParamByName(´ssp´).asString := edSsp.Text;               // SSP
ParamByName(´sal_base´).asString := edSalario.Text;       // sal_base
ParamByName(´DataNasc´).asString := edDataNasc.Text;     // DataNasc
ParamByName(´DataAdm´).asString := edDataAdm.Text;       // DataAdm
ParamByName(´Codigo´).asInteger := CodigoQueSofrerahAlteracao
ExecSql;


GOSTEI 0
Otto

Otto

13/04/2004

obrigado pelas respostas,

tipo,,

ParamByName nao rolou nao...

outra, Codigo nao muda nao, Codigo é o unico que nao será alterado, ele é apenas o meu guia....

obrigado...


GOSTEI 0
Otto

Otto

13/04/2004

perdão, escrevi errado, é que eu nao li a rotina direito nao, vou testarrt aqui....


GOSTEI 0
Otto

Otto

13/04/2004

ficou deste jeito:

Sql.Text := ´Update tbFuncionarios ´+
            ´   Set Nome             = :00,´+
            ´       Endereco         = :01,´+
            ´       Bairro           = :02,´+
            ´       Cidade           = :03,´+
            ´       CartProfissional = :04,´+
            ´       SeriedaCart      = :05,´+
            ´       Cpf              = :06,´+
            ´       Profissao        = :07,´+
            ´       Cep              = :08,´+
            ´       Cbo              = :09,´+
            ´       scontrato        = :10,´+
            ´       identidade       = :11,´+
            ´       ssp              = :12,´+
            ´       sal_base         = :13,´+
            ´       DataNasc         = :14,´+
            ´       DataAdm          = :15 ´+
            ´ Where Codigo = Codigo ´;

ParamByName(´Nome´).asString := edNome.Text;    // Nome
ParamByName(´Endereco´).asString := edEnd.Text;     // Endereço
ParamByName(´Bairro´).asString := edBairro.Text;  // Bairro
ParamByName(´Cidade´).asString := edCidade.Text;  // Cidade
ParamByName(´CartProfissional´).asString := edCarteiraProf.Text; // CartProfissional
ParamByName(´SeriedaCart´).asString := edSerie.Text;      // SeriedaCart
ParamByName(´Cpf´).asString         := edCpf.Text;        // Cpf
ParamByName(´Profissao´).asString   := edProfissao.Text;  // Profissao
ParamByName(´Cep´).asString         := edCep.Text;        // Cep
ParamByName(´Cbo´).asString         := edCbo.Text;        // Cbo
ParamByName(´scontrato´).asString   := edscontrato.Text;  // scontrato
ParamByName(´Identidade´).asString  := edIdentidade.Text; // Identidade
ParamByName(´SSP´).asString         := edSsp.Text;        // SSP
ParamByName(´sal_base´).asString    := edSalario.Text;    // sal_base
ParamByName(´DataNasc´).asString    := edDataNasc.Text;   // DataNasc
ParamByName(´DataAdm´).asString     := edDataAdm.Text;    // DataAdm
ParamByName(´Codigo´).asInteger     := [b]CodTabela[/b];
ExecSql;



CodTabela é uma variavel inteira que que recebe o valor do Campo ´Codigo´ assim que eu puxo da grid...


testei e nao deu... :cry:


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

13/04/2004

faça EXATAMENTE dessa forma:

Sql.Text := ´Update tbFuncionarios ´+ 
            ´     Set Nome             = :Nome,´+ 
            ´         Endereco         = :Endereco,´+ 
            ´         Bairro           = :Bairro,´+ 
            ´         Cidade           = :Cidade,´+ 
            ´         CartProfissional = :CartProfissional,´+ 
            ´         SeriedaCart      = :SeriedaCart,´+ 
            ´         Cpf              = :Cpf,´+ 
            ´         Profissao        = :Profissao,´+ 
            ´         Cep              = :Cep,´+ 
            ´         Cbo              = :Cbo,´+ 
            ´         scontrato        = :scontrato,´+ 
            ´         identidade       = :identidade,´+ 
            ´         ssp              = :ssp,´+ 
            ´         sal_base         = :sal_base,´+ 
            ´         DataNasc         = :DataNasc,´+ 
            ´         DataAdm          = :DataAdm ´+ 
            ´ Where Codigo = :Codigo´; 
ParamByName(´Nome´).asString := edNome.Text;                     // Nome 
ParamByName(´Endereco´).asString := edEnd.Text;                  // Endereço 
ParamByName(´Bairro´).asString := edBairro.Text;                 // Bairro 
ParamByName(´Cidade´).asString := edCidade.Text;                 // Cidade 
ParamByName(´CartProfissional´).asString := edCarteiraProf.Text; // CartProfissional 
ParamByName(´SeriedaCart´).asString := edSerie.Text;             // SeriedaCart 
ParamByName(´Cpf´).asString := edCpf.Text;                       // Cpf 
ParamByName(´Profissao´).asString := edProfissao.Text;           // Profissao 
ParamByName(´Cep´).asString := edCep.Text;                       // Cep 
ParamByName(´Cbo´).asString := edCbo.Text;                       // Cbo 
ParamByName(´scontrato´).asString := edscontrato.Text;           // scontrato 
ParamByName(´identidade´).asString := edIdentidade.Text;         // Identidade 
ParamByName(´ssp´).asString := edSsp.Text;                       // SSP 
ParamByName(´sal_base´).asString := edSalario.Text;              // sal_base 
ParamByName(´DataNasc´).asString := edDataNasc.Text;             // DataNasc 
ParamByName(´DataAdm´).asString := edDataAdm.Text;               // DataAdm 
ParamByName(´Codigo´).asInteger := CodTabela;
ExecSql;


não deu certo pq vc criou um parâmetro de nome ´00´ e está utilizando om parâmetro de nome ´Nome´, que não existe. faça como está no código acima....


GOSTEI 0
Vinicius2k

Vinicius2k

13/04/2004

Emerson,

Mas teoricamente, a rotina inicial do oTTo não teria que ter funcionado? [color=red:de22dd8885]* [/color:de22dd8885]Talvez até sem entender exatamente o que estava fazendo, mas ele pegou os paramentros pelos índices... a não ser que não possam ser utilizados apenas números nos nomes dos parãmetros... :roll:
Se não houver esta restrição quanto ao número o [color=red:de22dd8885]*[/color:de22dd8885]problema é apenas na cláusula where em que não foi especificado que ´Codigo´ é um parametro (de índice 16) e não foi lhe dado um valor antes do ExecSQL...

T+


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

13/04/2004

é isso mesmo [b:6146216adb]vinicius2K[/b:6146216adb]: um parâmetro não pode ser iniciado com um número.


GOSTEI 0
Vinicius2k

Vinicius2k

13/04/2004

é isso mesmo [b:2bdaaac927]vinicius2K[/b:2bdaaac927]: um parâmetro não pode ser iniciado com um número.

Obrigado Emerson. :wink:


GOSTEI 0
POSTAR